Hash 알고리즘의 수학적 구조와 원리를 이해하는 것은 진짜 너무 어렵다.
100% 이해하기보다는, 일단 어느 정도 알고 넘어가야겠다.
나중에 반복해서 보면 언젠가는 100% 이해할 날도 올 거라고 생각한다.
또한, 실무에서는 해시 알고리즘의 구조를 100% 이해하지 않아도 일하는데 크게 지장은 없다.
Chapter 03. 공개키 암호와 메시지 인증 - 3.2 안전 해시함수(2)
□ SHA-512 알고리즘의 구조
Step 1. 패딩 비트 붙이기
- 메시지를 추가하여 총 길이를 896(mod1024)이 되도록 만든다.
- 메시지 길이가 이미 896(mod1024)라면 1024bit를 추가한다.
- 그러면 패딩비트의 길이 L은 1≦L≦1024이다.
- 패딩 비트의 첫 번째 값은 1이고 나머지 비트는 모두 0이다.
Step 2. 길이 붙이기
- 128 비트 블록을 메시지에 추가한다.
- 이 128비트에는 원 메시지의 길이 정보가 있다.
- 원 메시지 길이 + 패딩 비트 길이 + 128비트 = 0(mod1024)가 성립한다.
- 따라서, 총 길이는 N x 1024가 된다.
- 이 메시지를 1024개의 비트 블록으로 쪼개면 M_1, M_2, M_3,...., M_N이 된다.
Step 3. MD 버퍼 초기화
- 512bit 버퍼를 마련한다.
- 이 버퍼는 해시함수의 최종값과 중간값이 저장된다.
- 이 버퍼를 8개의 64 비트 레지스터로 나타낸다.
- 이 레지스터의 초기값을 다음과 같이 64비트 정수(16진법 수)로 초기화한다.
a = 6A09E667F3BCC908 b = BB67AE8584CAA73B c = 3C6EF372FE94F82B d = A54FF53A5F1D36F1 |
e = 510E527FADE682D1 f = 9B05688CEB3E6C1F g = 1F83D9ABFB41BD6B h = 5B0CDI9137E2179 |
Step 4. 1024 비트(128-워드) 블록 메시지 처리
- SHA 512 알고리즘은 80라운드로 이루어진 모듈이다.
- 각 라운드에서는 MD 버퍼 값인 512 비트의 a, b, c, d, e, f, g, h를 입력으로 사용하여 버퍼 값을 경신한다.
- 첫 번째 라운드 입력 시, 버퍼는 중간 해시 값인 H_(i-l)을 갖게 된다.
- 각 라운드 번호를 t라고 할 때, t 라운드에서 처리되는 1024 비트 블록인 M_i로부터 계산한 64비트 값인 W_t를 사용한다.
- 각 라운드에서는 덧셈 상수 K_t를 사용한다.
- t=79에서 출력되는 값은 H_j를 생성하는 첫 번째 라운드인 H_(i-1)의 입력으로 사용된다.
Step 5. 출력
- N개의 1024 비트 블록이 모두 처리된 후에 N번째 단계에서 512 비트 메시지 다이제스트를 얻을 수 있다.
SHA-512 해시코드의 성질
- SHA-512 알고리즘에서 해시 코드의 각 비트는 입력으로 사용되는 모든 비트의 함수가 된다.
- 기본 함수 F가 복잡하게 반복 적용되어 잘 섞인 결과를 배출한다.
- 임의로 선택된 두 메시지가 유사한 규칙성을 가지고 있어도, 같은 해시 코드를 가질 확률이 낮다.
'네트워크보안에센셜' 카테고리의 다른 글
Chapter 03. 공개키 암호와 메시지 인증 - 3.3 메시지 인증 코드(2) - 블록암호기반 MAC (1) | 2020.10.12 |
---|---|
Chapter 03. 공개키 암호와 메시지 인증 - 3.3 메시지 인증 코드(1) (1) | 2020.10.05 |
Chapter 03. 공개키 암호와 메시지 인증 - 3.2 안전 해시함수(1) (0) | 2020.09.22 |
Chapter 03. 공개키 암호와 메시지 인증 - 3.1 메시지 인증 방법 (0) | 2020.09.19 |
Chapter 02. 대칭 암호와 메시지 기밀성 - 복습문제 (0) | 2020.09.15 |