검수요청.png검수요청.png

블레이크2B

위키원
leejia1222 (토론 | 기여)님의 2019년 7월 15일 (월) 15:41 판 (알고리즘)
이동: 둘러보기, 검색

BLAKE는 단 버스타인(Dan Bernstein)의 ChaCha stream 암호를 기반으로 하는 암호화 해시 함수이고, BLAKE2는 2012년 12월 21일에 발표된 BLAKE를 기반으로 하는 암호화 해시 함수이다.

개요

ChaCha stream 암호에 기초하지만 입력 블록에 복사판 XORed는 ChaCha 라운드마다 앞에 추가된다. 단어 크기는 두 가지로 변형되는데, 8 단어의 해시값을 16개의 메시지 워드와 반복적으로 결합해 다음 해시값을 도출해낸다.

역사

BLAKE는 미국 표준 기술 연구소 (NIST; National Institute of Standards and Technology) 해시 함수 경쟁에 Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.W이 제출했다. 5명의 후보자로 구성된 최종 라운드에 진출했지만 2012년 SHA-3 알고리즘에 채택된 Keccak에 패배했다. 그후 2012년 BLAKE를 기반으로 업그레이드 버전인 BLAKE2가 손상된 MD5, SHA-1 알고리즘을 대체하는 것을 목적으로 발표됐다.

BLAKE2

NEON이 활성화된 ARM을 포함해 64비트 플랫폼에 최적화되어있으며 1~64 바이트의 다이제스트를 생성한다. 멀티 코어나 SIMD CPU에서 향상된 성능을 위해 설계된 4way 병렬 BLAKE2bp, 8way 병렬 BLAKE2sp를 포함한다. 키 해싱, 증분 트리 해싱 등에 대한 알고리즘을 제공한다. BLAKE2에는 BLAKE2x도 포함되어 있어 임의의 길이의 다이제스트를 생성할 수 있다. 초당 1기가 바이트, 바이트 당 3.08 사이클의 처리가 가능하다.[1] keying, salting, personalization, hash tree modes 을 지원한다.

알고리즘

  • 초기화 벡터

BLAKE2b는 SHA-512에서 사용하는 IV와 동일한 초기화 벡터를 사용한다. 이 값들은 최초의 8개의 소수의 제곱근으로부터 처음의 64비트를 부분적으로 읽어들임으로써 얻어진다.

IV0 = 0x6a09e667f3bcc908
IV1 = 0xbb67ae8584caa73b
IV2 = 0x3c6ef372fe94f82b  
IV3 = 0xa54ff53a5f1d36f1   
IV4 = 0x510e527fade682d1 
IV5 = 0x9b05688c2b3e6c1f 
IV6 = 0x1f83d9abfb41bd6b  
IV7 = 0x5be0cd19137e2179

다음은 BLAKE2B의 의사코드이다.

Algorithm BLAKE2b
  Input:
     M 
     cbMessageLen: Number, (0..2^128)
     Key
     cbKeyLen: Number, (0..64)
     cbHashLen : Number, (1..64)
  Output:
     Hash
상태 벡터 h 를 IV로 초기화
      ← IV
키 크기와 원하는 해시 길이를 h0에 혼합합니다.
      xor 0x0101kknn
kk = 키 길이, nn = 해시 길이
     cBytesCompressed ← 0
     cBytesRemaining  ← cbMessageLen
if (cbKeyLen > 0) then
     M ← Pad(Key, 128) || M
     cBytesRemaining ← cBytesRemaining + 128
end if
while (cBytesRemaining > 128) do
     chunk ← get next 128 bytes of message M
     cBytesCompressed ← cBytesCompressed + 128  
     cBytesRemaining  ← cBytesRemaining  - 128
     h ← Compress(h, chunk, cBytesCompressed, false)
end while
 hunk ← get next 128 bytes of message M
 cBytesCompressed ← cBytesCompressed+cBytesRemaining
 chunk ← Pad(chunk, 128)
 h ← Compress(h, chunk, cBytesCompressed, true)
 Result ← first cbHashLen bytes of little endian state vector h
End Algorithm BLAKE2b
Compress
Function Compress
  Input:
     h
     chunk
     t : Number, 0..2^128
     IsLastBlock: Boolean   
  Output:
     h
  V ← h
  V ← IV
  V ←  V xor Lo(t)
  V ←  V xor Hi(t)
  if IsLastBlock then
  V ←  V xor 0xFFFFFFFFFFFFFFFF
  m ← chunk
  for i from 0 to 11 do
  S ← SIGMA[i mod 10]
     Mix(V0, V4, V8,  V12, m[S0], m[S1])
     Mix(V1, V5, V9,  V13, m[S2], m[S3])
     Mix(V2, V6, V10, V14, m[S4], m[S5])
     Mix(V3, V7, V11, V15, m[S6], m[S7])
     Mix(V0, V5, V10, V15, m[S8],  m[S9])
     Mix(V1, V6, V11, V12, m[S10], m[S11])
     Mix(V2, V7, V8,  V13, m[S12], m[S13])
     Mix(V3, V4, V9,  V14, m[S14], m[S15])
  end for
  h ← h xor V
  h ← h xor V
  Result ← h
End Function Compress
MIX

Compress 함수에 의해 호출되며 메시지의 두 8바이트 단어를 해시 상태로 혼합한다. 대부분의 구현에서 이 함수는 인라인 또는 인라인 함수로 작성됩니다.[2]

각주

  1. BLAKE2 - fast secure hashing〉, 《blake2.net》
  2. BLAKE〉, 《wikipedia》

참고자료


  검수요청.png검수요청.png 이 블레이크2B 문서는 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.