SHA512
1. 개요
1. 개요
SHA512는 미국 국가안보국(NSA)이 설계하고 2001년에 최초로 공개된 암호화 해시 함수이다. 이는 SHA-2 계열에 속하며, 512비트 길이의 고정된 해시값을 출력한다. 입력 메시지의 길이는 최대 2^128-1 비트까지 처리할 수 있다. 주로 데이터 무결성 검증, 디지털 서명, 메시지 인증 코드 등 다양한 정보 보안 분야에서 핵심적인 역할을 한다.
이 알고리즘의 기본 구조는 메시지를 블록 단위로 처리하는 Merkle–Damgård 구조를 따른다. 메시지 블록을 압축하는 과정은 총 80라운드에 걸쳐 이루어지며, 각 라운드에서 비트 연산과 논리 함수를 조합하여 높은 수준의 암호학적 안전성을 확보한다. 최종 결과는 128자리의 16진수 문자열로 표현된다.
속성 | 내용 |
|---|---|
암호화 방식 | 암호화 해시 함수 |
설계자 | 미국 국가안보국(NSA) |
최초 출판 | 2001년 |
계열 | SHA-2 |
입력 길이 | 최대 2^128-1 비트 |
출력 길이 | 512 비트 (128자리 16진수) |
구조 | Merkle–Damgård 구조 |
라운드 수 | 80 |
SHA512는 같은 SHA-2 계열인 SHA256보다 더 긴 출력 길이를 가지므로, 이론적으로 충돌 저항성과 제2 역상 저항성이 더 강력하다. 이로 인해 향상된 보안이 요구되는 시스템에서 선호된다. 그러나 출력 길이가 길어지면서 저장 공간과 처리 시간이 상대적으로 더 필요하다는 점은 고려해야 한다.
2. 알고리즘 설명
2. 알고리즘 설명
2.1. 패딩과 메시지 확장
2.1. 패딩과 메시지 확장
SHA512는 입력 메시지의 길이에 관계없이 1024비트 블록 단위로 처리한다. 이를 위해 먼저 메시지에 패딩을 추가하여 전체 길이를 1024비트의 정수 배로 만든다. 패딩은 원본 메시지 끝에 비트 '1'을 추가한 후, 필요한 만큼 '0'을 채우고, 마지막 128비트에는 원본 메시지의 길이(비트 단위)를 부호 없는 정수로 기록한다. 이 과정은 메시지 길이 정보를 포함시키고, 최종 블록 길이를 1024비트로 정렬하는 데 필수적이다.
패딩이 완료된 메시지는 연속된 1024비트 블록으로 나뉜다. 각 블록은 메시지 확장 과정을 거쳐 80개의 64비트 워드(W0부터 W79)로 변환된다. 처음 16개 워드(W0~W15)는 블록을 64비트씩 나눈 값이다. 나머지 64개 워드(W16~W79)는 이전 워드들을 재귀적으로 혼합하여 생성된다. 구체적으로, Wt (t가 16 이상일 때)는 W(t-2), W(t-7), W(t-15), W(t-16) 네 개의 워드를 특정 비트 연산(시프트와 회전, XOR)을 통해 결합해 만든다. 이 확장 과정은 각 라운드에 고유한 입력을 제공하여 해시의 강도를 높인다.
생성된 80개의 워드는 이후 80라운드에 걸친 압축 함수의 주요 입력으로 사용된다. 메시지 확장은 단순히 데이터를 늘리는 것이 아니라, 블록 내 데이터 간의 비선형적 관계를 복잡하게 엮어, 최종 해시 값이 원본 메시지의 최소 변화에도 민감하게 반응하도록 설계된 핵심 단계이다.
2.2. 압축 함수와 해시 계산
2.2. 압축 함수와 해시 계산
압축 함수는 SHA512의 핵심 연산 단위이다. 이 함수는 1024비트의 메시지 블록과 512비트의 중간 해시 값을 입력받아 새로운 512비트 중간 해시 값을 생성한다. 내부적으로 80라운드에 걸쳐 비선형 논리 연산, 모듈로 덧셈, 그리고 상수값과의 결합을 반복하며 데이터를 압축하고 뒤섞는다. 각 라운드에서는 확장된 메시지 스케줄로부터 생성된 64비트 단어(Wt)와 라운드 상수(Kt)가 사용된다.
해시 계산은 Merkle–Damgård 구조를 따른다. 먼저 원본 메시지에 패딩을 적용하여 전체 길이가 1024비트의 배수가 되도록 만든다. 초기 해시 값으로 미리 정의된 8개의 64비트 상수(H0~H7)를 사용한다. 이후 메시지를 1024비트 블록으로 나누어 순차적으로 압축 함수에 처리한다. 각 블록의 처리는 현재 블록 데이터와 이전 블록 처리 결과인 중간 해시 값을 압축 함수에 입력하여 새로운 중간 해시 값을 계산하는 방식으로 진행된다.
처리 단계 | 설명 |
|---|---|
패딩 | 메시지 끝에 비트 '1'을 추가한 후, 길이가 896 mod 1024가 되도록 '0'을 패딩하고 마지막 128비트에 원본 메시지 길이를 기록한다. |
메시지 확장 | 각 1024비트 블록을 16개의 64비트 단어로 나눈 후, 재귀 공식을 적용해 80개의 단어(W0~W79)로 확장한다. |
압축 루프 | 확장된 80개의 단어와 라운드 상수를 사용해 80라운드 연산을 수행하여 중간 해시 값을 갱신한다. |
최종 출력 | 모든 메시지 블록에 대한 처리가 끝나면 최종적으로 남은 512비트(8개의 64비트 워드) 중간 해시 값을 연결하여 128자리의 16진수 해시값으로 출력한다. |
모든 메시지 블록에 대한 압축 함수 호출이 완료되면, 마지막으로 얻은 512비트 중간 해시 값이 최종 SHA512 해시값이 된다. 이 값은 일반적으로 128개의 16진수 문자로 표현된다.
3. 보안성과 특징
3. 보안성과 특징
SHA512는 충돌 저항성, 제2 역상 저항성, 역상 저항성 등 암호학적 해시 함수가 가져야 할 기본적인 안전 속성을 제공한다. 512비트의 긴 출력 길이는 생일 공격에 대한 내성을 높이며, 이론적인 충돌 공격 복잡도는 2^256 연산 수준으로 평가된다. 80라운드의 압축 함수 연산은 충분한 확산과 혼돈을 제공하여 공격을 어렵게 만든다.
SHA512는 메시지 길이 확장 공격에 취약할 수 있는 Merkle–Damgård 구조를 사용하지만, HMAC(Hash-based Message Authentication Code) 구성 방식과 같이 안전한 방식으로 사용될 때는 이러한 취약점이 완화된다. 또한, 길이 확장 공격 자체를 방지하기 위해 출력 값을 트렁케이션(잘라내기)하지 않고 전체 512비트를 사용하는 것이 일반적이다.
주요 특징으로는 높은 보안 강도와 64비트 아키텍처에서의 우수한 성능을 꼽을 수 있다. 알고리즘 내부 연산이 64비트 워드를 기반으로 설계되어 64비트 프로세서에서 매우 효율적으로 실행된다. 이는 32비트 워드를 사용하는 SHA256보다 현대 시스템에서 더 빠른 처리 속도를 제공할 수 있음을 의미한다.
특징 | 설명 |
|---|---|
출력 길이 | 512비트 (128자리 16진수) |
내부 상태 | 512비트 |
워드 크기 | 64비트 |
라운드 수 | 80 |
구조 | Merkle–Damgård |
SHA512는 높은 보안 수준이 요구되는 분야, 예를 들어 디지털 서명, 공개키 인프라(PKI), 블록체인 시스템의 작업 증명(Proof of Work) 등에 널리 사용된다. 그러나 일반적인 데이터 무결성 검증이나 비밀번호 해싱과 같은 용도에는 과도하게 강력한 함수일 수 있으며, 이 경우에는 의도적으로 느린 함수를 사용하는 것이 더 적합하다.
4. SHA-2 계열 내 비교
4. SHA-2 계열 내 비교
SHA512는 SHA-2 계열 해시 함수 중 하나로, 동일한 구조를 공유하는 다른 변종들과 구별되는 명확한 특징을 가진다. SHA-2 계열에는 출력 길이에 따라 SHA224, SHA256, SHA384, SHA512, 그리고 SHA512/224와 SHA512/256이 존재한다. 이들은 모두 기본적인 연산 방식과 라운드 함수는 유사하지만, 사용하는 상수 값, 초기 해시 값, 그리고 출력 비트 수에서 차이를 보인다.
SHA512는 이름에서 알 수 있듯이 512비트의 해시값을 생성하며, 이는 128자리의 16진수 문자열에 해당한다. 이는 같은 계열의 SHA256(256비트 출력)보다 두 배 긴 출력 길이를 제공한다. 더 긴 출력 길이는 이론적으로 충돌 저항성과 제2 역상 저항성을 높이는 효과가 있다. 내부적으로 SHA512는 64비트 워드를 사용하여 데이터를 처리하는 반면, SHA256은 32비트 워드를 사용한다. 이로 인해 64비트 프로세서 환경에서 SHA512의 성능이 더 우수할 수 있다.
다음 표는 주요 SHA-2 변종들의 핵심 사항을 비교한다.
비교 항목 | SHA256 | SHA384 | SHA512 |
|---|---|---|---|
출력 길이 | 256비트 | 384비트 | 512비트 |
내부 워드 크기 | 32비트 | 64비트 | 64비트 |
메시지 블록 크기 | 512비트 | 1024비트 | 1024비트 |
초기값 개수 | 8개 | 8개 | 8개 |
보안 강도 (충돌 저항) | 128비트 | 192비트 | 256비트 |
SHA384는 SHA512와 동일한 1024비트 메시지 블록과 64비트 연산을 사용하지만, 서로 다른 초기값을 사용하고 최종 출력은 SHA512 결과를 384비트로 잘라낸 것이다. 한편, SHA512/224와 SHA512/256은 SHA512 알고리즘을 기반으로 하지만 초기값을 변경하고 출력을 자르는 트랜케이션 방식으로 설계되어, 기존 SHA224 및 SHA256과 출력 길이는 같지만 내부 구조는 다르다. 이러한 선택지는 애플리케이션이 요구하는 보안 수준, 출력 길이, 그리고 호환성에 따라 적절한 함수를 선택할 수 있도록 한다.
5. 응용 분야
5. 응용 분야
SHA512는 높은 보안성과 충돌 저항성 덕분에 다양한 분야에서 널리 사용된다. 주로 데이터 무결성 검증, 디지털 서명, 인증 프로토콜, 그리고 블록체인 기술의 핵심 구성 요소로 활용된다.
데이터 저장 및 전송 시 무결성을 보장하기 위해 파일의 해시값을 계산하여 비교하는 용도로 자주 쓰인다. 예를 들어, 대형 소프트웨어 배포나 중요한 문서를 다운로드할 때, 제공된 SHA512 체크섬과 사용자가 계산한 체크섬을 비교하여 파일이 변조되지 않았음을 확인할 수 있다. 디지털 서명 알고리즘에서는 메시지 축약 알고리즘으로 사용되어 서명의 효율성과 안전성을 높인다.
주요 응용 분야 | 설명 |
|---|---|
데이터 무결성 검증 | 파일, 메시지의 변조 여부를 확인하기 위한 체크섬 생성 |
디지털 서명 및 인증 | 전자 서명 표준(DSS, FIPS 186) 및 TLS/SSL, SSH 같은 보안 프로토콜에서 메시지 인증 코드의 기반 |
블록체인 및 암호화폐 | 비트코인을 포함한 여러 암호화폐에서 트랜잭션과 블록 헤더의 해시값 계산에 사용 |
패스워드 저장 | 솔트와 결합하여 사용자 패스워드의 해시된 다이제스트를 안전하게 저장[1] |
또한, SSH 키 핑거프린트나 Git 커밋 ID 생성과 같은 개발 도구에서도 신원 확인을 위해 SHA512가 적용된다. 블록체인 기술에서는 작업 증명 합의 알고리즘의 일부로, 또는 트랜잭션과 이전 블록을 연결하는 데 필수적인 해시 함수로 채택되어 시스템의 불변성을 유지하는 데 기여한다.
