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

블레이크2B

위키원
lyo731 (토론 | 기여)님의 2019년 7월 15일 (월) 15:53 판
이동: 둘러보기, 검색

BLAKE2B는 64비트 x64 혹은 ARM 아키텍처에서 MD5, SHA-1, SHA-2, SHA-3보다 빠른 암호화 해시 함수이다.

개요

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

역사

BLAKE는 댄 버스타인(Dan Bernstein)의 ChaCha stream 암호를 기반으로 하는 암호화 해시 함수로 미국 표준 기술 연구소 (NIST; National Institute of Standards and Technology) 해시 함수 경쟁에 장 필리프 오마송(Jean-Philippe Aumasson), 루카 헨젠(Luca Henzen), 윌리 마이어(Willi Meier), 레이펠 C.W(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 문서는 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.