MD4 와 MD5
① MD(Message Digest)4
Rivest 가 1990년에 만든 일방향 해시 함수로 128비트의 해시 값을 갖는다. 그러나 Dobbertin에 의해 MD4의 해시 값의 충돌을 발견하는 방법이 고안되어 현재는 안전하다고 할 수 없다.
② MD(Message Digest)5
MD4 를 만든 Rivest 가 1991년에 만든 일방향 해시 함수로 128비트의 해시 값을 갖는다. 여기서 입력은 512-비트 블록들로 처리된다. 전수 공격과 암호해독에 대한 우려가 심각해진 최근 몇 년을 제외하면 MD5 는 가장 널리 사용되던 안전한 해시 함수이었다. (2005년 깨졌으나, 사용은 되고 있음)
③ MD4 와 MD5 의 비교
- MD4 는 16단계의 3라운드를 사용하나 MD5 는 16단계의 4라운드를 사용한다.
- MD4 는 각 라운드에서 한 번씩 3개의 기약 함수를 사용한다. 그러나 MD5 는 각 라운드에서 한 번씩 4개의 기약 함수를 사용한다.
- MD4 는 마지막 단계의 부가를 포함하지만 MD5 의 각 단계는 이전 단계의 결과에 부가된다.
SHA(Secure Hash Algorithm)
SHA(Secure Hash Algorithm)은 NIST(National Institute of Standards and Technology)에서 만들어진, 160비트의 해시 값을 갖는 일방향 해시 함수이다. 1993년에 미국의 연방정보처리표준규격(FIPS PUB 180) 으로서 발표된 것을 SHA 라 부르며, 1995년에 발표된 개정판 FIPS PUB 180-1 을 SHA-1 이라 부른다. SHA-1 의 메시지의 길이에는 상한이 있지만, 264 비트 미만이라는 대단히 큰 값이므로 사실상 현실적인 적용에는 문제가 없다.
2005년에 NIST 에서는 SHA-1 에 대한 승인을 취소한다고 선언했고 2010년까지 새로운 SHA 버전들로 대체한다고 했다. 하지만 이미 NIST 에서는 2002년에 NIST 는 새표준인 FIPS 180-2 를 내놓았는데 이때 해시 값이 각각 256, 384 와 512 비트인 3 개의 새로운 SHA 버전들을 정의했다. 이들은 각각 SHA-256, SHA-384 와 SHA-512 로 AES 의 키 길이인 128, 192, 256 비트에 대응하도록 출력 길이를 늘인 해시 알고리즘이다.
① SHA-1 의 구조
264비트 미만의 메시지를 기초로 해서 160비트의 해시 값을 계산하는 일방향 해시 함수로 다음과 같은 순서로 동작한다.
- 패딩
- W0 ~ W79 계산
- 블록 처리
- 단계 1 처리
⑴ 패딩
SHA-1 에서는 이후의 처리를 하기 쉽게 하기 위해 맨 처음에 패딩(padding)을 행한다. 패딩이라는 것은 '메워 넣기' 라는 의미로, 메시지 다음에 여분의 데이터를 부가하여 메시지의 길이가 512비트의 정수 배가 되도록 하는 것을 가리킨다. 이 512비트의 집합을 입력 블록이라 부른다.
⑵ W0 ~ W79 의 계산
패딩이 끝난 다음에는 입력 블록 단위의 처리가 된다. 입력 블록 512비트마다 32비트 × 80개의 (W0~W79)을 계산한다. 이 80개의 값은 '⑷SHA-1 : 단계 1 처리' 에서 사용한다. 우선 입력 블록 512비트를 32비트 × 16개로 분할하여 W0 ~W15처럼 이름을 붙여 간다. 그리고 W16 부터 W79 는 아래와 같이 계산한다.
- W16 = (W0⊕W2⊕W8⊕W13) 을 1비트 회전
- Wt = (Wt-16⊕Wt-14⊕Wt-8⊕Wt-3)을 1비트 회전
⑶ 블록 처리
입력 블록에 대해 80 단계씩의 처리를 행한다. 입력 블록의 정보를 기초로 내부 상태(160비트) 를 변화시킨다. 이것을 모든 블록에 대해 행한다. 내부 상태 160비트는 A, B, C, D, E 라는 이름이 붙은 32비트 × 5개의 버퍼로 표현되어 있다.
⑷ 1 단계 처리
'⑶ 블록 처리' 에 등장한 1 단계의 내용은 아래 그림과 같이 처리가 된다. W0 ~ W79 를 기초로, 내부 상태(즉 A, B, C, D, E 의 값)를 변화시켜 가는 복잡한 처리이다. A ~ E 의 버퍼의 초기값은 아래 그림에 나타나있다.
RIPEMD-160
RIPEMD-160 은 1996 년에 Hans Dobbertin, Antoon Bosselaers, Bart Preneel 에 의해 만들어진, 160비트의 해시 값을 갖는 일방향 해시 함수이다. RIPEMD-160 은 European Union RIPE 프로젝트로 만들어진 RIPEMD 라는 일방향 해시 함수의 개정판이 된다.
HAS-160
1998년 한국형 디지털 서명을 위해서 개발되었다.
해시 함수 비교
해시 함수로 해결할 수 없는 문제
해시 함수는 '수정 또는 변경' 을 검출할 수 있지만, '거짓 행세' 를 검출하는 것은 못 한다. 이를 위해서는 무결성 외에 인증이라는 절차가 필요해진다. 인증을 수행하기 위한 기술이 메시지 인증 코드와 디지털 서명이다.
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
보드 게임 관련 AI 알고리즘 [구현 예정] (0) | 2022.11.28 |
---|---|
LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence (0) | 2022.11.17 |
BSP(Binary Space Partitioning)알고리즘을 응용해 로그라이크류 게임 방만들기 (0) | 2022.09.17 |
시간 복잡도에 따른 알고리즘 목록 (0) | 2022.08.31 |
유향 비순환 그래프 (DAG = Directed acyclic graph) 와 Khan 알고리즘을 이용한 위상 정렬 (Topological Sort) (0) | 2022.08.19 |