블레이크(해시 함수)

BLAKE (hash function)
블레이크
일반
디자이너장필립 아우마송, 루카 헨젠, 빌리 마이어, 라파엘 C.W. 판
후계자블레이크2
인정.SHA-3 파이널리스트
세부 사항
다이제스트 사이즈224, 256, 384 또는 512비트
구조.HAIFA 건설
라운드14 또는 16
속도BLAKE-256의 경우 코어 2의 경우 8.4 cpb, BLAKE-512의 경우 7.8 cpb

BLAKEDaniel J. BernsteinChaCha 스트림 암호에 기반암호화 해시 함수이지만 입력 블록의 변환된 복사본인 라운드 상수가 XORed가 ChaCha 라운드 전에 추가됩니다.SHA-2와 마찬가지로 단어 크기가 다른 두 가지 종류가 있습니다.ChaCha는 4×4 배열의 단어로 작동합니다.BLAKE는 8단어 해시값을 16개의 메시지 워드와 반복적으로 결합하여 ChaCha 결과를 잘라 다음 해시값을 얻습니다.BLAKE-256BLAKE-224는 32비트 워드를 사용하여 각각 256비트 및 224비트의 다이제스트사이즈를 생성합니다.BLAKE-512BLAKE-384는 64비트 워드를 사용하여 각각 512비트 및 384비트의 다이제스트사이즈를 생성합니다.

블레이크에 기반한 BLAKE2 해시 함수는 2012년에 발표되었습니다.BLAKE2에 기반한 BLAKE3 해시 함수는 2020년에 발표되었습니다.

역사

BLAKE는 Jean-Philippe Aumasson, Luca Henzen, Willi Meier 및 Raphael C.-W. Phan에 의해 NIST 해시 함수 공모전에 제출되었습니다.2008년에는 51개의 응모작이 있었다.블레이크는 5명의 후보자로 구성된 최종 라운드에 진출했지만 2012년 SHA-3 알고리즘에 선정된 케카크에게 패했다.

알고리즘.

SHA-2와 마찬가지로 BLAKE는 2가지 종류가 있습니다.하나는 32비트 워드를 사용하여 최대 256비트 길이의 해시를 계산하고, 다른 하나는 64비트 워드를 사용하여 최대 512비트 길이의 해시를 계산합니다.코어 블록 변환은 16개의 입력 단어와 16개의 작동 변수를 결합하지만 블록 간에 보존되는 단어는 8개(256비트 또는 512비트)뿐입니다.

16개의 상수 워드 표('의 소수 부분의 선두 512비트 또는 1024비트)와 10개의 16개 요소 순열 표를 사용합니다.

[ [ 0 ] = 0 1 2 3 5 6 8 9 10 12 13 14 15 [ [ 1 ] = 14 10 4 8 8 9 15 1 12 0 2 11 7 5 [ [ 2 ] = 11 8 12 0 5 13 13 13 3 3 7 7 9 4 = 7 3 3 3 3 3 1 1 12 1 12 12 12 12 12 12 12 5 14 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 10 9 9 8 8 8 8 = 8 = 8 = 8 8 = 8 84 13 4 10 0 7 6 3 9 8 11 [[ 7 ] = 13 11 7 14 1 3 9 5 15 5 5 15 4 4 8 8 2 10 [ [ 8 ] = 6 15 14 9 11 3 0 8 12 2 12 2 13 7 1 4 5 [ [ 9 ] = 10 2 8 8 4 7 7 6 5 15 9 11 3 13 0

핵심 연산은 ChaCha의 1/4 라운드에 해당하는 4단어 열 또는 대각선으로 작동합니다.a b c d2개의 메시지와 조합되어 있습니다.m[]그리고 두 개의 끊임없는 단어n[]. 풀 라운드당 8회 수행합니다.

J← σ[r%10][2×i]// 지수 계산 ← ← σ[r%10][2×i+1]k의 a+b+(m[j]⊕ n[k])//1단계(입력으로)d←(d⊕)>>>16c← 댁+d//2단계(가 입력되지 않)b←(b⊕ c)>>>12←의 a+b+(m[k]⊕ n[j])//3단계(입력으로)d←(d⊕)>>>8c← 댁+d// 4단계(가 입력되지 않다.)b←(b⊕ c)>>>7.

위의 경우,r라운드 번호(0~13)입니다.i0 ~ 7 입니다.

ChaCha 쿼터라운드 기능과의 차이점은 다음과 같습니다.

  • 메시지 단어가 추가되었습니다.
  • 회전 방향이 반전되었습니다.

"BLAKE는 ChaCha 스트림 암호의 순열을 반대 방향으로 회전시켜 재사용합니다.일부에서는 고도의 최적화를 의심하고 있습니다만, 실제로는 원래의 BLAKE 사양의 오타에서 유래하고 있습니다」라고, Jean-Philippe Aumasson씨는 「Crypto Dictionary」[1]에서 설명하고 있습니다.

64비트 버전(ChaCha에는 없음)은 동일하지만 회전량은 각각 32, 25, 16, 11이며 라운드 수는 16으로 증가합니다.

수정하다

NIST 해시 함수 경합을 통해 참가자는 발견된 문제를 해결하기 위해 알고리즘을 "조종"할 수 있다.BLAKE에 변경된 사항은 라운드 수가 10/14에서 14/16으로 증가했다는 것입니다.이는 빠른 속도를 유지하면서 보안에 대해 보다 보수적으로 대처하기 위함입니다.

요약 예시

빈 문자열의 해시 값:

BLAKE-224("") = 7dc5313b1c04512a b bd6503b89607aecbee0903d40a8a569c94eed BLAKE-256("") = 716f6e863f744b9c977b76ea5f908bc67c6c154fc154fc154fc4fc14fc4fc4fc4fc4fc4beae94f396ae402a00acc9eab77b4d4c2e852aaaa25a636d80af3fc7913ef5b8

단일 비트를 변경하면 출력의 각 비트가 50% 확률로 변경되어 눈사태 효과가 나타납니다.

BLAKE-512("빠른 갈색 여우가 게으른 개를 뛰어넘는다") = 1f7e26f63b6ad25a089699780050a1766391d200471a77afb975e5034b7ad9ccf847be656e1182fbc6342ce0ce8dce8dce0ce05ce5ce0ce8ce0ce5ce8ce0ce0ce0ce0ce0ce0122e849ed6335e9ff43b764198a

블레이크2

블레이크2
일반
디자이너장필립 오마송, 사무엘 네베스, 주코 윌콕스-O'크리스티안 위너라인
유래블레이크
세부 사항
다이제스트 사이즈최대 64바이트(BLAKE2b), 최대 32바이트(BLAKE2s), 임의(BLAKE2X)
라운드10 또는 12
속도BLAKE2b용[2] Core i5(Ivy Bridge)의 3.5 cpb

BLAKE2는 BLAKE를 기반으로 한 암호화 해시함수로, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'가 만들었습니다.과 크리스티안 위너라인입니다설계 목표는 소프트웨어에서 고성능을 필요로 하는 애플리케이션에서 널리 사용되지만 고장난 MD5SHA-1 알고리즘을 대체하는 것이었습니다.BLAKE2는 2012년 [3]12월 21일에 발표되었습니다.참조 구현은 CC0, OpenSSL 라이센스 및 Apache Public License 2.[4][5]0에서 사용할 수 있습니다.

BLAKE2b는 64비트 [4]x86-64 및 ARM 아키텍처에서 MD5, SHA-1, SHA-2 및 SHA-3보다 빠릅니다.BLAKE2는 SHA-2보다 더 나은 보안을 제공하며 SHA-3와 유사합니다. 길이 확장에 대한 내성, 랜덤 오라클에 대한 무관심 [6]등입니다.

BLAKE2는 BLAKE 라운드 함수에서 메시지 워드에 상수를 추가하고, 2개의 회전 상수를 변경하고, 패딩을 단순화하고, 초기화 벡터를 사용하여 XOR되는 파라미터 블록을 추가하고, BLAKE2b(BLAKE-512의 후계자)의 경우 16개에서 12개로, BLAKE2(BLAK-256의 후계자)의 경우 14개에서 10개로 라운드 수를 줄입니다.

BLAKE2는 키 입력, 솔팅, 퍼스낼라이제이션 및 해시 트리 모드를 지원하며, BLAKE2b의 경우 1바이트~64바이트, BLAKE2의 경우 32바이트까지 다이제스트를 출력할 수 있습니다.또한 멀티코어 프로세서의 성능을 향상시키도록 설계된 병렬 버전도 있습니다. 즉, BLAKE2bp(4방향 병렬)와 BLAKE2sp(8방향 병렬)입니다.

BLAKE2X는 Extensible-Output Functions(XOF; 확장가능출력함수) 패밀리입니다.BLAKE2는 64바이트 다이제스트로 제한되지만 BLAKE2X는 최대 256GiB의 다이제스트를 허용합니다.BLAKE2X 자체는 해시 함수의 인스턴스가 아니며 실제 BLAKE2 인스턴스에 기반해야 합니다.BLAKE2X 인스턴스의 예로는 BLAKE2Xb16MiB를 들 수 있습니다.BLAKE2B는 16,777,216바이트 다이제스트를 생성하는 BLAKE2B에 기반한 BLAKE2X 버전입니다(또는 정확히 16MiB, 이러한 [7]인스턴스의 이름입니다.

BLAKE2b 및 BLAKE2s는 RFC 7693에 규정되어 있습니다.파라미터 블록을 사용하는 옵션 기능(솔팅, 퍼스낼라이즈된 해시, 트리 해시 등)은 지정되어 있지 않으므로 BLAKE2bp, BLAKE2sp 또는 [8]BLAKE2X도 지원되지 않습니다.

BLAKE2sp는 컨텍스트 메뉴 "CRC SHA"에서 7zip 파일 압축기 서명에 사용되는 BLAKE2 버전입니다.

초기화 벡터

BLAKE2b는 SHA-512에서 사용되는IV와 같은 초기화 벡터를 사용합니다.이들 값은 첫 번째 8개 소수 제곱근의 소수 부분 중 첫 번째 64비트를 취함으로써 투명하게 얻을 수 있습니다.

IV0=0x6a09e667f3bcc908 // Frac(sqrt(2))IV1=0xbb67ae8584caa73b // Frac(sqrt(3))IV2=0x3c6ef372fe94f82b // Frac(sqrt(5))IV3=0xa54ff53a5f1d36f1 // Frac(sqrt(7))IV4=0x510e527fade682d1 // Frac(sqrt(11))IV5=0x9b05688c2b3e6c1f // Frac(sqrt(13))IV6=0x1f83d9abfb41bd6b // Frac(sqrt(17))IV7=0x5be0cd19137e2179을 끓여Frac(sqrt.(19))

BLAKE2b 알고리즘

BLAKE2b 알고리즘의 의사 코드.BLAKE2b 알고리즘은 8바이트(UInt64) 워드와 128바이트 청크를 사용합니다.

알고리즘 BLAKE2b 입력: 해시되는 M 메시지 cbMessageLen: 숫자, (0..2128) 바이트 단위 메시지 길이 키 옵션 0..64 바이트 키 cbKeyLen: 숫자, (0..64) 옵션길이(바이트) cbHashLen: 숫자, (1..64) 원하는 해시 길이(바이트) 출력:해시 HashcbHashLen 바이트의 이니셜 라이즈 주립 벡터 h4세 h0..7 ← IV0..7 섞어 키 크기(cbKeyLen)과 원하는 해시 길이 kk은 키 길이(바이트 단위로)nnh0h0←h0 xor 0x0101kknn 일반적으로 해시 길이(바이트 단위로)우리는 압착하다 우리가 기록할 때마다 얼마나 많은 바이트 압축해 왔다 바란다에(cbHashLen). c만약 키 공급(i.e.cbKeyLen>0)그때 패드 0이(i.e. 16단어)128-bytes은 M과 만약(cbKeyLen>0)그때 M← Pad(키 128)McBytesRemaining ← cBytesRemaining+128끝 만약 압축하 whole128-byte 덩어리를 메시지에 prepend을 만들기 위해 후행과 함께 BytesCompressed ← 0cBytesRemaining ← cbMessageLen.흙의마지막 부분을 제외한 E메시지,(cBytesRemaining>128)메시지 McBytesCompressed ←의 다음 128바이트 cBytesCompressed면+바이트 M에서 ← cBytesRemaining-128감소 계수 h←가 압축(h, chunkcB 처리해야 할 남아 있는 cBytesRemaining 압축된 바이트의 128증가 수 ← chunk 한다.ytesCompressed, false) false this M 청크에서 최종 바이트 압축 ← 다음 128바이트 메시지를 받는 동안 마지막 청크 끝아닙니다. M 나머지 바이트를 얻습니다. 나머지 바이트 (예: 0..128바이트) cBytesCompressed ← cBytesCompressed+cBytesCressed ← 128 Chunk pad에서 남은 실제 남은 바이트 수 ← 128Chunk pad(청크패드)till compress a final chunk of 0 h ← Compress(h, chunk, cBytesCompressed, true) true this 이것little endian 상태 벡터 h End Algorithm BLAK2b의 마지막 청크 결과 ← 첫 번째 cbHashLen 바이트입니다.

압축하다.

압축 함수는 입력 메시지의 전체 128바이트 청크를 가져와 진행 중인 상태 배열에 혼합합니다.

함수 압축 입력: h 압축할 영구 상태 벡터 청크 128바이트(16 이중 단어) 메시지 청크: 숫자, 0..2128 Compression IsLastBlock: Boolean 압축 마지막 라운드인지 여부를 나타냅니다. 출력: h지속적인 상태 벡터를 설치하는 국소 작업 벡터 VV0..7 ← h0..7 8개의 아이템에서 복사됩니다 첫번째 지속적인 상태 벡터 hV8.니다.15← IV0..7 남은 8개의 아이템 IV 섞어 V에 128비트 카운터 t에서:V13 V← VUInt128 tV13의 Lo(t)Lo에서는 t 만일 이것이 마지막 블록 ← V13 UInt128의 Hi(t)안녕하세요에서는 xor xor 초기화됩니다. 그런 다음 IsLastBlock경우14 V14 모든14 비트를 반전시킨 다음 V ← V x 또는 0xFFFFFFFF128바이트 메시지 청크를 16개의 8바이트(64비트) 단어로 처리 m0..15i암호화 메시지 혼합을 위한 12라운드의 메시지 혼합 일정을 선택합니다. BLAKE2b는 12라운드를 사용하는 반면 SIGMA에는 10개의 엔트리만 있습니다.S0..15 ← SIGMA[나는 10mod]라운즈 10,11사용 SIGMA[0]과 SIGMA[1]각각 Mix(V0, 시각, V8, V, m[적 S0], m[S1])Mix(V, V5, V9, V13, m[S2], m[S3])Mix(V2, V6V10, V14, m[S4], m[S5])Mix(V3, V7은, V11, V15, m[S6], m[S7])Mix(V0, V5, V10, V15, m[S8], m[S9])Mix(V, V6V11, V, m[S10], m[S11]) 섞어(.V2, V7은, V8, V13, m[S12], m[S]) 섞어(V3, 시각, V9, V14., m[S14], m[S15] : V의 위쪽과 아래쪽을 진행 중인 상태 벡터 h0..7 ← h0..7 xor0..7 V h0..7 ← h0..7 xor8..15 V 결과 ← h 끝 함수 압축

믹스

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

기능 믹스 Inputs:Va, 퓨, Vc, Vd 일로 48-byte 단어 입력 벡터 V=, y는 보호 메시지에서 2바이트 단어 입력 출력. m분:Va, 퓨, Vc, Vd Va, 퓨, Vc, Vd Va← Va+퓨의 수정된 버전+입력 Vd ←(Vd Vaxor)rotateright 32Vc ← Vc+Vd가 입력되지 않퓨 ←과 x. (퓨 Vc xor)rotateright24ad V ← Va + Vb + y 입력 V ← (Vd xora V) 회전 조명 16c V ← Vc + Vd 입력 없음b ← (Vb xorc V) 회전 조명 63 결과 ← Va, Vbc, V, Vd, V 엔드 기능 혼합

요약 예시

빈 문자열의 해시 값:

BLAKE2s-224("") = 1fa1291e65248b3733475b2a0d63d54a114de3e034e7bc1ef4 BLAKE2s-256("") = 69217a3079908094e11121d042354a7c5ca82ca1df1df1df1df1df1df1df1df1dff5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce

단일 비트를 변경하면 출력의 각 비트가 50% 확률로 변경되어 눈사태 효과가 나타납니다.

BLAKE2b-512("빠른 갈색 여우가 게으른 개를 뛰어넘는다") = a8add4bdddf93e4877d2746e62817b (364a1fa7bc)d 90b3b3673f82401cf7a2a2a4cb1cb1ecb1ecd906e3e3e3f82401cf7a3e3f814cf7cf7a7a4cd7a4cd714cd7cd7cd7cd714cf7cd7c53f456b4b41e8aa78be5c12957bb

BLAKE2 사용자

  • 패스워드 해싱 대회 우승자인 Argon2는 BLAKE2b를 사용합니다.
  • Chef's Habitat 전개 시스템은 패키지[9] 서명에 BLAKE2b를 사용합니다.
  • FreeBSD Ports 패키지 관리 도구는 BLAKE2b를 사용합니다.
  • GNU Core Utilities는 b2sum[10] 명령어로 BLAKE2b를 구현합니다.
  • IPFS를 사용하면 트리 해시에 BLAKE2b를 사용할 수 있습니다.
  • librsync는 BLAKE2b를[11] 사용합니다.
  • WhatsApp에서 사용되는 노이즈(암호화 프로토콜)는 옵션으로 [12][citation needed]BLAKE2를 포함합니다.
  • RAR 파일 아카이브 형식 버전 5는 기본 32비트 CRC32가 아닌 옵션 256비트 BLAKE2sp 파일 체크섬을 지원하며 WinRAR v5+[13]에서 구현되었습니다.
  • 7-Zip은 "CRC SHA" 컨텍스트 메뉴에서 탐색기 셸의 각 파일에 대해 BLAKE2sp 서명을 생성하고 "*"를 선택할 수 있습니다.
  • rmlint는 중복 파일[14] 검출에 BLAKE2b를 사용합니다.
  • WireGuard는 해시에[15] BLAKE2s를 사용합니다.
  • 암호화 화폐인 Zcash는 Equihash의 작업 증명서에 BLAKE2b를 사용하여 주요 파생 함수로 사용합니다.
  • 암호 화폐인 나노는 작업 증명서, 해싱, 키 파생 기능[16][17][18] 등에 BLAKE2b를 사용하고 있습니다.
  • 멀티체인 블록체인 Polkadot은 해싱 알고리즘으로 BLAKE2b를 사용합니다.
  • PCI Vault는 PCI 준거 PCD 토큰화를 목적으로 해싱 알고리즘으로 BLAKE2b를 사용합니다.
  • Ergo는 BLAK2b256을 오토리코스라는 [19]해시 알고리즘의 서브루틴으로 사용한다.
  • Linux 커널 버전 5.17은 난수 [20]생성기의 엔트로피 풀을 해싱하기 위해 SHA-1을 BLAKE2로 대체했습니다.

실장

레퍼런스 [5]실장 외에 다음 암호화 라이브러리는 BLAKE2 실장을 제공합니다.

블레이크 3

블레이크 3
일반
디자이너잭 오코너, 사무엘 네브스, 장 필립 오마송, 주코 윌콕스-O'
초판2020년 1월 9일, 2년 전(2020-01-09)
유래바오, 블레이크2
세부 사항
다이제스트 사이즈256비트, 임의로 확장 가능
구조.머클나무
라운드7
속도AVX-512를[21] 사용한 캐스케이드 레이크 SP의 0.49 cpb

BLAK3는 잭 오코너, 장필립 오마손, 사무엘 네베스, 주코 윌콕스-O'가 만든 바오와 블레이크2를 기반으로 한 암호화 해시 함수다.2020년 1월 9일 Real [22]World [23]Crypto에서 발표되었습니다.

BLAKE3는 다수의 바람직한 기능(병렬성, XOF, KDF, PRF 및 MAC)을 갖춘 단일 알고리즘으로, 여러 변형을 가진 BLAKE 및 BLAKE2와 대조됩니다.BLAKE3는 바이너리 트리 구조를 가지고 있기 때문에 입력이 충분히 길면 실질적으로 무제한의 병렬 처리(SIMD와 멀티스레딩 모두)를 지원합니다.공식 Rust 및 C 구현은[24] 퍼블릭 도메인(CC0) 및 Apache [25]라이센스로서 이중 라이센스를 가집니다.

BLAKE3는 가능한 한 고속으로 설계되어 있습니다.항상 BLAKE2보다 몇 배 빠릅니다.BLAKE3 압축 함수는 BLAKE2의 압축 함수와 밀접하게 관련되어 있으며, 가장 큰 차이점은 라운드 수가 10개에서 7개로 줄어든다는 것입니다. 이는 현재의 암호화가 지나치게 [26]보수적인 것을 전제로 한 변경입니다.Merkle 트리 포맷은 병렬 처리를 제공할 뿐만 아니라 검증된 스트리밍(On-the-fly Verify) 및 증분 [24]업데이트도 허용합니다.

레퍼런스

  1. ^ Aumasson, Jean-Philippe (2021). Crypto Dictionary: 500 Tasty Tidbits for the Curious Cryptographer. No Starch Press. ISBN 9781718501409.
  2. ^ "BLAKE2 – an alternative to MD5/SHA-1".
  3. ^ O'Whielacronx, Zooko (21 December 2012). "introducing BLAKE2 – an alternative to SHA-3, SHA-2 and MD5".
  4. ^ a b "BLAKE2". blake2.net.
  5. ^ a b "BLAKE2 official implementations". GitHub. Retrieved 7 July 2019.
  6. ^ Aumasson, Jean-Philippe; Neves, Samuel; Wilcox-O’Hearn, Zooko; Winnerlein, Christian (2013). "BLAKE2: simpler, smaller, fast as MD5" (PDF). Cryptology ePrint Archive. IACR.
  7. ^ "BLAKE2X" (PDF).
  8. ^ Saarinen, M-J; Aumasson, J-P (November 2015). The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC). IETF. doi:10.17487/RFC7693. RFC 7693. Retrieved 4 December 2015.
  9. ^ "About Chef Habitat". docs.chef.io.
  10. ^ "coreutils/src/blake2/". github.com.
  11. ^ "librsync/src/blake2/". github.com.
  12. ^ "WhatsApp Security Whitepaper" (PDF).
  13. ^ "WinRAR archiver, a powerful tool to process RAR and ZIP files". rarsoft.com.
  14. ^ "rmlint — rmlint (2.8.0 Maidenly Moose) documentation". rmlint.readthedocs.io.
  15. ^ "WireGuard: Next Generation Kernel Network Tunnel" (PDF).
  16. ^ "work". docs.nano.org.
  17. ^ "signatures". docs.nano.org.
  18. ^ "key derivation". docs.nano.org.
  19. ^ "Autolykos: The Ergo Platform PoW Puzzle" (PDF). ergoplatform.org.
  20. ^ "Linux 5.17 Random Number Generator Seeing Speed-Ups, Switching From SHA1 To BLAKE2s". www.phoronix.com.
  21. ^ "BLAKE3 – one function, fast everywhere" (PDF). GitHub.
  22. ^ "An earlier version of Bao specified its own custom tree mode, which eventually grew into BLAKE3". GitHub.
  23. ^ "JPA and I announced BLAKE3 at the RWC lightning talks..." Hacker News.
  24. ^ a b "BLAKE3 official implementations". GitHub. Retrieved 12 January 2020.
  25. ^ "This work is released into the public domain with CC0 1.0. Alternatively, it is licensed under the Apache License 2.0". GitHub.
  26. ^ Aumasson, Jean-Philippe (2020). Too Much Crypto (PDF). Real World Crypto Symposium.

외부 링크