| 安全なハッシュアルゴリズム | |
|---|---|
| 概念 | |
| ハッシュ関数、SHA、DSA | |
| 主な基準 | |
| SHA-0、SHA-1、SHA-2、SHA-3 | |
| 一般的な | |
|---|---|
| デザイナー | 国家安全保障局 |
| 初版 | 1993年(SHA-0)、1995年(SHA-1) |
| シリーズ | ( SHA-0 )、SHA-1、SHA-2、SHA-3 |
| 認証 | FIPS PUB 180-4、CRYPTREC(監視付き) |
| 暗号の詳細 | |
| ダイジェストサイズ | 160ビット |
| ブロックサイズ | 512ビット |
| 構造 | メルクル・ダムガルド建設 |
| ラウンド | 80 |
| 最高の公開暗号解読 | |
| 2011年にマーク・スティーブンスが行った攻撃では、2の60.3乗から2の65.3乗の演算量の間のハッシュ衝突が発生する可能性があります。[ 1 ]初めて公開された衝突は2017年2月23日に発表されました。[ 2 ] SHA-1は長さ拡張攻撃を受けやすい傾向があります。 | |
暗号学において、SHA-1(セキュアハッシュアルゴリズム1)は、入力を受け取り、160ビット(20バイト)のハッシュ値(メッセージダイジェストと呼ばれる)を生成するハッシュ関数です。これは通常、40桁の16進数で表されます。これは米国国家安全保障局によって設計され、米国連邦情報処理標準( FIPS)です。[ 3 ]このアルゴリズムは暗号的に解読されていますが[ 4 ] [ 5] [6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] 、現在でも広く使用されています。
2005年以来、SHA-1は資金力のある敵に対して安全であるとは考えられておらず、[ 11 ] 2010年の時点で多くの組織がSHA-1の置き換えを推奨しています。[ 12 ] [ 10 ] [ 13 ] NISTは2011年に正式にSHA-1の使用を非推奨とし、2013年にはデジタル署名での使用を禁止し、2030年までに段階的に廃止すると宣言しました。 [ 14 ] 2020年の時点で、 SHA-1に対する選択プレフィックス攻撃は実用的です。[ 6 ] [ 8 ]そのため、できるだけ早く製品からSHA-1を削除し、代わりにSHA-2またはSHA-3を使用することをお勧めします。デジタル署名にSHA-1が使用されている場合は、SHA-1の置き換えが急務です。
すべての主要なウェブブラウザベンダーは、2017年にSHA-1 SSL証明書の受け入れを停止しました。 [ 15 ] [ 9 ] [ 4 ] 2017年2月、CWIアムステルダムとGoogleは、SHA-1に対する衝突攻撃を実行し、同じSHA-1ハッシュを生成する2つの異なるPDFファイルを公開したと発表しました。[ 16 ] [ 2 ]しかし、SHA-1はHMACに対して依然として安全です。[ 17 ]
マイクロソフトは2020年8月3日にWindows UpdateのSHA-1コード署名サポートを終了しました。 [ 18 ]これにより、 Windows 2000からVistaまで、およびWindows 2000 ServerからServer 2003までのWindows Serverバージョンなど、SHA-2に更新されていないWindowsのバージョンの更新サーバーも事実上終了しました。

2 32を法とする加算を表します。SHA-1 は、MITのRonald L. RivestがMD2、MD4、およびMD5メッセージ ダイジェスト アルゴリズムの設計で使用した原理と同様の原理に基づいてメッセージ ダイジェストを生成しますが、より大きなハッシュ値 (128 ビットに対して 160 ビット) を生成します。
SHA-1は米国政府のキャップストーンプロジェクトの一環として開発された。[ 19 ]アルゴリズムのオリジナル仕様は1993年に米国政府標準化機関NIST(国立標準技術研究所)によりセキュアハッシュ標準、FIPS PUB 180というタイトルで公開された。 [ 20 ] [ 21 ]このバージョンは現在ではSHA-0と呼ばれることが多い。公開後まもなくNSAによって撤回され、1995年にFIPS PUB 180-1で公開され、一般的にSHA-1と呼ばれる改訂版に置き換えられた。SHA-1とSHA-0の違いは、圧縮機能のメッセージスケジュールにおけるビット単位の回転が1つだけである。NSAによると、これは暗号のセキュリティを低下させるオリジナルアルゴリズムの欠陥を修正するために行われたが、それ以上の説明は提供されていない。[ 22 ] [ 23 ]公開されている技術では、2017年のSHA-1よりも前に、2004年にSHA-0の侵害が実証されています(「攻撃」の項を参照)。
SHA-1は、 TLS、SSL、PGP、SSH、S/MIME、IPsecなど、広く使用されているセキュリティアプリケーションやプロトコルの一部です。これらのアプリケーションはMD5も使用できます。MD5とSHA-1はどちらもMD4から派生したものです。
SHA-1とSHA-2は、機密扱いではない機密情報の保護を目的として、米国政府の特定のアプリケーション(他の暗号化アルゴリズムやプロトコル内での使用を含む)での使用が法律で義務付けられているハッシュアルゴリズムです。FIPS PUB 180-1も、民間および商業組織によるSHA-1の採用と使用を推奨しています。SHA-1はほとんどの政府機関での使用から廃止されつつあります。米国国立標準技術研究所(NIST)は、「連邦政府機関は、衝突耐性を必要とするアプリケーションでのSHA-1の使用を可能な限り速やかに中止し、 2010年以降はこれらのアプリケーションにSHA-2ファミリーのハッシュ関数を使用しなければならない」と述べています[ 24 ]。ただし、この規定は後に緩和され、古いデジタル署名やタイムスタンプの検証にはSHA-1が使用できるようになりました[ 24 ] 。
セキュア ハッシュ アルゴリズムが公開された主な動機は、それが組み込まれた デジタル署名標準でした。
SHA ハッシュ関数は、 SHACALブロック暗号の基礎として使用されています。
Git、Mercurial、Monotoneなどのリビジョン管理システムは、セキュリティのためではなく、リビジョンを識別し、偶発的な破損によってデータが変更されていないことを確認するためにSHA-1を使用しています。Linus Torvaldsは2007年にGitについて次のように述べています。
しかし、Gitはセキュリティ機能としてSHA-1の2番目のプリイメージ耐性を必要としません。衝突が発生した場合に常にオブジェクトの最も古いバージョンを保持することを優先し、攻撃者が密かにファイルを上書きするのを防ぐためです。 [ 26 ]既知の攻撃(2020年現在)では、2番目のプリイメージ耐性も破られません。[ 27 ]
Lがメッセージ ダイジェストのビット数であるハッシュ関数の場合、与えられたメッセージ ダイジェストに対応するメッセージを見つけることは、約 2 L回の評価でブルート フォース検索を使用して常に実行できます。これは原像攻撃と呼ばれ、 Lと特定のコンピューティング環境によって実用的かどうかが変わります。ただし、同じメッセージ ダイジェストを生成する 2 つの異なるメッセージを見つけることで構成される衝突では、誕生日攻撃を使用して平均で約1.2 × 2 L /2 回の評価のみが必要です。したがって、ハッシュ関数の強度は通常、メッセージ ダイジェストの長さの半分の対称暗号と比較されます。160 ビットのメッセージ ダイジェストを持つ SHA-1 は、当初 80 ビットの強度を持つと考えられていました。
パスワード保存など、暗号ハッシュを使用するアプリケーションの中には、衝突攻撃の影響が最小限に抑えられるものもあります。特定のアカウントで有効なパスワードを作成するには、原像攻撃に加え、元のパスワードのハッシュへのアクセスが必要ですが、これは容易な場合もあればそうでない場合もあります。パスワードの暗号化を解除すること(例えば、他のユーザーのアカウントで試すためのパスワードを取得すること)は、これらの攻撃では不可能です。しかし、安全なパスワードハッシュであっても、脆弱なパスワードに対するブルートフォース攻撃を防ぐことはできません。パスワードクラッキングを参照してください 。
文書署名の場合、攻撃者は既存の文書から署名を偽造するだけでは不十分です。攻撃者は、無害な文書と有害な文書のペアを作成し、秘密鍵の所有者に無害な文書に署名させる必要があります。これは実際に可能な状況があり、2008年末までは、MD5衝突を利用して偽造SSL証明書を作成することができました。[ 28 ]
アルゴリズムのブロックと反復構造および追加の最終ステップの欠如により、すべてのSHA関数(SHA-3を除く)[ 29 ]は、長さ拡張攻撃と部分メッセージ衝突攻撃に対して脆弱です。 [ 30 ]これらの攻撃により、攻撃者はメッセージを拡張し、キーを知らなくてもハッシュを再計算することにより、キー付きハッシュ(SHA( key || message )、ただしSHA( message || key )では署名されない)のみで署名されたメッセージを偽造できます。これらの攻撃を防ぐための簡単な改善方法は、ハッシュを2回行うことです。SHA d ( message ) = SHA (SHA( 0b || message )) ( 0b 、つまりゼロブロックの長さは、ハッシュ関数のブロックサイズに等しいです)。
CRYPTO 98では、フランスの研究者フロラン・シャボーとアントワーヌ・ジュがSHA-0への攻撃を発表しました。衝突は複雑度2の61倍で発見され、同じサイズの理想的なハッシュ関数の2の80倍よりも少ないことがわかりました。[ 31 ]
2004年、ビハムとチェンはSHA-0においてニアコリジョン(ほぼ同一のハッシュ値を持つ2つのメッセージ)を発見しました。この場合、160ビットのうち142ビットが等しくなります。また、SHA-0における完全コリジョンは80ラウンドのうち62ラウンドに減少しました。[ 32 ]
その後、2004年8月12日、Joux、Carribault、Lemuet、Jalbyによって、SHA-0アルゴリズム全体の衝突が発表されました。これは、ChabaudとJouxの攻撃の一般化を用いて行われました。衝突の発見には2の51乗の計算量が必要で、 256個のItanium 2プロセッサを搭載したスーパーコンピュータで約8万プロセッサ時間(コンピュータの13日間のフルタイム使用に相当)を要しました。
2004年8月17日、CRYPTO 2004のランプセッションにおいて、Wang、Feng、Lai、Yuらは、MD5、SHA-0、その他のハッシュ関数に対する攻撃に関する予備的な結果を発表しました。SHA-0に対する彼らの攻撃の複雑度は2の40乗であり、Jouxらによる攻撃よりも大幅に優れていました[ 33 ] [ 34 ] 。
2005年2月、 Xiaoyun Wang、Yiqun Lisa Yin、Hongbo Yuによる攻撃が発表され、 239回の演算でSHA-0の衝突を発見することができた。[ 5 ] [ 35 ]
2008年にブーメラン攻撃を適用した別の攻撃では、衝突を見つける複雑さが2の33.6乗にまで低下し、2008年の平均的なPCでは1時間かかると推定されました。[ 36 ]
SHA-0の結果を踏まえ、一部の専門家は、新しい暗号システムにおけるSHA-1の使用計画を再検討すべきだと示唆した。CRYPTO 2004の結果が発表された後、NISTは2010年までにSHA-1の使用を段階的に廃止し、SHA-2の派生型を採用する計画を発表した。[ 37 ]
2005年初頭、ヴィンセント・ライメンとエリザベス・オズワルドは、 SHA-1の縮小版(80ラウンドのうち53ラウンド)に対する攻撃法を発表しました。この攻撃法では、 280回以下の計算量で衝突を検出します。[ 38 ]
2005年2月、 Xiaoyun Wang、Yiqun Lisa Yin、Hongbo Yuによる攻撃が発表されました。 [ 5 ]この攻撃は、SHA-1のフルバージョンで衝突を見つけることができ、必要な操作は2の69乗未満です。(ブルートフォース検索では2の80乗の操作が必要です。)
著者らは次のように述べている。「特に、我々の分析は、SHA-0に対するオリジナルの差分攻撃、SHA-0に対するニアコリジョン攻撃、マルチブロックコリジョン技術、そしてMD5に対するコリジョンサーチ攻撃で使用されたメッセージ変更技術に基づいている。これらの強力な分析技術なしには、SHA-1の解読は不可能であっただろう。」[ 39 ]著者らは、2 33回のハッシュ演算で発見された58ラウンドのSHA-1の衝突を発表した。攻撃の全容を説明した論文は、2005年8月のCRYPTOカンファレンスで発表された。
インタビューの中で、Yin氏は「大まかに言うと、私たちは次の2つの弱点を悪用しています。1つはファイルの前処理手順が十分に複雑ではないこと、もう1つは最初の20ラウンドの特定の数学演算に予期しないセキュリティ上の問題があることです。」と述べています。[ 40 ]
2005年8月17日、 CRYPTO 2005 Rumpセッションにおいて、Xiaoyun Wang、Andrew Yao、Frances YaoらによりSHA-1攻撃の改良が発表され、SHA-1における衝突検出に必要な複雑度が2の63乗にまで低下した。[ 7 ] 2007年12月18日、この結果の詳細はMartin Cochranによって説明され、検証された。[ 41 ]
Christophe De CannièreとChristian Rechbergerは「Finding SHA-1 Characteristics: General Results and Applications」 [ 42 ]でSHA-1への攻撃をさらに改良し、ASIACRYPT 2006でBest Paper Awardを受賞した。64ラウンドのSHA-1で2ブロックの衝突が発見され、最適化されていない手法で2の35回の圧縮関数評価を行った。この攻撃には約2の35回の評価に相当するものが必要であるため、理論的に大きな飛躍が見られた。[ 43 ]彼らの攻撃は、2010年にGrechnikovによってさらに73ラウンド(80ラウンド中)に拡張された。[ 44 ]しかし、ハッシュ関数の全80ラウンドで実際の衝突を見つけるには、膨大な量の計算時間が必要となる。この目的のため、グラーツ工科大学の主催により、ボランティアコンピューティングプラットフォームBOINCを使用したSHA-1の衝突探索が2007年8月8日に開始された。この取り組みは進展がなかったため2009年5月12日に中止された。[ 45 ]
CRYPTO 2006のランプセッションで、クリスチャン・レッヒベルガーとクリストフ・ドゥ・カニエールは、攻撃者がメッセージの少なくとも一部を選択できるSHA-1の衝突攻撃を発見したと主張した。[ 46 ] [ 47 ]
2008年、ステファン・マニュエルによる攻撃手法では、ハッシュ衝突の理論的複雑度は2の51乗から2の57乗と推定された。[ 48 ]しかし、後に彼は局所的な衝突経路が実際には独立していないことを発見し、最終的に最も効率的な衝突ベクトルとしてこの研究以前に知られていた衝突ベクトルを引用してその主張を撤回した。[ 49 ]
キャメロン・マクドナルド、フィリップ・ホークス、ヨゼフ・ピエプジクは、Eurocrypt 2009のランプセッションで、2.52の複雑度を主張するハッシュ衝突攻撃を発表しました。 [ 50 ]しかし、付随論文「複雑度O(2.52 )のSHA-1の差分パス」は、著者らの推定が誤っていたことが発覚したため撤回されました。[ 51 ]
SHA-1に対する攻撃の一つに、Marc Stevens氏による攻撃[ 52 ]があります。この攻撃では、クラウドサーバーからCPUパワーを借りてハッシュ値1つを解読するのに、推定コスト277万ドル(2012年)かかりました。[ 53 ] Stevens氏はこの攻撃をHashClashというプロジェクトで開発し、[ 54 ]差分パス攻撃を実装しました。2010年11月8日、彼はSHA-1の完全圧縮に対して、推定複雑度が2の57.5倍に相当する、完全に機能するニアコリジョン攻撃を成功させたと主張しました。彼はこの攻撃が複雑度が約2の61倍の完全衝突にまで拡張できると推定しました。
2015年10月8日、Marc Stevens、Pierre Karpman、Thomas Peyrinは、SHA-1の圧縮関数に対するフリースタート衝突攻撃を公開した。この攻撃は、わずか2.57回のSHA-1評価で済む。これは、攻撃者が初期内部状態を自由に選択できない完全なSHA-1ハッシュ関数への衝突には直結しないが、SHA-1のセキュリティに関する主張を揺るがすものである。特に、完全なSHA-1への攻撃が実証されたのはこれが初めてであり、これまでの攻撃はどれも実行コストが高すぎたため、作者たちは実行できなかった。作者たちは、SHA-1暗号解読におけるこの画期的な進歩を「SHAppening」と名付けた。[ 10 ]
この手法は、彼らの以前の研究に加え、JouxとPeyrinによる補助パス(ブーメラン)高速化手法と高性能GPUカードの使用に基づいている。衝突は、合計64枚のグラフィックカードを搭載した16ノードのクラスタで発見された。著者らは、EC2で2,000ドル分のGPU時間を購入することで同様の衝突を発見できると推定した。[ 10 ]
著者らは、SHA-1の完全な衝突を生成するのに十分なEC2 CPU/GPU時間をレンタルするコストは、本稿の発表時点で7万5千ドルから12万ドルと推定しており、これは国家情報機関はもちろんのこと、犯罪組織の予算内でも十分に賄える金額だと指摘した。そのため、著者らはSHA-1を可能な限り速やかに廃止することを推奨した。[ 10 ]
2017年2月23日、CWI(Centrum Wiskunde & Informatica)とGoogleはSHAttered攻撃を発表しました。この攻撃では、約2 63.1回のSHA-1評価で、同じSHA-1ハッシュを持つ2つの異なるPDFファイルを生成しました。この攻撃は、誕生日攻撃によるSHA-1衝突の総当たり攻撃(推定2 80回のSHA-1評価が必要)よりも約10万倍高速です。この攻撃には、「単一CPU計算の6,500年分、単一GPU計算の110年分に相当する処理能力」が必要でした。[ 2 ]
2019年4月24日、Gaëtan LeurentとThomas PeyrinによってEurocrypt 2019で発表された論文では、Davies–Meyerブロック暗号に基づくMerkle–Damgårdのようなダイジェスト関数における、これまで最善とされていた選択プレフィックス攻撃の強化について説明しました。これらの改善により、この手法では、約2 68 回のSHA-1評価で選択プレフィックスの衝突を検出できます。これは、以前の攻撃の2 77.1 回の評価(ただし、選択されたプレフィックスは使用されておらず、検出された衝突はほぼランダムであったため、ほとんどの標的型攻撃には実用的ではありませんでした) [ 1 ]よりも約550倍高速であり(また、悪意のあるコードや署名付き証明書内の偽造IDなど、プレフィックスを選択できるため、多くの標的型攻撃に使用可能です)、また、約10万ドルのクラウド処理を必要とする、リソースの豊富な攻撃者にとっては実用的であるほど高速です。この方法はMD5関数の選択プレフィックス衝突を見つけることもできますが、複雑度は2 46.3で、理論レベル(2 39 )では以前の最良の方法を超えませんが、潜在的には実用的なレベル(≤2 49)です。[ 55 ]この攻撃には500 GB以上のメモリが必要です。
2020年1月5日、著者らは「shambles」と呼ばれる改良された攻撃を公開した。[ 8 ]この論文では、複雑度2の63.4倍の選択プレフィックス衝突攻撃を実証しており、公開時点では生成された衝突ごとに45,000米ドルのコストがかかっていた。
FIPS承認済みのすべてのセキュリティ機能の実装は、米国国立標準技術研究所(NIST)と通信保安局(CSE)が共同で運営するCMVPプログラムを通じて公式に検証できます。非公式検証として、多数のテストベクトルを生成するパッケージがNISTのサイトからダウンロードできます。ただし、この検証は、特定のアプリケーションで法律で義務付けられている正式なCMVP検証に代わるものではありません。
2013 年 12 月現在、SHA-1 の検証済みの実装は 2,000 を超えており、そのうち 14 はビット長が 8 の倍数ではないメッセージを処理できます ( Wayback Machineの 2011-08-23アーカイブされたSHS 検証リスト を参照)。
これらは、 16 進数およびBase64バイナリからASCIIテキストへのエンコードでのSHA-1メッセージ ダイジェストの例です。
SHA1("The quick brown fox jumps over the lazy dog")メッセージに小さな変更を加えるだけでも、雪崩効果により、圧倒的な確率で多くのビットが変化します。例えば、dogを に変更するとcog、160ビットのうち81ビットの値が異なるハッシュが生成されます。
SHA1("The quick brown fox jumps over the lazy cog")長さゼロの文字列のハッシュは次のとおりです。
SHA1("")SHA-1 アルゴリズムの 疑似コードは次のとおりです。
注1:すべての変数は符号なし32ビット値であり、計算時には2 32を法としてラップされます。ただし、メッセージ長ml(64ビット値)とメッセージダイジェストhh(160ビット値)は除きます。注2:この擬似コード内のすべての定数はビッグエンディアンです。各ワード内では、最上位バイトは左端のバイト位置に格納されます。変数を初期化します。 h0 = 0x67452301 h1 = 0xEFCDAB89 h2 = 0x98BADCFE h3 = 0x10325476 h4 = 0xC3D2E1F0 ml = ビット単位のメッセージの長さ (常に文字のビット数の倍数)。 前処理: メッセージの長さが 8 ビットの倍数の場合は 0x80 を追加するなど、メッセージにビット '1' を追加します。 0 ≤ k < 512 ビットに '0' を追加し、結果として得られるメッセージ長(ビット) は-64 ≡ 448 (mod 512) と一致する。 元のメッセージの長さ(ビット単位)ml を 64 ビットのビッグエンディアン整数として追加します。 したがって、合計の長さは 512 ビットの倍数になります。 メッセージを 512 ビットのチャンクで連続して処理します。 メッセージを512ビットのチャンクに分割する 各チャンクごとに チャンクを16個の32ビットビッグエンディアンワードw[i]に分割する(0 ≤ i ≤ 15) メッセージスケジュール: 16個の32ビットワードを80個の32ビットワードに拡張します。i は16から79まで です。注3: SHA-0は、この左回転がない点で異なります。w [i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) leftrotate 1 このチャンクのハッシュ値を初期化します。 a = h0 b = h1 c = h2 d = h3 e = h4 メインループ: [ 3 ] [ 56 ] iが0から79 の場合、 0 ≤ i ≤ 19の場合、f = (bかつc)または(( b以外)かつd) k = 0x5A827999 そうでなければ20≤i≤39の場合 f = b xor c xor d k = 0x6ED9EBA1 そうでなければ40≤i≤59の場合 f = (bとc)または(bとd)または(cとd) k = 0x8F1BBCDC そうでなければ60≤i≤79の場合 f = b xor c xor d k = 0xCA62C1D6 temp = (a左回転5) + f + e + k + w[i] e = d d = c c = b左回転30 b = a a = 温度 このチャンクのハッシュをこれまでの結果に追加します。 h0 = h0 + a h1 = h1 + b h2 = h2 + c h3 = h3 + d h4 = h4 + e 最終的なハッシュ値(ビッグエンディアン)を160ビットの数値として生成します。hh = (h0左シフト128)または(h1左シフト96)または(h2左シフト64)または(h3左シフト32)またはh4
数字hhはメッセージ ダイジェストであり、16 進数 (基数 16) で表記できます。
アルゴリズムで使用される選択された定数値は、何も隠されていない数値であると想定されました。
k2 30倍です。しかし、これらは0ビットと1ビットの比率が均衡した最も近い奇数に丸められるべきところを、誤って最も近い整数に丸められていました。また、素数ではない10の平方根を選択したことで、2と5の他の2つの素数の平方根と共通の因数となり、連続するラウンドで算術特性が利用できる可能性があり、一部のビットの衝突検出に対するアルゴリズムの強度が低下しました。h0から までの最初の4つの初期値はh3MD5アルゴリズムと同じであり、5番目の値( の場合h4)も同様です。しかし、最初の数ラウンドの反転によるビット衝突の可能性の推測(マルチブロック差分攻撃に利用可能)に対する耐性については適切に検証されていません。示されている元の FIPS PUB 180-1 の定式化の代わりに、次の同等の式を使用してf上記のメイン ループで計算することもできます。
cとdの間のビット単位の選択。 bによって制御されます。 (0 ≤ i ≤ 19): f = d xor (b and (c xor d)) (選択肢 1) (0 ≤ i ≤ 19): f = (b and c)または(( not b) and d) (選択肢 2) (0 ≤ i ≤ 19): f = (b and c) xor (( not b) and d) (選択肢 3) (0 ≤ i ≤ 19): f = vec_sel(d, c, b) (選択肢 4) [プレモ08] ビット単位の多数決関数。 (40 ≤ i ≤ 59): f = (bおよびc)または(dおよび(bまたはc)) (選択肢 1) (40 ≤ i ≤ 59): f = (bおよびc)または(dおよび(b xor c)) (選択肢 2) (40 ≤ i ≤ 59): f = (bおよびc) xor (dおよび(b xor c)) (選択肢 3) (40 ≤ i ≤ 59): f = (bおよびc) xor (bおよびd) xor (cおよびd) (選択肢 4) (40 ≤ i ≤ 59): f = vec_sel(c, b, c xor d) (選択肢 5)
また、第32~79ラウンドについては、以下の計算が行われたことも 示されました[ 57 ] 。
w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16])左回転1
次のように置き換えることができます。
w[i] = (w[i-6] xor w[i-16] xor w[i-28] xor w[i-32])左回転2
この変換により、すべてのオペランドが 64 ビットに揃えられ、 の依存関係がなくなることでw[i]、x86 SSEw[i-3]命令のようなベクトル長 4 の効率的な SIMD 実装が可能になります。
以下の表では、内部状態は、データ ブロックの各圧縮後の「内部ハッシュ サム」を意味します。
| アルゴリズムと変種 | 出力サイズ(ビット) | 内部状態サイズ(ビット) | ブロックサイズ(ビット) | ラウンド | オペレーション | セキュリティ(ビット) | Skylakeでのパフォーマンス(中央値cpb)[ 58 ] | 初版 | ||
|---|---|---|---|---|---|---|---|---|---|---|
| 長いメッセージ | 8バイト | |||||||||
| MD5(参考) | 128 | 128 (4 × 32) | 512 | 4 (各ラウンドで 16回の演算) | And、Xor、Or、Rot、Add(mod 2 32) | ≤ 18 (衝突が見つかった)[ 59 ] | 4.99 | 55.00 | 1992 | |
| SHA-0 | 160 | 160 (5 × 32) | 512 | 80 | And、Xor、Or、Rot、Add(mod 2 32) | < 34 (衝突が見つかりました) | ≈ SHA-1 | ≈ SHA-1 | 1993 | |
| SHA-1 | < 63 (衝突が見つかりました) [ 60 ] | 3.47 | 52.00 | 1995 | ||||||
| SHA-2 | SHA-224 SHA-256 | 224 256 | 256 (8 × 32) | 512 | 64 | And、Xor、Or、Rot、Shr、Add (mod 2 32 ) | 112 128 | 7.62 7.63 | 84.50 85.25 | 2004 2001 |
| SHA-384 | 384 | 512 (8 × 64) | 1024 | 80 | And、Xor、Or、Rot、Shr、Add (mod 2 64 ) | 192 | 5.12 | 135.75 | 2001 | |
| SHA-512 | 512 | 256 | 5.06 | 135.50 | 2001 | |||||
| SHA-512/224 SHA-512/256 | 224 256 | 112 128 | ≈ SHA-384 | ≈ SHA-384 | 2012 | |||||
| SHA-3 | SHA3-224 SHA3-256 SHA3-384 SHA3-512 | 224 256 384 512 | 1600 (5×5×64) | 1152 1088 832 576 | 24 [ 61 ] | そして、Xor、Rot、Not | 112 128 192 256 | 8.12 8.59 11.06 15.88 | 154.25 155.50 164.00 164.00 | 2015 |
| シェイク128シェイク256 | d(任意)d(任意) | 1344 1088 | 分( d /2, 128)分( d /2, 256) | 7.08 8.59 | 155.25 155.50 | |||||
以下は SHA-1 をサポートする暗号化ライブラリのリストです。
ハードウェア アクセラレーションは、次のプロセッサ拡張機能によって提供されます。
SHAtteredの発表を受けて、Marc StevensとDan Shumowは「sha1collisiondetection」(SHA-1CD)を公開しました。これはSHA-1の派生版で、衝突攻撃を検出し、検出時にハッシュ出力を変更します。誤検出率は2 -90です。[ 63 ] SHA-1CDは、 GitHubでは2017年3月から、gitでは2017年5月のバージョン2.13.0から使用されています。[ 64 ]
-1やSHA-2とは異なり、Keccakには長さ拡張の弱点がないため、HMACネスト構造は必要ありません。その代わりに、メッセージの先頭に鍵を追加するだけでMAC計算を実行できます。