무료 미리 보기8분 분량

해시 함수가 하는 일

해시 함수는 어떤 입력이든(단어 하나, 파일 하나, 트랜잭션이 가득 든 블록 전체) 받아서, 해시 또는 다이제스트라고 부르는 고정된 길이의 짧은 출력을 만들어요. Bitcoin이 쓰는 SHA-256은 입력이 글자 하나든 장편 영화 한 편이든 항상 256비트를 만들어 내고, 보통 16진수 64자로 표기해요.

중요한 성질들

  • 결정적: 같은 입력은 어느 컴퓨터에서든 항상 같은 해시를 내요.
  • 빠른 계산: 큰 파일도 해시하는 데 1초도 채 걸리지 않아요.
  • 일방향: 해시만 보고 그 해시를 만드는 입력을 찾아낼 현실적인 방법은 추측 말고는 없어요.
  • 눈사태 효과: 입력에서 글자 하나만 바꿔도 출력 비트의 약 절반이 바뀌어요. 그래서 비슷한 입력도 전혀 관계없는 해시를 내요.

또 하나의 성질인 충돌 저항성은 해시가 같은 서로 다른 두 입력을 아무도 찾을 수 없다는 뜻이에요. 가능한 입력이 가능한 출력보다 많으니 충돌은 반드시 존재해요. 하지만 잘 설계된 함수라면 충돌 하나를 찾는 데 세상에 존재하는 것보다 더 많은 연산 능력이 필요해요.

크립토에서 해시를 만나는 곳

  • 각 블록은 바로 앞 블록의 해시를 기록해요. 그래서 오래된 기록을 조작하면 흔적이 드러나요.
  • 머클 트리는 블록 안의 모든 트랜잭션을 해시해서 하나의 루트 해시로 모아요. 그래서 블록 전체를 내려받지 않고도 어떤 트랜잭션이 그 블록에 들어 있다는 걸 증명할 수 있어요.
  • 작업 증명 채굴자는 목표 숫자보다 작은 블록 해시를 찾아요. 이건 입력을 하나씩 바꿔 가며 계속 시도해 보는 방법으로만 할 수 있어요.
  • Ethereum 주소는 공개 키의 Keccak-256 해시에서 일부를 잘라 낸 거예요.

해시가 지켜 주지 못하는 지점

해시는 데이터가 해시된 뒤로 바뀌지 않았다는 걸 증명해요. 그 데이터가 애초에 맞았는지는 아무것도 말해 주지 않아요. 그리고 일방향이라는 성질은 입력을 추측하기 어려울 때만 의미가 있어요. 네 자리 PIN을 해시해 두면, 누구든 가능한 PIN 1만 개를 전부 해시해서 비교하는 것만으로 되돌릴 수 있어요. 비밀번호, 그리고 사람이 직접 지어낸 시드 문구도 같은 이유로 무너져요. 보호는 해시에서 나오는 게 아니라 가능한 입력의 개수에서 나와요.

해시는 문서에 찍힌 봉인이지, 문서 내용에 대한 판결이 아니에요.