SHA-256이란?
SHA-256은 미국 표준기술연구소(NIST)가 표준화한 SHA-2 계열 암호학적 해시 함수 중 하나입니다. 길이에 상관없이 어떤 입력 메시지든 받아 고정된 256비트(32바이트) 다이제스트를 만들어내며, 여기서는 64자리 16진수 문자열로 표시됩니다. 같은 입력은 항상 같은 다이제스트를 만들지만, 단 한 글자만 바뀌어도 완전히 다른 결과가 나옵니다(쇄도 효과, avalanche effect). SHA-256은 TLS 인증서, 전자 서명, 블록체인(비트코인), 파일 무결성 검증 등에 폭넓게 쓰입니다.
계산기 사용 방법
입력란에 원하는 텍스트를 입력하거나 붙여넣고 실행하기만 하면 됩니다. 계산기는 입력한 텍스트를 UTF-8로 인코딩한 뒤 SHA-256 알고리즘을 돌려, 16진수 다이제스트와 입력의 바이트 길이를 함께 돌려줍니다. 빈 입력도 유효하며, 이 경우 잘 알려진 빈 문자열 다이제스트가 출력됩니다.
$$\text{Hash} = \operatorname{SHA\text{-}256}\!\left(\text{Input Text}\right)$$계산 원리 풀어보기
SHA-256은 먼저 메시지 길이가 512비트의 배수가 되도록 패딩을 추가하고, 이를 512비트 블록으로 나눈 뒤 각 블록을 64라운드의 비트 연산(회전, 시프트, AND/XOR, 모듈러 덧셈)으로 처리합니다. 이때 소수의 제곱근 소수부에서 초기화한 여덟 개의 32비트 작업 변수를 섞어 사용합니다. 각 블록 처리가 끝나면 여덟 개의 레지스터가 진행 중인 해시 상태에 다시 더해지고, 이들을 이어 붙이면 최종 256비트 다이제스트가 완성됩니다.
예제로 보기
입력값 abc(3바이트)는 다이제스트 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad를 생성합니다. 빈 문자열은 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855를 만드는데, 이는 표준 테스트 벡터로 잘 알려져 있습니다.
자주 묻는 질문
SHA-256은 되돌릴 수 있나요? 아니요. 단방향 함수이므로 다이제스트에서 원래 입력을 복원할 수 없습니다.
왜 바이트 수가 글자 수보다 많은가요? 한글, 한자 같은 CJK 문자나 악센트 기호, 이모지 등 ASCII가 아닌 문자는 UTF-8에서 여러 바이트를 차지하기 때문에, 바이트 길이가 글자 수보다 커질 수 있습니다.
SHA-256은 여전히 안전한가요? 네. 현재까지 SHA-256에 대한 실용적인 충돌(collision)이나 역상(preimage) 공격은 알려져 있지 않으며, 일반적인 용도로 권장되는 해시 함수입니다.