BLAKE

BLAKE



BLAKEは、Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phanによって設計され、[アメリカ国立標準技術研究所]のSHA-3コンテストに提案された暗号学的ハッシュ関数です。ダニエル・バーンスタインが設計したストリーム暗号であるChaChaをベースにしており、ChaChaのラウンドの前に、ラウンド定数との排他的論理和を取った入力ブロックの置換コピーが加えられています。BLAKEはSHA-3コンテストにおいて最終候補5つのうちの1つに残りました。

バリエーション



SHA-2と同様に、BLAKEには4つのバリエーションがあります。

BLAKE-256: 32ビットのワード長を持ち、256ビットのハッシュを出力します。
BLAKE-224: BLAKE-256を切り詰めて224ビットの出力を生成します。
BLAKE-512: 64ビットのワード長を持ち、512ビットのハッシュを出力します。
BLAKE-384: BLAKE-512を切り詰めて384ビットの出力を生成します。

アルゴリズム



ChaChaは4×4配列のワードを操作しますが、BLAKEでは16のメッセージワードと8ワードのハッシュ値を連結することで、ChaChaの出力を切り詰め、次のハッシュ値の計算に用います。

中核となる変換では、入力の16ワードと16の変数を組み合わせますが、ブロック間では8ワード(256または512ビット)しか保持されません。BLAKEでは、16の固定ワード(πの小数部分の先頭512または1024ビット)と、16要素間の置換テーブル10個を使用します。

これらの置換テーブルは以下の通りです。


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


BLAKE-224とBLAKE-256では、固定ワード `n` に以下の定数を使用します。


n = 0x243f6a88 0x85a308d3 0x13198a2e 0x03707344
0xa4093822 0x299f31d0 0x082efa98 0xec4e6c89
0x452821e6 0x38d01377 0xbe5466cf 0x34e90c6c
0xc0ac29b7 0xc97c50dd 0x3f84d5b5 0xb5470917


BLAKE-384とBLAKE-512では、固定ワード `n` に以下の定数を使用します。


n = 0x243f6a8885a308d3 0x13198a2e03707344 0xa4093822299f31d0 0x082efa98ec4e6c89
0x452821e638d01377 0xbe5466cf34e90c6c 0xc0ac29b7c97c50dd 0x3f84d5b5b5470917
0x9216d5d98979fb1b 0xd1310ba698dfb5ac 0x2ffd72dbd01adfb7 0xb8e1afed6a267e96
0xba7c9045f12c7f99 0x24a19947b3916cf7 0x0801f2e2858efc16 0x636920d871574e69


中核となる操作は、ChaChaの1/4ラウンドと同等で、4ワードのカラムまたは対角線上において、2つのメッセージワード `m[]` と2つの固定ワード `n[]` を結合します。1ラウンドごとに8回この操作が行われます。


j ← σ[r%10][2×i] // Index computations
k ← σ[r%10][2×i+1]
a ← a + b + (m[j] ⊕ n[k]) // Step 1 (with input)
d ← (d ⊕ a) >>> 16
c ← c + d // Step 2 (no input)
b ← (b ⊕ c) >>> 12
a ← a + b + (m[k] ⊕ n[j]) // Step 3 (with input)
d ← (d ⊕ a) >>> 8
c ← c + d // Step 4 (no input)
b ← (b ⊕ c) >>> 7


上記の計算は、32ビットバージョンのBLAKE-256とBLAKE-224のものです。`r` はラウンド数(0から13)、`i` は繰り返し回数(0から7)です。

この操作は、ChaChaの1/4ラウンド関数と比較して以下の点が異なります。

メッセージワードの和が追加された。
ローテートの方向が逆になった。

64ビットバージョンのBLAKE-512とBLAKE-384は、32ビットバージョンと同様ですが、ローテート量が32, 25, 16, 11に変更され、ラウンド数が14から16に増やされています。

修正



NISTによるコンペ期間中、発見された問題への対応として、アルゴリズムの修正が認められていました。BLAKEに加えられた修正は次の通りです。

ラウンド数が、BLAKE-256, -224では10から14に、BLAKE-512, -384では14から16に増加されました。これは、速度を維持したままセキュリティマージンを拡大するためです。

ハッシュ値の例




BLAKE-512("")
= A8CFBBD73726062DF0C6864DDA65DEFE58EF0CC52A5625090FA17601E1EECD1B628E94F396AE402A00ACC9EAB77B4D4C2E852AAAA25A636D80AF3FC7913EF5B8

BLAKE-512("The quick brown fox jumps over the lazy dog")
= 1F7E26F63B6AD25A0896FD978FD050A1766391D2FD0471A77AFB975E5034B7AD2D9CCF8DFB47ABBBE656E1B82FBC634BA42CE186E8DC5E1CE09A885D41F43451


BLAKE2



2012年12月21日、BLAKEの改良版としてBLAKE2が発表されました。BLAKE2は、Jean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O'Hearn、Christian Winnerleinによって設計され、実際的または理論的に破られたハッシュ関数であるMD5SHA-1の代替を目的としています。

バリエーション



BLAKE2b: 512ビットのハッシュを出力する64ビットバージョン。1から64バイト(512ビット)の間で任意の長さのハッシュを生成できます。
BLAKE2s: 256ビットのハッシュを出力する32ビットバージョン。1から32バイト(256ビット)の間で任意の長さのハッシュを生成できます。

さらに、マルチコアプロセッサでの並列処理を可能にした高速化バージョンとして、BLAKE2bpとBLAKE2spも存在します。

BLAKE2における変更点



BLAKE2では、BLAKEから以下の変更が加えられました。

BLAKEのラウンド関数にあった固定ワードのメッセージワードへの追加が削除されました。
2つのローテート量が変更されました。
パディングが簡素化されました。
初期化ベクトルとの排他的論理和を取ったパラメータブロックが追加されました。
ラウンド数が、14(BLAKE-256)または16(BLAKE-512)から、10(BLAKE2s)または12(BLAKE2b)に削減されました。

BLAKE2 ハッシュ値の例




BLAKE2b-512("")
= 786A02F742015903C6C6FD852552D272912F4740E15847618A86E217F71F5419D25E1031AFEE585313896444934EB04B903A685B1448B755D56F701AFE9BE2CE

BLAKE2b-512("The quick brown fox jumps over the lazy dog")
= A8ADD4BDDDFD93E4877D2746E62817B116364A1FA7BC148D95090BC7333B3673F82401CF7AA2E4CB1ECD90296E3F14CB5413F8ED77BE73045B13914CDCD6A918


BLAKE3



2021年7月25日、BLAKE3が発表されました。

BLAKE3は、以下の特徴を持っています。

MD5SHA-1、SHA-2、SHA-3、そしてBLAKE2よりも高速です。
MD5およびSHA-1よりも堅牢で、長さ拡張攻撃に対してSHA-2よりも堅牢です。
ハッシュ木を使用しているため、並列化やストリーミングデータ、差分更新されるデータのハッシュ計算が可能です。
通常のハッシュ以外にも、疑似乱数生成関数(PRF)、メッセージ認証コード(MAC)、[鍵導出関数]、可変長出力関数 (XOF)を利用可能です。
変種のない単一のアルゴリズムを提供し、x86-64や他のマイクロアーキテクチャで高速に動作します。

実装ライブラリ



BLAKEをサポートしているライブラリは次の通りです。

Botan
Bouncy Castle
Crypto++
Libgcrypt
libsodium
OpenSSL
LibreSSL
wolfSSL

外部リンク



The BLAKE web site
The BLAKE2 web site
The BLAKE3 web site
* VHDL source code developed by the Cryptographic Engineering Research Group (CERG) at George Mason University

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。