Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

SHA 보안 해시 알고리즘의 작동 원리, 5단계로 완벽 정리

SHA(보안 해시 알고리즘)란?

보안 해시 알고리즘(SHA, Secure Hash Algorithm)은 미국 국가안보국(NSA)이 개발하여 1993년 미국 국립표준기술연구소(NIST)를 통해 연방 정보 처리 표준(FIPS PUB 180)으로 공개한 해시 함수입니다.

SHA는 MD4 알고리즘과 유사한 구성 요소를 기반으로 설계되었으며, 압축 함수(compression function)에 입력되는 16워드 메시지 블록을 80워드 블록으로 확장해 처리하는 새로운 방식을 도입한 점이 큰 특징입니다.

SHA의 처리 과정

1단계: 패딩 비트 추가(Append Padding Bits)

원본 메시지에 패딩을 추가하여 전체 길이가 512로 나누었을 때 나머지가 448이 되도록 맞춥니다. 패딩은 메시지 길이가 이미 조건을 충족하더라도 반드시 삽입됩니다. 구체적인 방식은 첫 번째 비트로 1을 넣고, 이후 필요한 만큼의 0비트를 이어 붙이는 것입니다.

2단계: 길이 정보 추가(Append Length)

원본 메시지의 길이(1단계의 패딩 적용 이전 기준)를 나타내는 64비트 블록을 부호 없는 64비트 정수(최상위 바이트 우선)로 간주하여 메시지 끝에 덧붙입니다. 이 과정을 거치면 최종 메시지의 전체 길이는 512의 배수가 됩니다.

3단계: 버퍼 초기화(Initialize Buffer)

버퍼는 A, B, C, D, E로 표시되는 32비트 레지스터 5개, 즉 총 160비트로 구성되며, 압축 함수의 중간 결과와 최종 결과를 저장하는 데 사용됩니다. 이 레지스터들은 다음과 같은 32비트 정수(16진수 표기)로 초기화됩니다.

A = 67 45 23 01
B = ef cd ab 89
C = 98 ba dc fe
D = 10 32 54 76
E = c3 d2 e1 f0

레지스터 A, B, C, D는 MD5 알고리즘에서 사용되는 4개의 레지스터와 동일한 값입니다. 다만 SHA-1에서는 이 값들을 빅 엔디안(big-endian) 방식으로 저장합니다. 빅 엔디안이란 워드의 최상위 바이트(most significant byte)를 낮은 주소의 바이트 위치에 배치하는 저장 방식을 의미합니다.

4단계: 512비트 블록 단위 메시지 처리(Process Message in 512-bit Blocks)

압축 함수는 총 80단계로 구성되며, 각 라운드가 20단계씩 진행되는 4개의 라운드로 이루어진 순차적 처리 과정입니다.

네 개의 라운드는 구조적으로 서로 동일하며, 유일한 차이점은 각 라운드마다 서로 다른 부울(Boolean) 함수인 f1, f2, f3, f4와, 처리 중인 단계에 따라 결정되는 4가지 가산 상수 Kt(0 ≤ t ≤ 79) 중 하나를 사용한다는 점입니다.

5단계: 출력(Output)

메시지가 t개의 512비트 블록으로 나뉘어 있을 때, 마지막 t번째 블록까지 모두 처리를 마치면 최종적으로 160비트 길이의 메시지 다이제스트(message digest)를 얻게 됩니다.

정리

이처럼 SHA는 패딩 추가 → 길이 정보 삽입 → 버퍼 초기화 → 블록 단위 압축 → 다이제스트 출력이라는 일관된 절차를 통해 임의 길이의 입력 데이터를 고정된 160비트 해시 값으로 변환합니다. 생성된 해시 값은 데이터 무결성 검증과 디지털 서명 등에 활용되며, 이후 SHA-1의 취약점이 발견되면서 더 강력한 SHA-2, SHA-3 계열로 발전하게 되었습니다.