해시는 파일이나 비트코인 거래 같은 데이터에 계산을 적용한 결과입니다. 같은 데이터에 같은 절차를 적용하면 같은 지문이 나옵니다. 암호학적 해시는 같은 결과를 내는 다른 데이터나 주어진 결과에 맞는 입력을 찾기 어렵도록 설계됩니다. 원본 데이터를 암호화한 복사본은 아닙니다.
설치 파일을 내려받았다고 해 보세요. 배포자가 확인용 지문을 공개했다면 같은 알고리즘으로 내려받은 사본의 지문을 계산합니다. 두 값이 다르면 데이터가 같지 않다는 뜻입니다. 파일이 손상되거나 교체되거나 수정되었을 수 있습니다. 반대로 신뢰할 수 있는 지문과 일치하면 올바른 사본이라는 강한 근거가 됩니다. 파일 전체를 손으로 대조할 필요는 없습니다. 예를 들어 SHA-256은 256비트 결과를 만들며 보통 64개의 16진수 문자로 표시합니다. 짧은 메시지든 큰 파일이든 결과 길이는 같습니다. [1] [3]
중요한 점은 기준 지문의 출처입니다. 공격자가 웹사이트의 파일과 공개된 해시를 모두 바꾸면 둘은 여전히 일치합니다. 해시 계산에는 비밀 키가 필요하지 않아 공개 데이터의 해시는 누구나 계산할 수 있습니다. 그래서 키 보유자가 데이터를 확인해 주는 디지털 서명과 다릅니다. Bitcoin Core를 검증할 때는 파일의 해시뿐 아니라 지문 목록의 서명과 서명 키의 신뢰성도 확인합니다. 해시만으로 작성자, 프로그램의 안전성, 문서의 진실성을 증명할 수는 없습니다. [3]
해시에는 “복호화”라는 역방향 단계가 없습니다. 고정 길이의 결과에 파일 전체가 들어 있지 않으므로 백업 수단도 아닙니다. 하지만 어떤 입력이든 안전하게 숨겨 준다는 뜻은 아닙니다. 짧고 흔한 비밀번호를 해시했다면 공격자는 가능성이 높은 비밀번호를 넣어 보고 지문을 비교할 수 있습니다. 함수를 거꾸로 풀 필요 없이 입력을 맞히면 됩니다. 따라서 빠른 해시 하나만으로 강력한 비밀번호나 안전한 비밀번호 저장 전용 방식을 대체할 수 없습니다. [1] [5]
preimage 탐색은 주어진 지문을 만들어 내는 입력 데이터를 찾는 일입니다. 충돌 탐색은 같은 해시를 내는 서로 다른 입력 두 개를 찾으면 되며, 결과가 미리 정해져 있지는 않습니다. 고정 길이의 출력보다 가능한 입력이 더 많으므로 충돌은 수학적으로 존재합니다. 암호학적 안전성은 그런 사례를 현실적으로 찾아내기 어렵다는 뜻이지, 불가능하다는 뜻이 아닙니다. 또한 “해시”는 하나의 알고리즘 이름이 아닙니다. 모든 해시 함수가 암호학적 보안을 목적으로 만들어지는 것은 아닙니다. [1]
비트코인은 해시로 거래를 식별하고 블록을 연결하며 채굴 작업을 검증합니다. 하지만 구체적인 계산법은 다릅니다. 블록 헤더 해시를 계산할 때는 SHA-256을 두 번 적용하고, HASH160은 SHA-256과 RIPEMD-160을 결합합니다. Tagged hash는 태그를 사용해 계산 목적도 구분합니다. 결과를 직접 검증하려면 올바른 알고리즘과 정확한 입력 바이트, 즉 데이터의 기본 단위가 필요합니다. 텍스트 “61”의 바이트는 ASCII에서 문자 a를 뜻하는 16진수 값 61의 단일 바이트와 다릅니다. 따라서 표시된 표기를 해시하는 것과 실제 데이터를 해시하는 것은 다른 계산입니다. [2] [4]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 SHA-256, Proof of Work, Block Header, 트랜잭션, Merkle Tree, Bitcoin. 다음 항목에서도 이 글을 참조합니다 SHA-256, Nonce, HTLC, Hashcash.