
해시 함수: 암호화폐의 모든 것 아래 조용히 도는 장치
블록체인을 핵심 부품까지 뜯어보면, 거의 모든 일을 해내는 두 종류의 암호 기술이 나옵니다. 디지털 서명은 누가 쓸 수 있는지 정합니다. 해시 함수는 나머지 모든 것을 한데 묶습니다 — 블록, 주소, 채굴, 거래 ID, 심지어 지갑이 당신이 서명하려는 것을 해독하는 방식까지요.
해시 함수는 좀처럼 설명되지 않습니다. 좀처럼 눈에 띄지 않기 때문입니다. 십 분을 들일 값어치가 있습니다. 이해하고 나면 암호화폐의 놀랄 만큼 많은 부분이 더는 마법처럼 보이지 않으니까요.
해시 함수가 하는 일
해시 함수는 어떤 입력이든 — 단어 하나, 파일 하나, 거래로 가득 찬 블록 하나 — 받아서 크기가 고정된 지문을 만들어 냅니다. 비트코인이 쓰는 SHA-256은 글자 하나를 넣든 1기가바이트를 넣든 언제나 256비트를 내놓고, 보통 16진수 64자로 씁니다.
쓸모를 만드는 성질은 세 가지입니다.
결정적. 같은 입력은 언제나 같은 출력을 냅니다. 누구든 어디서든 다시 계산해 확인할 수 있습니다.
일방향. 지문이 주어져도 입력으로 거슬러 올라갈 실용적인 방법이 없습니다. 유일한 방법은 맞을 때까지 입력을 짐작해 보는 것이고, 좋은 해시라면 그것은 가망이 없습니다.
충돌 저항. 같은 지문을 가진 서로 다른 두 입력을 찾는 것은 사실상 불가능합니다. 글자 하나만 바꿔도 출력은 완전히, 예측할 수 없게 바뀝니다.
해시란 그것이 전부입니다. 더 큰 무언가의 짧고, 확인할 수 있고, 위조할 수 없는 지문.
모르는 새 해시를 마주치는 곳
거래 ID. txid는 거래의 해시일 뿐입니다. 그래서 유일하고, 그래서 블록 탐색기에 붙여 넣는 것이 바로 이것입니다. 정확히 하나의 거래를 가리키고, 같은 ID를 가진 다른 거래는 누구도 만들 수 없습니다.
체인 그 자체. 모든 블록은 바로 앞 블록의 해시를 담고 있습니다. 오래된 블록에서 무엇이든 바꾸면 그 해시가 바뀌고, 그 뒤의 모든 블록과의 연결이 끊깁니다. 이 지문의 사슬이 역사를 조작하면 드러나게 만듭니다.
채굴. 작업 증명은 해시 추첨입니다. 채굴자는 블록 헤더를 거듭 해시하며 매번 숫자 하나를 바꿔, 목표값보다 낮은 결과를 찾습니다. 해시는 예측할 수 없으므로 지름길이 없고, 더 많은 시도만 있을 뿐입니다. 그래서 작업 증명은 실제 에너지를 쓰고, 그 비용이 보안을 삽니다.
주소. 대부분의 주소는 무언가의 해시입니다. 고전적인 비트코인 주소는 공개 키의 해시입니다. SSP의 비트코인 주소는 P2WSH, 즉 2-of-2 지출 규칙을 적은 증인 스크립트의 SHA-256 해시입니다. 쓰기 전에 체인 위에 있는 것은 그 지문이지 키 자체가 아닙니다.
지갑 안의 해시
해시는 체인 단계만의 개념이 아닙니다. 서명에 쓰는 소프트웨어 안에서도 나타납니다.
SSP Key는 당신이 승인하기 전에 이더리움 거래를 해독할 때, 함수 선택자로 그 호출이 무엇을 하는지 알아냅니다. 함수 시그니처를 Keccak-256으로 해시한 값의 앞 4바이트입니다. transfer(address,uint256)은 a9059cbb로 시작하는 값이, approve(address,uint256)는 095ea7b3로 시작하는 값이 됩니다. 해독기가 거래 맨 앞에서 이 4바이트를 보면 어떤 함수가 호출되는지 알고, 당신이 토큰을 보내는지 승인을 내주는지를 평이한 말로 보여 줄 수 있습니다.
해시가 무엇에 좋은지 잘 보여 주는 예입니다. 더 긴 것의 작고 모호함 없는 지문이죠. 동시에 그 한계를 일깨우기도 합니다. 4바이트는 워낙 짧아서 서로 다른 두 함수가 같은 선택자를 나눠 가질 수 있습니다. 해독기가 일부러 닫히는 쪽으로 실패하도록 만들어진 까닭 가운데 하나가 이것입니다. 예상 밖의 것은 모두 자신만만한 짐작이 아니라 날것의 데이터로 돌아갑니다.
해시가 할 수 없는 일
작은 입력은 숨기지 못합니다. 해시는 일방향이지만, 입력이 작은 후보 집합에서 온다면 공격자는 후보를 전부 해시해 비교하면 됩니다. 그래서 해시한 PIN이나 짧은 비밀번호는 거의 보호가 되지 않고, 그래서 시드 문구는 외우기 쉬운 무언가가 아니라 길고 무작위한 단어들입니다.
의미에 대해서는 아무것도 증명하지 않습니다. 해시는 두 것이 동일하다는 것을 증명합니다. 어느 쪽이 정직한지는 말하지 않습니다. 완벽하게 검증된 악의적 거래의 해시도 여전히 악의적 거래입니다.
암호화가 아닙니다. 해시를 "복호화"해서 원본을 되찾을 수는 없습니다. 해시를 거꾸로 돌린다고 주장하는 것은 짐작하고 있는 것입니다.
왜 당신과 관계있는가
해시를 손으로 계산할 일은 거의 없을 것입니다. 하지만 이해하고 있으면, 그렇지 않을 때는 외워야 할 규칙처럼 보이는 여러 가지가 설명됩니다.
txid가 지불의 존재를 증명하는 까닭. 확인된 거래를 고칠 수 없는 까닭. 채굴이 에너지를 소모하는 까닭. 쓰지 않은 주소가 키가 아니라 지문을 드러내는 까닭. 길고 무작위한 시드는 안전하고 짧고 기발한 시드는 그렇지 않은 까닭.
해시 함수는 암호화폐에서 조용히, 하루에 수십억 번, 그저 작동하는 부분입니다. 그것이 무엇을 보장하고 — 무엇을 보장하지 않는지 — 아는 것은 돈을 맡긴 체계를 이해하는 가장 값싼 방법 가운데 하나입니다.


