SHA-256이란 과연 무엇인가 Cuadernos Lacre · 개념 · 2026년 5월 19일 https://solo2.net/ko/notebooks/articulos/what-sha-256-actually-is.html 64글자에 담기는 수학적 지문. 원문의 쉼표 하나만 바뀌어도 전체가 변합니다. 왜 이것을 디지털 인장(seal)이라고 부르는지 알아봅니다. --- 기술적인 이름 뒤에 숨겨진 단순한 아이디어 슬롯 하나와 화면 하나만 있는 기계가 있다고 상상해 보세요. 슬롯에 텍스트를 넣습니다. 단어 하나일 수도 있고, 문장일 수도 있고, 소설 전체일 수도 있습니다. 잠시 후 화면에는 정확히 64글자의 시퀀스가 나타납니다. 전문가들은 이를 '해시(hash)' 또는 '암호학적 요약'이라고 부르지만, 일반인들에게는 지문이 사람을 식별하듯 텍스트의 '수학적 지문'이라고 부를 수 있습니다. 같은 텍스트를 두 번 넣으면 기계는 두 번 다 똑같은 지문을 보여줍니다. 만약 텍스트를 아주 조금이라도 바꾸면(쉼표 하나를 옮기거나 대문자를 소문자로 바꾸면), 기계는 처음과 완전히 다른 지문을 보여줍니다. 비슷한 것이 아니라 완전히 다릅니다. 이 두 가지 성질(결정성과 민감성)이 바로 이 기술의 핵심입니다. SHA-256의 나머지 부분은 이 성질들이 잘 작동하도록 만드는 기계 장치일 뿐입니다. 먼저 이 기계가 '하지 않는 일'을 짚고 넘어가야 합니다. 이 기계는 텍스트를 암호화(숨김)하지 않습니다. 저장하지도 않습니다. 기계는 텍스트를 보고 지문을 계산한 뒤 텍스트를 잊어버립니다. 지문만 보고는 그것을 만든 원래 텍스트를 알아낼 수 없습니다. 오직 후보 텍스트가 주어졌을 때 그것이 원본과 일치하는지만 확인할 수 있습니다. 그래서 이를 '단방향' 요약이라고 부릅니다. 갈 수는 있지만 돌아올 수는 없습니다. 해시는 암호화와 다릅니다 자주 혼동되곤 하지만, 암호화와 해시는 서로 다른 작업입니다. 암호화는 열쇠를 가진 사람만이 원래대로 되돌릴 수 있도록 텍스트를 변형하는 것입니다. 해시는 열쇠가 있든 없든 원문을 절대 복구할 수 없는 지문을 생성하는 것입니다. 전자는 설계상 '가역적'이지만, 후자는 '불가역적'입니다. 이 차이는 실무에서 매우 중요합니다. 어떤 앱이 '비밀번호를 암호화해서 저장한다'고 한다면, 누군가(앱 자신 등)가 그것을 풀 수 있는 열쇠를 가지고 있다는 뜻입니다. 하지만 '비밀번호를 해시해서 저장한다'고 한다면, 앱 자신도 원래 비밀번호를 알 수 없습니다. 그저 당신이 입력한 비밀번호가 저장된 지문과 똑같은 지문을 만드는지 확인할 수 있을 뿐입니다. 제대로만 구현된다면 후자가 비밀번호 저장에 훨씬 안전합니다. 왜 '제대로' 구현하기 위해 SHA-256 이상의 장치가 필요한지는 뒤에서 설명하겠습니다. 암호학적 해시를 유용하게 만드는 4가지 성질 '암호학적'이라는 수식어를 붙일 만한 해시 함수는 다음 4가지 성질을 충족해야 합니다. 1. 결정성: 같은 입력은 항상 같은 지문을 생성한다. 2. 쇄도 효과(Avalanche effect): 입력의 아주 작은 변화가 이전과는 전혀 닮지 않은 완전히 다른 지문을 생성한다. 3. 역상 저항성: 지문이 주어졌을 때 그것을 만든 원문을 찾아내는 것이 계산적으로 불가능하다. 4. 충돌 저항성: 같은 지문을 생성하는 서로 다른 두 텍스트를 찾아내는 것이 계산적으로 불가능하다. '계산적으로 불가능하다'는 말은 '수학적으로 절대 불가능하다'는 뜻이 아닙니다. 그것을 해내는 데 드는 시간, 에너지, 비용이 현재 인류가 동원할 수 있는 모든 계산 능력을 수만 배 초과한다는 뜻입니다. SHA-256의 경우, 특수 하드웨어를 사용한 가장 낙관적인 추정으로도 그 한계는 수천조 년 단위입니다. 즉, 독자 여러분의 입장에서는 '불가능하다'는 말과 같습니다. 구체적으로 보는 SHA-256 이름에 모든 것이 담겨 있습니다. SHA는 'Secure Hash Algorithm(안전한 해시 알고리즘)'의 약자입니다. 256이라는 숫자는 지문의 크기가 256비트임을 나타냅니다. 이는 32바이트이며, 16진수로 표현하면 우리가 흔히 보는 64글자가 됩니다. 이 표준은 2001년 미국 NIST에서 SHA-2 제품군의 일부로 발표했으며, 현재 통용되는 표준 버전은 2015년의 FIPS 180-4입니다. 그 규모를 생각해보세요. 256비트로는 2의 256승 개의 서로 다른 값을 가질 수 있습니다. 이는 10진수로 78자리에 달하는 숫자로, 관측 가능한 우주의 원자 수 추정치보다 훨씬 큽니다. 세상의 모든 텍스트는 이 값들 중 하나에 떨어집니다. 서로 다른 두 텍스트가 우연히 일치할 확률은 실질적으로 0에 가깝습니다. 코드에서의 모습 왜 '인장(seal)'이라고 부르는가 15세기에서 19세기 유럽의 서신 왕래에서 밀랍 인장은 편지를 봉인했습니다. 녹은 밀랍 한 방울을 떨어뜨리고 그 위에 도장을 누르면 편지에는 복제 불가능한 표시가 남았습니다. 이것이 엿보기를 막아주지는 못했지만(종이를 빛에 비춰 보거나 밀랍을 깨뜨릴 수 있었음), 조작 여부는 확실히 드러내 주었습니다. 봉인이 조금이라도 훼손되면 수신자는 편지를 열기도 전에 알 수 있었습니다. 인장은 피해를 막는 것이 아니라, 피해 사실을 '선언'했습니다. 각 Cuaderno 본문의 SHA-256은 디지털 세계에서 똑같은 역할을 합니다. 기사가 발행된 순간부터 당신이 읽는 순간 사이에 단 한 단어라도 바뀐다면, 하단의 16진수 인장은 당신 앞에 있는 텍스트의 SHA-256과 일치하지 않게 됩니다. 코딩을 조금이라도 아는 독자라면 누구든 이를 확인할 수 있습니다. 발행인은 인장에 들키지 않고 역사를 다시 쓸 수 없습니다. 인장은 피해를 막는 것이 아니라, 피해를 '검증 가능'하게 만듭니다. 해시가 아닌 것 때때로 SHA-256에 기대하지만 실제로는 그 역할이 아닌 4가지 경우가 있습니다. 1. 암호화: 해시는 요약일 뿐 숨기는 것이 아닙니다. 텍스트를 읽지 못하게 하려면 해시가 아니라 암호화가 필요합니다. 2. 저자 인증: 해시는 누가 썼는지 말해주지 않고, 어떤 텍스트가 해시되었는지만 말해줍니다. 저자를 연결하려면 해시 자체가 아니라 해시 위에 암호학적 서명이 필요합니다. 3. 비밀번호 저장: 여기에는 함정이 있습니다. SHA-256은 매우 빠르게 작동하도록 설계되었습니다. 이는 많은 경우 장점이지만, 이 경우에는 단점입니다. 공격자는 특수 하드웨어를 사용해 초당 수십억 개의 비밀번호를 대조하며 당신의 비밀번호를 찾아낼 수 있습니다. 비밀번호 저장에는 Argon2, scrypt, bcrypt처럼 의도적으로 느리게 만든 키 유도 함수를 솔트(salt, 사용자별 고유 랜덤 데이터)와 함께 사용해야 합니다. 4. 해시를 저자 식별자로 사용: 그렇지 않습니다. 해시는 내용을 식별합니다. 두 사람이 똑같이 'hola'라는 단어를 SHA-256으로 해시하면 둘 다 똑같은 결과를 얻습니다. 이것은 결함이 아니라 핵심 성질입니다. 결과가 다르다면 발행된 내용과 수신된 내용의 일치 여부를 확인할 수 없을 것입니다. 일상 속의 SHA-256 보이지 않지만 SHA-256은 우리가 매일 사용하는 인터넷의 상당 부분을 지탱합니다. 비트코인 블록체인은 각 블록을 다음 블록에 SHA-256으로 연결하여 구축됩니다. 과거 블록을 수정하려면 이후의 모든 체인을 다시 계산해야 합니다. 전 세계 코드 버전 관리 시스템인 Git은 각 커밋을 내용 전체의 해시(최근 버전은 SHA-256, 구버전은 SHA-1)로 식별합니다. 웹사이트 접속 시 신원을 확인하는 HTTPS 인증서에도 SHA-256 지문이 포함됩니다. 소프트웨어 다운로드 시 파일이 중간에 변조되지 않았는지 확인할 수 있도록 개발자가 SHA-256을 공개하는 경우도 많습니다. 그리고 물론, 각 Cuaderno Lacre 하단에도 있습니다. 전문가 독자를 위해 시스템을 결정하거나 감사하는 분들을 위한 4가지 운영상 유의점: 1. 해시는 암호화가 아닙니다. 공급업체가 기술 문서에서 두 용어를 혼동한다면 정확히 무엇을 의미하는지 물어볼 필요가 있습니다. 2. 비밀번호 저장에 SHA-256만 단독으로 사용해서는 안 됩니다. SHA-256은 이 작업에 너무 빠릅니다. 현재 표준은 Argon2id입니다. 설계상 느리고, 서버 능력에 따라 설정 가능하며, 사용자별 고유 솔트와 결합됩니다. 3. 계약서, 문서, 파일의 무결성을 위해서는 SHA-256이 여전히 표준입니다. EU의 공인 타임스탬프 서비스에서도 이를 사용합니다. 4. 수십 년 단위의 장기 보존을 위해서는 SHA-256과 함께 SHA-3나 SHA-512도 계산해서 보관하는 것이 좋습니다. 세기를 넘기는 아카이브에서는 단일 함수에만 의존하지 않는 것이 암호학적으로 신중한 태도입니다. 세상에서 가장 정교한 도미노 회로를 만들었다고 상상해 보세요. 수천 개의 말판, 수십 개의 갈림길, 기계식 다리, 방 전체를 가로지르는 경사로가 하나하나 정성스럽게 배치되어 있습니다. 첫 번째 도미노를 살짝 건드리면, 체인은 정확하고 반복 가능한 순서로 넘어집니다. 동일한 배치, 동일한 첫 충격 → 반복해서 수행해도 넘어지는 마지막 도미노 패턴은 동일합니다. 여기 흥미로운 점이 있습니다. 시작하기 전에 단 하나의 도미노를 옆으로 0.5cm 옮긴 다음 다시 건드려 보세요. 작동해야 할 경사로가 가만히 있고, 다리는 넘어지지 않으며, 다른 갈림길이 작동합니다. 바닥에 남은 마지막 도미노 패턴은 처음 것과 완전히 다릅니다. 수학적으로 SHA-256은 바로 이 회로입니다. 여러분이 작성하는 텍스트는 도미노의 초기 위치입니다. 알고리즘은 연쇄 반응을 일으키는 충격입니다. 그리고 최종 결과(우리가 해시라고 부르는 것)는 모든 것이 멈췄을 때 바닥을 찍은 정지 사진입니다. 원본 텍스트에서 콤마 하나만 바꿔도 그 사진은 완전히 달라집니다. 이렇게 단순하면서도 극적입니다. --- 이 기사 하단으로 돌아가면 64글자의 16진수 인장을 볼 수 있습니다. 그것은 당신이 방금 읽은 이 언어로 된 텍스트의 SHA-256입니다. 기사를 번역하면 인장이 달라질 것이고, 스페인어 원문의 한 단어라도 바뀐다면 스페인어 인장도 바뀔 것입니다. 인장은 내용을 보호하지는 않지만(그것은 다른 도구들의 역할입니다), 내용을 고유하게 식별합니다. 그리고 그것만으로도 편집 체인의 그 어떤 단계에서도 말한 내용을 흔적 없이 고칠 수 없게 만듭니다. 암호화, 서명, 식별과 같은 나머지 모든 것은 이 단순한 아이디어 위에 세워집니다. 참고 문헌 및 관련 자료 - NIST — FIPS PUB 180-4: Secure Hash Standard (SHS), 2015년 8월. SHA-256을 포함한 SHA-2 제품군의 공식 명세. - RFC 6234 — US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF), IETF, 2011년 5월. 구현자를 위한 규범적 버전. - Ferguson, N.; Schneier, B.; Kohno, T. — Cryptography Engineering: Design Principles and Practical Applications (Wiley, 2010). 5장과 6장에서 해시 함수와 정당한 사용법 및 오용 사례를 다룹니다. - Nakamoto, S. — Bitcoin: A Peer-to-Peer Electronic Cash System (2008). 구조적으로 불변인 체인에서 블록을 연결하기 위해 SHA-256을 사용한 실례. - 유럽 연합 규정 910/2014 (eIDAS) — 공인 타임스탬프 프레임워크. SHA-256은 EU에서 발행되는 공인 전자 서명 및 인장의 참조 함수입니다. - Zig 참조 구현체: 공식 리포지토리의 std.crypto.hash.sha2.Sha256 (github.com/ziglang/zig → lib/std/crypto/sha2.zig). Solo2가 실제로 사용하는 최적화 및 감사된 버전입니다. 부록의 교육용 구현체와 대조해 보기 좋습니다. --- Cuadernos Lacre · Menzuri Gestión S.L.의 간행물 · 저자: R.Eugenio · Solo2 팀 편집 https://solo2.net/ko/notebooks/