본문으로 건너뛰기

SHA-256

SHA-256은 어떤 데이터를 넣어도 고정된 길이의 지문을 내놓는 해시 함수입니다. 이름의 ‘SHA’는 안전한 해시 알고리즘을 뜻하는 영어 표현의 머리글자에서 왔고, ‘256’은 결과값의 길이를 가리킵니다.

고정된 길이의 지문

SHA-256에 소설책 한 권을 넣든 글자 하나를 넣든 결과는 같은 크기로 나옵니다. 출력은 256비트, 즉 0과 1이 256개인 값입니다. 입력 데이터의 크기와 관계없이 결과의 크기가 같으므로, 서로 다른 기록을 같은 방식으로 보관하고 비교하기 좋습니다.

공장에 어떤 물건이든 넣으면 지문 카드 한 장이 나오는 기계를 떠올릴 수 있습니다. 소설책 한 권을 통째로 넣어도, 글자 하나만 넣어도 지문 카드의 크기는 같습니다. 원본을 매번 처음부터 끝까지 대조하는 대신 카드끼리 비교하면 데이터가 달라졌는지 확인할 수 있습니다.

SHA-256은 다음과 같은 성질을 목표로 합니다.

  • 같은 입력을 넣으면 언제 어디서 계산해도 같은 결과가 나옵니다.
  • 입력에 아주 작은 변화만 생겨도 출력 전체가 크게 달라집니다.
  • 해시값만으로 원래 입력을 되살리기 어렵습니다.

이러한 성질은 해시의 일방향성, 눈사태 효과와 연결됩니다.

비트코인에서의 활용

비트코인은 전 세계가 함께 사용하는 장부이므로 기록이 바뀌었는지 확인할 수 있어야 합니다. 장부를 처음부터 끝까지 다시 읽어 대조하는 대신, 내용을 해시로 요약해 비교하면 변경을 빠르게 드러낼 수 있습니다.

비트코인의 블록 식별 해시는 블록 전체를 한 번에 해시한 값이 아니라, 80바이트 블록 헤더에 SHA-256을 두 번 적용한 값입니다. 거래 하나를 바꾸면 거래 목록에서 계산한 머클 루트가 달라지고, 이에 따라 헤더와 그 이중 SHA-256 결과도 달라집니다. 이후 블록의 참조를 맞추려면 뒤따르는 헤더와 작업증명을 다시 계산해야 하므로, 후속 블록이 자동으로 모두 바뀌는 것은 아니지만 과거 기록을 바꾸는 작업은 매우 커집니다(Bitcoin Developer Guide).

SHA-256은 블록 헤더를 해시하고, 채굴에서 조건에 맞는 결과를 찾는 계산에도 활용됩니다. 주소와 관련된 과정에서도 해시가 사용되지만, 주소 형식마다 적용되는 함수와 절차가 다르므로 모든 주소가 SHA-256 하나만으로 만들어진다고 이해해서는 안 됩니다.

256비트가 만드는 경우의 수

256비트는 각 자리에 0 또는 1이 들어가는 구조입니다. 비트 하나는 두 가지 경우를 만들고, 비트가 두 개면 네 가지, 세 개면 여덟 가지가 됩니다. 이 두 배가 되는 과정을 256번 반복하므로 가능한 출력의 수는 2의 256제곱입니다.

출력의 경우의 수가 매우 크기 때문에 특정한 해시값과 같은 결과를 무작위로 찾아내는 일은 현실적으로 매우 어렵습니다. 다만 이론적으로 충돌이 절대 불가능하다는 뜻은 아닙니다. 입력의 종류가 출력보다 훨씬 많으므로 충돌은 수학적으로 존재할 수 있지만, 충돌을 실제로 찾아내기 어려워야 해시가 검증 도구로 기능합니다.

암호화와 SHA-256의 차이

SHA-256은 이름 때문에 암호화 기술처럼 들릴 수 있지만, 암호화와는 목적이 다릅니다. 암호화는 열쇠로 내용을 잠갔다가 나중에 다시 읽는 기술입니다. 반면 SHA-256은 데이터를 고정 길이의 지문으로 요약하며, 지문값에서 원문으로 되돌아가는 절차를 제공하지 않습니다. 입력 후보가 짧거나 흔하면 추측과 대조로 후보를 찾을 수 있으므로 절대적인 복원 불가능을 뜻하지는 않습니다.

비트코인의 장부도 감춰져 있지 않습니다. 장부는 공개되어 있고, 해시는 기록이 위조되었는지 드러내며, 전자 서명은 해당 공개키에 대응하는 개인키로 거래가 승인되었는지 검증합니다. 서명 검증만으로 개인키가 실제 소유자의 통제 아래 있는지까지 보장하는 것은 아닙니다.

공개된 설계와 검증

SHA-256은 설계가 공개된 표준 해시 알고리즘입니다. 비밀 설계에 기대는 대신 누구나 알고리즘을 살펴보고 검토할 수 있으며, 공개된 상태에서 오랫동안 보안 연구와 분석의 대상이 되어 왔습니다. 비트코인이 이 함수를 활용하는 근거는 이름이 신비롭기 때문이 아니라, 공개된 설계와 해시가 요구하는 성질에 있습니다.

정리

  • SHA-256은 입력 크기와 관계없이 256비트의 고정된 출력값을 만듭니다.
  • 같은 입력은 같은 결과를 만들고, 작은 변화는 출력 전체를 크게 바꿉니다.
  • 해시값에서 원문을 찾는 일은 적절한 조건에서 계산적으로 어렵도록 설계되어 있습니다.
  • 비트코인은 SHA-256을 블록 헤더와 채굴 계산 등에 활용합니다.
  • 주소 관련 해시 적용은 주소 형식과 절차에 따라 다르므로 하나의 방식으로 일반화할 수 없습니다.
링크 복사하기X에 공유페이스북에 공유쓰레드에 공유