현대 암호학

[현대 암호학] 08-4. 일방향 해시 함수의 SHA-1

Uggjjini 2021. 6. 30. 11:12

일방행 해시 함수 SHA-1 개요

 

일방향 해시 함수 SHA-1 개요

 

SHA-1 구조

  • 입력: 최대 264 bits 미만 메시지
  • 출력: 512 bits 메시지 다이제스트 => 160 bits 해시값
  • 블록 크기 : 512 bits

 

SHA-1 처리 단계

  • 패딩(Padding)
  • W0 ~ W79 계산
  • 블록 처리
  • 단계 1 ~ 단계 80 처리

 

패딩(Padding)

목적: 512비트 블록 만들기(1추가 + 데이터 크기 표시)

 

패딩(Padding)?

  • 메시지 뒤에 여분의 데이터를 부가하여 메시지의 길이가 512비트의 정수배가 되도록 하는 것

 

패딩의 예

  • 입력: Hello. (6바이트(48비트))의 메시지

- ASCII 코드로 부호화하여 2진수로 표현하면

- 여기에 1을 붙인다.

H            e            l             l            o            .
01001000 01100101 01101100 01101100 01101111 00101110
01001000 01100101 01101100 01101100 01101111 00101110 1
  • 메시지의 길이가 512비트의 정수배가 될때까지 0이라는 1비트의 값을 부가
  • 단, 마지막 블록의 마지막 64비트는 메시지 길이정보 영역으로서 비워둔다.
  • "Hello."의 경우* 원래 메시지 길이(48비트) 정보 저장을 위해 끝의 64비트를 뺀 나머지를 0으로 채워 넣는다.
  • * 512 - 64 = 448 비트가 될때까지 0을 부가

0의 추가

 

길이 정보 추가

  • 데이터 길이: 48 bits를 2진수로 표현하면
  • 데이터 길이: 48 = 32 + 16 = 00110000

이것을 마지막에 추가

 

 

 

W0 ~ W79 계산

목적: 복잡성 구현(XOR, Rotation L)

 

입력 블록 512 bits마다 32 bits×80(2560 bits)의 값(W0 ~ W79)을 계산

  • W0 ~ W15 : 32 bits × 16
  • W16 : 32 bits × 1
  • W17 ~ W79 : 32 bits × 63

 

입력 블록 512 bits32 bits×16개로 분할하여 W0 ~ W15로 이름을 붙인다.

 

W16부터 W79는 아래와 같이 계산

  • W16 = (W0 ㊉ W2 ㊉ W8 ㊉ W13)을 1비트 회전
  • Wt = (Wt-16 ㊉ Wt-14 ㊉ Wt-8 ㊉ Wt-3)을 1비트 회전, t=17~79

 

 

1비트 회전한 모양

01001000 01100101 01101100 011011001비트 회전한 모양

1 비트 회전한 모양

 

입력 블록  512 비트로 부터  80 개의  32 비트 값 (W 0   ~ W 79 ) 을 생성

 

 

 

블록 처리

목적: 복잡성 구현(and, or, xor, +)

  • 입력 블록에 대해 80 단계씩의 처리를 행한다.
  • 입력 블록의 정보를 기초로 내부 상태(160비트)를 변화

입력 블록  512 bits 를  160 bits 의 내부 상태에 섞어 넣는다 .(80  단계 )

 

1단계 처리