BLAKE

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
BLAKE
一般
設計者 Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phan
後継 BLAKE2
認証 SHA-3最終候補
詳細
ダイジェスト長 224, 256, 384 or 512 bits
ラウンド数 14 or 16
速度 8.4 cpb on Core 2 for BLAKE-256; 7.8 cpb for BLAKE-512

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

SHA-2と同様に、BLAKEには4つのバリエーションが存在する。32ビットのワード長を持ち256ビットのハッシュを出力するBLAKE-256およびそれを切り詰め224ビットの出力としたBLAKE-224、64ビットのワード長を持ち512ビットのハッシュを出力するBLAKE-512およびそれを切り詰め384ビットの出力としたBLAKE-384の4つである。

アルゴリズム[編集]

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

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

j ← σ[r%10][2×i]            // Index computations
k ← σ[r%10][2×i+1]
a ← a + b + (m[j] ⊕ c[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] ⊕ c[j])   // Step 3 (with input)
d ← (d ⊕ a) >>> 8
c ← c + d                   // Step 4 (no input)
b ← (b ⊕ c) >>> 7

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

ChaChaの1/4ラウンドの関数とは以下の違いがある。

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

64ビットバージョン(ChaChaには存在しない)であるBLAKE-512, -384も32ビットバージョンであるBLAKE-256, -224と本質的には同じであるが、ローテートの量が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[編集]

BLAKE2
一般
設計者 Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn, Christian Winnerlein
派生元 BLAKE
詳細
ダイジェスト長 可変長
ラウンド数 10 or 12

2012年12月21日、BLAKEの改良版としてBLAKE2が発表された。これはJean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O'Hearn、Christian Winnerleinにより設計されたものであり、実際に破られた、あるいは理論的に破られたハッシュ関数であるMD5SHA-1の置き換えを目指したものである[1]。512ビットのハッシュを出力する64ビットバージョンであるBLAKE2b、256ビットのハッシュを出力する32ビットバージョンであるBLAKE2sの2つのバリエーションが存在する。BLAKE2bでは1から64バイト(512ビット)、BLAKE2sでは1から32バイト(256ビット)の間で任意の長さのハッシュを出力可能である。

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

脚注[編集]

外部リンク[編集]