네트워크보안에센셜

네트워크보안에센셜Chapter 03. 공개키 암호와 메시지 인증 - 3.2 안전 해시함수(2)

영차영차33 2020. 10. 4. 21:46

 

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가 복잡하게 반복 적용되어 잘 섞인 결과를 배출한다. 
  • 임의로 선택된 두 메시지가 유사한 규칙성을 가지고 있어도, 같은 해시 코드를 가질 확률이 낮다.