SHA

SHA (Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 암호학적 해시 함수들의 모음입니다.

해시 함수의 버전은 0~3버전 까지 존재하며, 작성 시점엔 SHA2가 가장 범용적이며, 현재 SHA3가 권장되고 있습니다.

특징

A. 해시 함수는 두 값이 다르면 데이터도 다르다 ( 같을 경우 해시 충돌 ) B. 해싱된 값을 복호화 할수 없다. C. 결과물은 고정된 길이의 숫자를 가진다.

VersionNameBit

SHA-0/1

SHA-0/1

160

SHA-2

SHA-224

224

SHA-2

SHA-256

256

SHA-2

SHA-384

384

SHA-2

SHA-512

512

SHA-2

SHA-512/224

224

SHA-2

SHA-512/256

256

SHA-3

SHA-224

224

SHA-3

SHA-256

256

SHA-3

SHA-384

384

SHA-3

SHA-512

512

SHA-3

SHAKE 128/256

임의

SHA-0/SHA-1

sha-0에 압축 함수에 비트 회전 연산을 하나 추가한 알고리즘 입니다.

SHA-1은 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 한다.

SHA-0과 SHA-1는 해시 충돌에 대한 이슈가 생겨 중요한 데이터는 이 이상의 알고리즘을 사용할 것을 권장하고 있습니다.

동작 원리

A 패딩

INPUT MESSAGE를 512bit의 블록으로 나눕니다. 이때 512 비트는 448bit ( message + padding ) + 64bit ( message length )로 나눕니다.

B 32Bit 분리

A

0x67452301

B

0xefcdab89

C

0x98badcfe

D

0x10325476

E

0xc3d2e1f0

W0 - W79는 위 고정된 Word Buffer와 특정 연산을 거쳐 160Bit를 만들어냅니다.

C Hash 생성

80개의 WT는 다음과 같은 공식을 거쳐 생성됩니다.

0<= t <= 19f (t, B, C, D) = (B & C) | (~B & D)

20<= t <= 39

f (t, B, C, D) = B ^ C ^ D

40<= t <= 59

f (t, B, C, D) = (B & C ) | (B & D) | (C & D)

60 <= t <= 79

f (t, B, C, D) = B ^ C ^ D

Wt = (Wt-16 XOR Wt-14 XOR Wt-8 XOR Wt-3) <<< 1bit 레프트 로테이션

D Block 연산

80 라운드 반복 (80 Rounds Iteration): 80개의 라운드를 반복합니다. 각 라운드에서 다음과 같은 계산을 수행합니다:

f(t;B,C,D) = (B AND C) OR ((NOT B) AND D): 함수 f(t)는 현재 라운드 t에서 사용되는 함수로, B, C, D 값을 이용하여 계산됩니다.

계산된 f(t)는 고정상수 Kt에 의해 A,B,C,D,E가 재배치됩니다. 라운드가 종료된뒤 각 32bit인 ABCDE를 합쳐 해시값을 도출합니다.

Last updated