HeYStRanGeR
article thumbnail
(2021.12.01)
이번에 정리할 부분 목차

12.1 개요
 12.1.1 반복 해시 함수
 12.1.2 압축 함수의 두가지 유형

12.2 SHA-512
 12.2.1 개요
 12.2.2 압축 함수
 12.2.3 분석

12.3 WHIRLPOOL
 12.3.1 Whirlpool 암호
 12.3.2 요약
 12.3.3 분석

 

이전 단원들 내용이 나와서 더 헷갈리고 어려웠다..

이해하기 위해 이전 단원들을 여러 번 읽어봄

그나마 이번 단원은 짧다..


 

 

암호학적 해시 함수

해시함수: 입력되는 메시지의 크기에 상관없이 일정한 크기의 출력 생성

압축함수: 입력되는 메시지의 크기 고정, 일정한 크기의 출력 생성

--> 압축함수는 (n>m) n-비트 스트링을 m-비트 스트링으로 만든다. 이 구조를 반복 암호학적 해시 함수라고 한다.

 

압축함수의 반복 사용에는 두가지 유형이 있다

  • 새로운 압축 함수 개발 (MD, SHA)
  • 블록 암호의 암호화 과정 활용 (Whirlpool) --> 여러가지 구조가 제안됨

 

1. 새로운 압축 함수 개발

> MD : Message Digest의 줄임말로 MD5가 128 메시지 다이제스트를 출력하는데 충돌내성을 갖기에는 짧다고 알려져있다

> SHA : Secure Hash Algorithm

 

SHA(Secure Hash Algorithm):NIST FIPS 180, 180-1, 180-2

: 블록 크기에 관계없이 메시지 다이제스트의 크기는 고정된다.

 

 

이 중에서 SHA-512를 살펴보았다.

입력 메시지의 길이는 2^128bit 이하고, 출력되는 메시지 다이제스트는 512 bit 이다.

최종 정리하면,

메시지 다이제스트는 8개의 초기화된 A~E의 워드로 구성됨 (64 bits 씩 총 512 bits)

메시지 블록은 패딩을 거쳐 16개워드로 구성됨 (64 bits 씩 총 1024 bits)

메시지 블록의 16개의 워드에 워드 확장을 하여 총 80개의 워드가 됨.

이제 메시지 다이제스트(8개의 워드)와 확장된 메시지 블록(80개의 워드)를 통해서 압축함수 진행

압축함수는 80번의 라운드가 진행되는데

8개의 워드로 구성된 메시지 다이제스트와 메시지 블록을 워드 확장한 80개의 워드 중 앞순서로 하나를 한 라운드로 이용한다.(+ 64bits 상수 Ki과 함께)

 

 

 

SHA-512의 메시지 다이제스트 생성과정
SHA-512의 메시지 패딩
SHA-512의 메시지 블록과 메시지 다이제스트
SHA-512의 워드 확장
SHA-512의 메시지 다이제스트 초기화 (8개의 상수 사용)
SHA-512의 압축함수
SHA-512의 압축함수의 각 라운드의 구조
SHa-512의 버퍼 A,E의 계산
80 라운드에 사용되는 80개의 상수

 

 

 

 

 

 

 

2. 블록 암호의 암호화 과정 활용

 

Merkle-Damgard 구조

> 압축함수가 충돌 내성을 가지고 있으며, 해시 함수 또한 충돌 내성을 가지고 있다.

 

 

1. 메시지에 메시지 길이와 패딩을 붙여 n 비트 블록으로 만든다.

2. 메시지는 길이 n비트인 t개의 블록으로 구성된다. 각 블록을 M1,M2,...,Mi라고하고, t번 동안 반복해서 생성되는 다이제스트를 H0,H1,...,Ht라고 한다.

3. 반복하기 전에 다이제스트 H0은 고정된 값을 갖도록 설정하는데 이를 초기벡터 IV라고 부른다.

4. 매 반복 과정에서 압축 함수는 H_i-1과 Mi를 이용해서 Hi를 생성한다. 즉, Hi=f(H_i-1,Mi) (f는 압축함수)

5. Hi는 원래 메시지로부터 생성되는 암호학적 해시 함수의 해시 값이다. 즉, Ht=h(M)이다.

 

 

  • Rabin 구조
  • Davies-Meyer 구조
  • Matyas-Meyer-Oseas 구조
  • Miyaguchi-Preneel 구조

 

> Rabin 구조

 

- 블록암호의 암호화 기능만을 사용하는 해시함수

- 메시지 블록이 키로 사용, 메시지 다이제스트가 평문으로 사용

- 메시지 다이제스트 크기 = 데이터 블록 암호의 크기

- 복호화 알고리즘을 사용하는 중간자 공격에 취약

 

 

> Davies-Mayer 구조

 

- Rabin 구조에 기반을 두고 있음

- 중간자 공격에 대응하기 위해 forward feed 기능을 사용함 

 

 

> Matyas-Meyer-Oseas 구조

 

- Davies-Mayer 구조에서 K와 P의 역할을 바꾼 것

- 메시지 블록의 크기 = 암호 키의 길이

 

 

> Miyaguchi-Preneel 구조

 

- 평문, 암호문, 암호 키 모두를 XOR 연산에 적용하여 메시지 다이제스트를 생성함

- Whirlpool 해시 함수에 적용

 

 

 

 

 

 

 

Whrilpool

Whrilpool 해시 함수 구조

 

입력 메시지의 길이는 2^256비트 이하이고, 출력되는 메시지 다이제스트는 512 비트이다.

블록암호는 AES암호를 수정하여 사용된다.

 

 

 

 

> 10번의 라운드로 구성됨

> 512 bits 블록 사용

> 512 bits 라운드 키 사용

> 11개의 라운드 키 확장 필요

 

AES의 라운드 구조: subBytes->shirftRows->Mixcolumns->Addroundkey

Whirlpool 라운드 구조: subBytes->shiftcolumn->MixRows->Addroundkey

AES의 state는 열(columns)기준이고, Whirlpool의 state는 행(rows)기준임

 

 

Whirlpool에서 사용되는 압축 함수가 암호에 기반하기 때문에 SHA-512만큼 효율적이지는 못할 수 있음

 

 

 

728x90
profile

HeYStRanGeR

@HeYStRanGeR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!