Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

Blake2b を swift で実装してみた

Blake2 というハッシュ関数があります。
MD5,SHA-1などといういわゆるハッシュ関数の仲間です。
特徴としては、MD5,SHA-1,SHA-2,SHA-3よりも計算が高速で、SHA-3と同程度のセキュリティ(衝突耐性など)があるようです。
MD5などとは異なり、seed(key)を指定できるようになっています。もちろん、keyなしでMD5のように使うことも可能です。

BLAKE2b は64bit環境、BLAKE2s は32bit以下の環境用のアルゴリズムとなっており、それぞれの環境ごとにアルゴリズムがわずかに異なります。
仕様はRFC7693として規定されており、
C言語によるリファレンス実装と最低限の単体テストコードが含まれています。

ハッシュ関数といえば、仮想通貨のProofOfWorkとして使われることもありますが、
Blake2が使われている仮想通貨としては、ZCASH,VERGE などがあります。
ZCASHのProofOfWorkはEquihashですが、Equihashは一部にBlake2を用いています。

Blake2は2013年の以下の論文で導入されました。
https://blake2.net/blake2.pdf

SHA-3としてNISTに採用されたKeccakですが、Blake2がSHA3として採用されなかった理由は2つあるようです。
一つはBlake2がSHA-2のアルゴリズムに似ているためです。
SHA-2に弱点が見つかった時のため、SHA-3は異なる構造の方が良いのです。 もう一つはASICという専用ハードウェアを使った場合にSHA-3の方が数倍高速であるためです。

こちらは、Blake2bのリファレンス実装をswiftに移植したものです。

github.com

参考: https://blake2.net/