네트워크보안에센셜

Chapter 03. 공개키 암호와 메시지 인증 - 3.3 메시지 인증 코드(1)

영차영차33 2020. 10. 5. 21:07

오늘은 HMAC에 대해서 공부를 하였다. 

다행히도 HMAC 알고리즘이 머리 아프게 어렵지 않았다. 

그래도 하루에 알고리즘 2개를 공부하기는 무리인 것 같아서, 3.3 메시지 인증 코드 단원을 쪼개서 정리하기로 했다. 

올해 안에 이 책을 끝내는 것은 아무래도 무리인 듯하다. 

 

 


Chapter 03. 공개키 암호와 메시지 인증 - 3.3 메시지 인증 코드

 

 

□ 암호적 해시함수의 장점

  • DES에 비해 빠르게 실행 가능
  • 코드를 쉽게 구할 수 있음
  • 수출 규제가 없음

-> SHA-1은 비밀키를 사용하지 않으나, 비밀키를 사용하는 HASH함수를 위해서 HMAC이 탄생

-> HMAC은 전송계층 보안(TLS), 안전한 전자 결제(SET) 등 인터넷 프로토콜에서 사용

 

HMAC 설계 목표 (RFC에서 열거)

  • 수정하지 않고 쓸 수 있는 해시함수를 만든다. 특히 SW에서 잘 돌아가고 코드를 무료로 제공하고 널리 쓰일 수 있도록 한다.
  • 더 빠르고 안전한 해시함수가 있거나, 필요하다면 기존의 해시함수를 쉽게 바꿀 수 있도록 한다. 
  • 심각하게 기능저하를 유발하지 않고 해시함수의 원래 성능을 유지한다. 
  • 키를 쉽게 다룬다. 
  • 내장된 해시함수에 대해 인증 메커니즘 강도에 대해 암호해독을 확실히 파악할 수 있다. 

 

HMAC 알고리즘

HMAC(K,M) = H[K'⊕opad || H[K'⊕ipad||M]]
  • H : 내장된 해시함수
  • M : HMAC의 입력 메시지
  • Y_i : M의 i번째 블록
  • L : M의 블록 수
  • b : 블록의 비트 수
  • n : 내장된 해시함수에 의해 생성된 해시 코드의 길이
  • K : 비밀키
  • K' : K의 왼쪽에 0을 붙여서 길이가 b비트가 되도록 한 것 
  • ipad : 00110110를 b/8번 반복한 2진 수열
  • opad : 01011100를 b/8번 반복한 2진 수열

 

 

  1. b-비트 스트링 K'를 만들기 위해 K의 왼쪽에 0을 붙인다. 
  2. b비트 블록 S_i를 생성하기 위해 K'와 ipad를 XOR 한다. 
  3. S_i에 M을 붙인다. 
  4. 3단계에서 생성된 스트림에 H를 적요한다. 
  5. b비트 블록 S_0를 생성하기 위해 K'와 opad를 XOR한다. 
  6. 4단계에서 얻은 해시 결과를 S_0에 붙인다. 
  7. 6단계에서 생성된 스트림에 H를 적용해서 결과를 얻는다.