いくつかのSHA1実装の比較
岸本 誠
CAUTION
●
SHA1
●
暗号学的ハッシュ関数たるべく設計された
●
ハッシュアルゴリズム
●
SHA1は既に非推奨です
●
disclaimerは以下略
最初のきっかけ
というわけで元の話は
●
ハードウェアをパイプライン化してスループッ
トを改善した話
●
Verilog HDL でゲートレベルぐらいで記述して
FPGAにマッピングして追試を考えた
●
(まだやっていない)
性能を上げてうれしいのか?
●
スループット
●
ファイルをディスクから読み出してるとかであれ
ば、間違いなくボトルネックはそっち
●
とはいえ、高速な通信だとかで、それがボトルネッ
クなら改善する意味がある、というかしなければ
●
レイテンシ
●
ストリームが終わった瞬間の何秒後に答えが出るか
●
一応性能を上げれば上げただけ改善するけど
●
特にうれしいことはあるだろうか?
ソフトウェア実装
●
ハードウェア実装の論理を理解確認するため
●
RTレベル実装の結果の照合のため
●
検索していたらIntelのサイトの、
Improving the Performance of the Secure
Hash Algorithm (SHA-1)
という解説に遭遇
●
https://software.intel.com/en-
us/articles/improving-the-performance-of-
the-secure-hash-algorithm-1
Intelの記事
ところでSHAについて
『クラウドを支えるこれからの暗号技術』より
●
Merkle–Damgård (MD4のMD...ではない?)
●
f を圧縮関数と呼ぶ(縮退?)
●
(ただしSHA3(Keccak)はこれと異なり、
もっと大きい内部状態を持つ(スポンジ))
圧縮関数の詳細
●
(ウィキペディアを参照)
実装方法を考える
●
ループを全く展開せずコード量最小を狙う
●
ループを全部展開する
●
前者はとりあえず不利そう
●
ハードウェアでは、常に共通の動作で動き続け
るモジュールと、タイミングを合わせてレジス
タを書き換えるモジュール、というように最適
化できる(かも)
以下の3種類を比較
●
ほどほどに展開した C コード
●
完全に展開した C コード(スクリプト生成)
●
Intelサイトにあった、SSEで最適化したコード
●
ハードウェアと環境
●
自宅のデスクサイドPC(FreeBSD)
– AMD Phenom Ⅱ X4 905e
●
SSSE3非対応
●
このMacBook(OS X)
●
どちらも LLVM clang と NASM を使用
コード解説
●
(コードを参照)
測定方法
●
RDTSC で関数に入ってから出るまでを測定
●
/dev/urandom を STDIN からブロックサイズ
毎で read
●
20万回のうち、後半10万回ぶん(headとtail
で抽出)
●
不自然に大きいカウントは次のチャートからは
排除
デスクサイド機
MacBook
測定結果について
●
ともあれ Intel の中の人が書いた SSE 最適化
コードはやっぱり速い
●
とはいえ2倍前後の違い
●
キャッシュが暖まる? 前と後で微妙に傾向が
違うような感じもあった (ループのほうが速い)
残りのテーマ
●
元のテーマであるハードウェア
●
SHA2 512 にまで拡張できるか?
●
Intel の SSE のコードは実はギリギリ
●
AVX?
●
SHA3 はどうか?
●
内部状態は1600ビット
●
あれ、あまりたいしたことない?
(空白ページ)
●
SlideShare対策の空白ページ

some SHA1 implementation