🔑 해싱 Hashing
해싱은 단어 하나든, 파일이든, 거래 내역이든, 블록 전체든 — 어떤 입력이든 고정된 수학 함수에 넣어 짧고 고정 길이의 문자열, 즉 해시(hash)를 뽑아내요. 같은 입력은 항상 같은 해시가 나오지만, 해시에서 원본을 되찾는 건 절대 불가능해요.
🪪 쉽게 풀면 — 디지털 지문
해시는 데이터의 디지털 지문이에요. 뭐든 넣으면 함수가 그것을 식별하는 독특한 문자열을 돌려줘요. 여기서 두 가지 유용한 성질이 따라옵니다. 첫째, 결정론적이에요: 같은 입력은 항상 똑같은 해시를 내므로 누구나 다시 확인할 수 있어요. 둘째, 변조 감지 봉인 역할을 해요: 데이터에서 글자 하나만 바뀌어도 지문이 더 이상 일치하지 않아서, 누군가 손댄 흔적이 즉시 드러납니다.
🧪 해싱을 유용하게 만드는 네 가지 성질
| 성질 | 뜻 |
|---|---|
| 🔁 결정론적 | 같은 입력은 항상 똑같은 해시를 만든다 |
| ➡️ 단방향 | 입력 → 해시는 가능하지만, 해시 → 입력은 불가능하다 |
| 🌊 눈사태 효과 | 글자 하나만 바꿔도 해시 전체가 완전히 달라진다 |
| 💥 충돌 저항성 | 서로 다른 두 입력이 같은 해시를 만들기는 사실상 불가능하다 |
📏 출력 길이는 항상 고정이에요. SHA-256은 입력이 글자 하나든 영화 파일 전체든, 항상 256비트 — 64자짜리 — 해시를 반환해요.
🔗 블록체인이 해싱에 의존하는 이유
블록체인은 블록들의 사슬이고, 해싱이 그 접착제예요. 각 블록은 바로 앞 블록의 해시를 담고 있어요. 오래된 블록을 건드리면 그 해시가 바뀌고, 이후 블록과의 연결이 모두 끊어집니다 — 그래서 네트워크 전체가 위변조를 바로 알아차려요. 해싱은 또 블록 탐색기에서 실제로 보이는 문자열들도 만들어요: 거래 ID, 블록 해시, 지갑 주소 모두 해시에서 비롯된 값이에요.
⛓️ 실제로 어디서 만나나요: 비트코인과 이더리움
비트코인은 채굴(작업증명)과 거래 검증, 주소 생성 모두에 SHA-256을 써요. 이더리움은 Keccak-256이라는 다른 함수를 씁니다. 이름은 달라도 역할은 같아요: 아무도 위조하거나 되돌릴 수 없는 고정 길이 지문을 만드는 것이죠.
🚨 입문자가 자주 헷갈리는 것들
- 🔓 "해시는 복호화할 수 있다" — 안 돼요. 키도 없고 역방향 경로도 없어요. 해시와 맞춰보는 유일한 방법은 원본 입력값을 가지고 다시 해싱하는 것뿐이에요
- 🟰 "해싱 = 암호화" — 쓰임새가 달라요. 암호화는 나중에 열어볼 수 있게 데이터를 숨기는 것이고, 해싱은 변조를 잡아내기 위해 데이터에 지문을 찍는 거예요
- 📐 "파일이 크면 해시도 길다" — 아니에요. 출력 길이는 입력 크기가 아니라 함수가 결정해요
❓ 자주 묻는 질문
- 해싱과 암호화는 같은 건가요?
- 아니요. 암호화는 되돌릴 수 있습니다. 올바른 키가 있으면 암호화된 내용을 원본으로 복원해 기밀을 보호해요. 해싱에는 키도 없고 되돌리는 기능도 없습니다. 단방향이고, 데이터가 변조되지 않았는지 검증하거나 식별자를 만들 때 씁니다.
- 해시를 복호화하거나 역으로 돌려서 원본을 꺼낼 수 있나요?
- 아니요. 해시는 단방향입니다. 입력에서 해시를 구할 수는 있지만, 해시에서 원본을 거꾸로 추적하는 건 불가능해요. 해시와 대조하는 유일한 방법은 원본 입력값을 이미 알고 있어서 다시 해싱해 비교하는 것뿐입니다.
- 해시는 왜 입력 크기와 상관없이 항상 같은 길이인가요?
- 해시 함수가 항상 고정 길이로 출력하기 때문이에요. 비트코인이 쓰는 SHA-256은 글자 한 자를 넣든 영화 파일 전체를 넣든, 항상 256비트 — 64자짜리 문자열 — 를 뱉습니다.