프로그램을 내려받다 보면 공식 사이트가 파일 옆에 긴 영문·숫자를 함께 적어 놓은 경우가 있습니다. 가상자산 입출금 내역에도 비슷한 모양의 거래 해시 또는 TXID가 붙습니다. 둘 다 해시 함수가 만든 값입니다.
해시는 데이터를 정해진 길이의 값으로 바꾸고, 나중에 같은 데이터인지 대조할 표식을 만듭니다. 흔히 ‘데이터의 지문’이라고 부르는 이유입니다. 내용을 숨기는 암호화와는 역할이 다릅니다.
컴퓨터 분야에는 검색 속도를 높이는 등 다른 목적의 해시도 있습니다. 이 글에서 말하는 해시는 보안과 블록체인에 쓰이는 암호학적 해시 함수입니다.
마침표 하나가 결과 전체를 바꿉니다
SHA-256이라는 해시 함수에 BTX를 넣어 보겠습니다. 바로 뒤에 마침표 하나를 붙인 BTX.도 같은 방식으로 계산했습니다.
입력: BTX
SHA-256:
38eaa6f20b418492d6e8ad1df025fac418e44b668a7ca69397780315cf65a31b
입력: BTX.
SHA-256:
81648ffa591634d4fd9f612a3007cf6cc6691cea75e267216c3ab80f94b51444
두 입력은 마침표 하나만 다르지만, 결과에서 그 차이를 따라갈 만한 규칙은 보이지 않습니다. 작은 입력 변화가 출력 전체에 넓게 퍼지는 성질을 눈사태 효과(avalanche effect)라고 부릅니다. 결과는 무작위처럼 보이지만 계산은 결정적입니다. 입력 바이트와 알고리즘이 같으면 언제 계산해도 같은 값이 나옵니다.
예시의 두 결과는 모두 64자리입니다. SHA-256의 출력은 입력이 세 글자든 수 기가바이트짜리 파일이든 256비트로 정해져 있습니다. 256비트는 32바이트이고, 한 글자가 4비트를 나타내는 16진수로 적으면 64자리가 됩니다. SHA-256의 256은 이 출력 길이를 가리킵니다. NIST의 해시 함수 설명
여기서 ‘같은 입력’은 화면에 비슷하게 보이는 문장이 아니라 완전히 같은 바이트열을 뜻합니다. 줄 끝에 보이지 않는 줄바꿈이 하나 붙거나 문자 인코딩이 달라져도 해시는 바뀝니다. 파일 해시를 비교할 때 파일명이나 아이콘이 아니라 실제 내용을 계산하는 이유입니다.

입력의 작은 변화와 고정 길이 출력을 단순화한 생성 개념 삽화. 그림 속 칸은 실제 SHA-256 비트나 16진수 값을 재현한 것이 아닙니다.
해시는 원문을 줄여 담은 압축 파일이 아닙니다
임의로 긴 데이터도 256비트 값으로 바꾸지만, 그 안에 원문을 압축해 넣는 계산은 아닙니다. 해시에는 원문 복구 절차나 열쇠가 없습니다.
안전한 암호학적 해시 함수는 결과 하나가 주어졌을 때 그 결과를 만드는 입력을 현실적인 시간 안에 찾기 어렵도록 설계됩니다. 이를 역상 저항성(preimage resistance)이라고 합니다. 주어진 원문과 같은 해시를 내는 다른 원문을 찾기 어려운 성질은 제2역상 저항성이고, 서로 다른 입력 두 개를 처음부터 찾아 같은 해시를 만들기 어려운 성질은 충돌 저항성(collision resistance)입니다. NIST 해시 함수 용어집
‘찾기 어렵다’와 ‘존재하지 않는다’는 다른 말입니다. 출력의 경우의 수는 유한하고 입력은 훨씬 많으므로 서로 다른 입력이 같은 해시를 갖는 충돌은 수학적으로 반드시 존재합니다. 좋은 해시 함수는 현실적인 계산량으로 그런 입력을 찾아내기 어렵게 만듭니다. ‘디지털 지문’은 유용한 비유이지만 모든 해시가 우주에서 단 하나뿐이라는 뜻은 아닙니다.
암호화와 해시는 목적부터 다릅니다
암호화는 읽을 수 있는 원문을 열쇠를 가진 사람만 읽을 수 있는 암호문으로 바꿉니다. 권한이 있는 사람은 열쇠로 복호화해 원문을 되찾을 수 있습니다. 해시는 되찾을 원문을 보관하지 않고 비교할 값을 계산합니다. NIST의 암호화 정의
| 구분 | 암호화 | 해시 |
|---|---|---|
| 주된 목적 | 내용을 숨김 | 데이터가 같은지 비교 |
| 원문 복구 | 올바른 열쇠로 가능 | 일반적인 복호화 절차가 없음 |
| 결과 길이 | 원문과 방식에 따라 달라짐 | 알고리즘별로 고정 |
| 대표적인 질문 | “열쇠 없이 읽을 수 있는가?” | “원문이 달라졌는가?” |
원문 후보가 1234 같은 짧은 비밀번호라면 가능한 값을 하나씩 해시해 훔친 해시와 맞춰 볼 수 있습니다. 이는 복호화가 아니라 추측과 대조입니다. 그래서 비밀번호를 빠른 SHA-256 한 번만 적용해 저장해서는 안 됩니다. 이용자마다 다른 솔트(salt)와 비용 인자를 넣어 한 번의 추측에도 자원이 들게 만든 전용 방식을 써야 합니다. NIST SP 800-63B
비교할 기준값도 믿을 수 있어야 합니다
공식 사이트에서 프로그램 설치 파일과 SHA-256 값을 함께 공개했다고 해보겠습니다. 이용자는 내려받은 파일의 해시를 직접 계산해 공식 값과 비교할 수 있습니다. 두 값이 같으면 실무에서는 같은 파일로 판단할 수 있고, 다르면 전송 오류나 변조 가능성을 살펴봐야 합니다. 해시는 어디가 바뀌었는지는 알려주지 않지만, 무언가 달라졌다는 사실은 빠르게 드러냅니다.
다만 공격자가 설치 파일과 공식 페이지의 해시를 함께 바꿀 수 있었다면 두 값은 여전히 같을 수 있습니다. 해시만으로 그 파일을 누가 만들었는지, 악성 기능이 없는지, 내용이 처음부터 옳았는지는 알 수 없습니다. 출처까지 확인하려면 신뢰할 수 있는 경로에서 기준 해시를 받거나 디지털 서명을 함께 검증해야 합니다.
비트코인 같은 공개형 블록체인에서는 여러 노드가 같은 규칙으로 거래와 블록을 검증하고, 각자 보관한 원장과 비교합니다. 해시는 이 분산된 검증과 결합하면서 연결 고리가 됩니다.
비트코인은 거래 요약과 블록 연결에 해시를 씁니다
비트코인에서는 해시들이 층층이 연결됩니다.
- 거래를 합의 규칙에 맞춰 바이트열로 표현한 뒤
TXID라는 식별값을 만듭니다. 비트코인의 TXID는 정해진 직렬화 형식에 SHA-256을 두 번 적용해 계산합니다. - 한 블록에 들어갈 여러 TXID를 둘씩 묶어 다시 더블 SHA-256으로 계산합니다. 이 과정을 한 값만 남을 때까지 반복한 결과가
머클 루트(Merkle root)입니다. - 머클 루트는 블록 헤더에 들어갑니다. 같은 헤더에는 바로 이전 블록 헤더의 해시도 기록됩니다.
- 과거 블록의 거래 기록을 바꾸면 이를 반영하는 요약값과 블록 헤더 해시가 달라집니다. 뒤 블록에 적힌 이전 블록 해시와도 맞지 않게 됩니다.

비트코인의 거래 요약과 블록 연결을 단순화한 생성 개념 삽화. 붉은 경로는 거래 기록이 바뀌어 TXID가 달라졌을 때 영향을 받는 계산 경로를 나타냅니다. 홀수 개 TXID 처리 같은 세부 규칙은 생략했습니다.
머클 트리는 블록의 TXID 집합을 하나의 머클 루트로 요약합니다. 머클 경로와 검증된 블록 헤더가 있으면 모든 거래를 내려받지 않고도 특정 TXID가 그 블록에 포함됐는지 확인할 수 있습니다. Bitcoin Developer Guide
채굴자는 해시를 해독하지 않습니다
깨진 연결을 발견하는 일과 과거를 다시 쓰기 어렵게 만드는 일은 다릅니다. 누군가 과거 블록에서 거래를 빼거나 합의 규칙에 맞는 다른 거래로 이력을 다시 구성하면, 구조상 이어지는 경쟁 체인을 만들 수는 있습니다. 서명이나 지출 규칙을 어긴 거래는 작업증명을 아무리 다시 해도 노드가 거부합니다.
비트코인은 이 재계산에 작업증명이라는 비용을 붙입니다. 채굴자는 블록 헤더의 nonce를 비롯해 바꿀 수 있는 값을 조정하면서 헤더에 더블 SHA-256을 반복합니다. 결과를 256비트 정수로 보았을 때 네트워크가 정한 목표값 이하가 나와야 합니다. 채굴은 조건에 맞는 결과가 나올 때까지 새 후보를 반복해 시험하는 일입니다.
오래된 블록을 바꾸려면 그 뒤의 작업도 다시 수행하면서 계속 새 블록을 만드는 정직한 네트워크를 따라잡아야 합니다. 시간이 지나 블록이 더 쌓일수록 과거 기록을 다시 쓰는 비용이 커집니다.
모든 블록체인이 비트코인과 같은 SHA-256이나 작업증명을 쓰는 것은 아닙니다. 지분증명 체인도 데이터 식별과 블록 연결에는 해시를 널리 쓰지만, 어느 기록을 정식 원장으로 인정할지는 다른 합의 규칙으로 결정합니다.
NIST는 블록체인의 성질을 변경이 드러나는(tamper-evident) 것과 변경에 저항하는(tamper-resistant) 것으로 나눠 설명합니다. 해시 연결은 변경 흔적을 만들고, 여러 노드의 원장 복제와 검증·합의 규칙은 기록을 다시 쓰기 어렵게 만듭니다. NIST의 블록체인 설명
거래소에서 보이는 거래 해시는 무엇일까요
가상자산을 입출금한 뒤 받는 거래 해시나 TXID는 블록체인 기록에서 해당 거래를 찾기 위한 식별자입니다. 비트코인 같은 공개형 체인의 블록 탐색기에 입력하면 상태, 블록 포함 여부, 주소, 수량과 수수료 같은 공개 정보를 조회할 수 있습니다. 탐색기는 해시를 거꾸로 푸는 대신, 보관한 거래 데이터에서 그 식별값과 연결된 항목을 찾아 보여줍니다.
TXID가 생겼다는 사실만으로 거래가 유효하거나 최종 확정됐다는 뜻도 아닙니다. 네트워크 전파 여부, 블록 포함 여부와 후속 확인 수는 따로 살펴봐야 합니다.
그렇다면 해시가 같으면 그 내용도 믿어도 될까요? 적어도 기준을 잡은 뒤 바뀌지 않았다는 뜻이지, 처음부터 옳았다는 뜻은 아닙니다. 지문이 알리바이까지 써주지는 않으니까요.
참고 자료
- NIST 해시 함수 용어집 — 고정 길이 출력과 역상·충돌 저항성
- NIST FIPS 180-4 Secure Hash Standard — SHA-2 계열 표준과 메시지 변경 탐지
- NIST Hash Functions — 승인된 해시 알고리즘과 보안 강도
- NIST 암호화 용어집 — 암호화와 복호화의 정의
- NIST SP 800-63B — 비밀번호 저장 시 솔트와 비용 인자를 쓰는 방식
- NIST Blockchain — 변경 탐지, 변경 저항성, 분산 검증과 합의
- Bitcoin Developer Guide: Block Chain — TXID, 머클 트리, 블록 연결과 작업증명
- Bitcoin Developer Reference: Transactions — 거래 직렬화와 TXID
안내
이 글은 공개된 표준과 기술 문서를 바탕으로 해시와 블록체인의 일반 원리를 설명합니다. 블록체인마다 사용하는 해시 함수, 거래 식별 방식과 합의 규칙은 다를 수 있습니다. 특정 서비스의 보안이나 개별 거래의 최종 확정을 보장하는 안내가 아닙니다.


