ビットコイン・インスティテュート

MSVCビルドとSHA-256

2件のメッセージ BitcoinTalk サトシ・ナカモト, BlackEye 2010年7月18日 — 2010年7月25日

OpenSSLには、SHA256のブロックハッシュの低レベルな生の部分だけを行うインターフェースは無い。SHA256は、データを特定のフォーマットのバッファーで包むところから始まる。我々のように1~2ブロックしかハッシュしない場合、バッファーの準備は実際のハッシュ処理よりも一桁長い時間がかかる。これは数KB~数MBのデータをハッシュするケースで時間が均されるように想定されているからだ。BitcoinMinerでは、バッファーを一度フォーマットして使い回している。

もし我々のものより速いSHA256コード(MinGW/GCC環境)が見つかったら、本当にありがたい!(ただしライセンスには気をつけてほしい)我々が使っているのは試してみた唯一のものなので、改善の余地は十分にある。

これを書いた2年以上前は、SHA1の実装は猛烈に速いものが多数あったが、SHA256はあまり注目されていなかった。それから時間も経っているので、より良いものが出ている可能性は高い。当時の最速のSHA1と比べてSHA256はかなり遅く、私が思っていたほどの速度差で済むようなものではなかった。SHA256がSHA1より一定程度遅いのは当然だが、私が見たほどではないはずだ。

(スレッドの名前を変えてしまったが許してほしい。SHA-256の最適化は私がいつも忘れがちな重要事項なので)

BlackEye 2010年7月25日22:12 UTC

Crypto++ 5.6.0のSHA256機能をBitcoinに統合することができた。SSE2アセンブリコードを使った最速のSHA256だ。Bitcoinがブロックハッシュ関数にアライメントされていないデータを送っていたため、MOVDQA命令をMOVDQUに変更する必要があった。

現時点では、Crypto++ 5.6.0のSHA256機能を使うのが正しい方向だと思う。

http://www.filedropper.com/bitcoin-033