공시 한 판

정보보호론 개념서 · 공개키 암호·해시·전자서명

SHA-3(FIPS 202)와 해시 함수

설명 영상 SHA-3와 해시 함수 · 2:23

핵심 정리

해시 함수는 임의 길이의 입력을 정해진 방식으로 짧은 값으로 바꾸는 함수다. 같은 입력에서는 같은 값이 나와야 하고, 출력값으로 원래 입력을 되찾기 어려워야 한다. 긴 문서를 짧은 값으로 줄여 두면 나중에 같은 계산을 다시 해 비교하는 것만으로 데이터가 바뀌었는지 가려낼 수 있다. 그래서 해시 함수의 기본 효과는 무결성 확인이며, 전자서명에서도 긴 메시지 자체보다 그 해시값을 다루는 방식이 쓰인다. 이 단원은 SHA-3의 설계와 SHA 계열 함수마다 다른 출력 길이·입력 상한을 구분하는 데 초점이 있다.

해시 함수의 출력값은 입력 길이와 관계없이 고정된 길이를 가진다. 입력이 길든 짧든 출력 길이가 같다는 것이 해시 함수의 요건 중 가장 기본이 되는 성질이다. 이 고정 길이 성질을 기준으로 놓고, 예외는 따로 기억해야 한다.

SHA-3는 KECCAK을 기반으로 한 해시 함수 표준이다. SHA-3는 SHA-2의 뒤를 잇는 이름을 가졌지만 KECCAK이라는 별도의 설계에서 나온 표준이므로, 이름의 순서만으로 SHA-2와 같은 계열로 묶으면 안 된다. 해시 알고리즘에는 MD5, SHA 등이 있다. 그중 SHA는 미국 NIST가 발표한 해시 함수 계열이다. 이름이 비슷한 함수들은 계열과 출력 길이를 함께 확인해야 한다.

SHA-1은 해시 함수이므로 암·복호화를 하지 못해 기밀성을 제공하지 않고 무결성 검증에 쓰인다. 해시 함수는 원문을 되돌리는 용도가 아니므로 기밀성 수단이 아니라 무결성 수단으로 읽어야 한다. 이 구분은 기밀성과 무결성을 묻는 선지를 가르는 기준이 된다.

자세히

SHA-512의 처리 구조

SHA-512는 패딩과 128비트 길이 정보를 추가해 메시지 전체 크기를 1024비트의 배수로 맞추어 처리한다. 패딩은 메시지 길이를 블록 단위에 맞추기 위한 것이고, 길이 정보를 함께 넣는 것은 처리해야 할 전체 크기를 알려 주기 위한 것이다. 블록을 처리하는 라운드 수는 블록 크기와 함께 묶어 기억한다. SHA-512와 SHA-384는 모두 1024비트 블록을 80라운드로 처리하므로 라운드 수가 같다. 두 함수의 라운드 수를 비교하는 선지에서는 이 사실만으로 판단이 끝난다.

SHA-512는 80라운드로 처리하며 라운드마다 다른 라운드 상수 K와 메시지 워드를 사용해 규칙성을 없앤다. 라운드 상수와 메시지 워드는 라운드마다 값이 달라지도록 쓰이는 입력 요소이며, 이것이 규칙성을 줄이는 장치다. SHA-512의 초기값은 8개 소수의 제곱근에서 얻은 이진수로 설정된 512비트 버퍼다.

블록 크기, 라운드 수, 상수, 초기값은 서로 다른 물음이다. 한 가지가 맞는다고 해서 나머지가 맞는다는 뜻은 아니므로, 선지마다 어떤 항목을 묻는지 먼저 확인해야 한다. 라운드 수가 같다는 사실이 SHA-512와 SHA-384의 설계가 같다는 뜻으로 이어지지는 않는다.

입력 상한과 다이제스트 길이

SHA-1의 메시지 다이제스트 길이는 160비트다. 같은 계열이라도 출력 길이는 함수마다 정해져 있으므로, 한 함수의 숫자를 다른 함수에 옮기면 안 된다. SHA-256의 해시값은 256비트이다. 출력 길이와 입력 상한은 서로 다른 항목이므로 따로 봐야 한다. SHA-256의 입력 메시지 최대 길이는 2의 64제곱 비트다. 이에 비해 SHA-512는 2^128비트 이하의 메시지를 입력받아 512비트 메시지 다이제스트를 출력한다.

이어지는 내용

로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 절 읽기