シャー‐ワン【SHA-1】
sha1
sha1 — 文字列の sha1 ハッシュを計算する
説明
string sha1 ( string str [, bool raw_output] )» US Secure Hash Algorithm 1 を使用して str の sha1 ハッシュを計算し、 そのハッシュ値を返します。ハッシュは 40 文字の 16 進数です。 オプションの raw_output に TRUE が 指定された場合、sha1 ダイジェストは 20 バイト長のバイナリ形式で 返されます。
注意: オプションの raw_output パラメータは PHP 5.0.0 で追加され、デフォルトは FALSE です。
例 2284. sha1() の例
<?php
$str = 'apple';
if (sha1($str) === 'd0be2dc421be4fcd0172e5afceea3970e2f3d940') {
echo "Would you like a green or red apple?";
exit;
}
?>
sha1_file()、 crc32() および md5() も参照ください。
SHA1 クラス
名前空間: System.Security.Cryptography
アセンブリ: mscorlib (mscorlib.dll 内)
構文

ハッシュは、大量のデータを表す固定サイズの一意の値として使用されます。2 つのデータ セットのハッシュが一致するのは、対応するデータも一致する場合です。データを少し変更しただけでも、ハッシュは予測できないほど大幅に変更されてしまいます。

data の SHA1 ハッシュを計算し、result に格納する例を次に示します。この例では、定義済みの定数 DATA_SIZE があることを前提にしています。
Dim data(DATA_SIZE) As Byte Dim result() As Byte Dim sha As New SHA1CryptoServiceProvider() ' This is one implementation of the abstract class SHA1. result = sha.ComputeHash(data)
byte[] data = new byte[DATA_SIZE]; byte[] result; SHA1 sha = new SHA1CryptoServiceProvider(); // This is one implementation of the abstract class SHA1. result = sha.ComputeHash(data);

System.Security.Cryptography.HashAlgorithm
System.Security.Cryptography.SHA1
System.Security.Cryptography.SHA1CryptoServiceProvider
System.Security.Cryptography.SHA1Managed


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


SHA1 コンストラクタ
名前空間: System.Security.Cryptography
アセンブリ: mscorlib (mscorlib.dll 内)
構文


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


SHA1 フィールド
名前 | 説明 | |
---|---|---|
![]() | HashSizeValue | 計算されたハッシュ コードのサイズをビット単位で表します。 ( HashAlgorithm から継承されます。) |
![]() | HashValue | 計算されたハッシュ コードの値を表します。 ( HashAlgorithm から継承されます。) |
![]() | State | ハッシュ計算の状態を表します。 ( HashAlgorithm から継承されます。) |

SHA1 プロパティ
名前 | 説明 | |
---|---|---|
![]() | CanReuseTransform | 現在の変換を再利用できるかどうかを示す値を取得します。 ( HashAlgorithm から継承されます。) |
![]() | CanTransformMultipleBlocks | 派生クラスでオーバーライドされると、複数のブロックを変換できるかどうかを示す値を取得します。 ( HashAlgorithm から継承されます。) |
![]() | Hash | 計算されたハッシュ コードの値を取得します。 ( HashAlgorithm から継承されます。) |
![]() | HashSize | 計算されたハッシュ コードのサイズをビット単位で取得します。 ( HashAlgorithm から継承されます。) |
![]() | InputBlockSize | 派生クラスでオーバーライドされると、入力ブロック サイズを取得します。 ( HashAlgorithm から継承されます。) |
![]() | OutputBlockSize | 派生クラスでオーバーライドされると、出力ブロック サイズを取得します。 ( HashAlgorithm から継承されます。) |

SHA1 メソッド
名前 | 説明 | |
---|---|---|
![]() | Clear | HashAlgorithm クラスによって使用されているすべてのリソースを解放します。 ( HashAlgorithm から継承されます。) |
![]() | ComputeHash | オーバーロードされます。 入力データのハッシュ値を計算します。 ( HashAlgorithm から継承されます。) |
![]() | Create | オーバーロードされます。 この抽象クラスの特定の実装をインスタンス化できるようにします。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | Initialize | HashAlgorithm クラスの実装を初期化します。 ( HashAlgorithm から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
![]() | TransformBlock | 入力バイト配列の指定した領域のハッシュ値を計算し、結果ハッシュ値を出力バイト配列の指定した領域にコピーします。 ( HashAlgorithm から継承されます。) |
![]() | TransformFinalBlock | 指定したバイト配列の指定した領域のハッシュ値を計算します。 ( HashAlgorithm から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Dispose | HashAlgorithm によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。 ( HashAlgorithm から継承されます。) |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | HashCore | 派生クラスでオーバーライドされると、ハッシュを計算するために、オブジェクトに書き込まれたデータをハッシュ アルゴリズムにルーティングします。 ( HashAlgorithm から継承されます。) |
![]() | HashFinal | 派生クラスでオーバーライドされると、暗号ストリーム オブジェクトによって最後のデータが処理された後に、ハッシュ計算を終了します。 ( HashAlgorithm から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

SHA1 メンバ


名前 | 説明 | |
---|---|---|
![]() | HashSizeValue | 計算されたハッシュ コードのサイズをビット単位で表します。(HashAlgorithm から継承されます。) |
![]() | HashValue | 計算されたハッシュ コードの値を表します。(HashAlgorithm から継承されます。) |
![]() | State | ハッシュ計算の状態を表します。(HashAlgorithm から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | CanReuseTransform | 現在の変換を再利用できるかどうかを示す値を取得します。(HashAlgorithm から継承されます。) |
![]() | CanTransformMultipleBlocks | 派生クラスでオーバーライドされると、複数のブロックを変換できるかどうかを示す値を取得します。(HashAlgorithm から継承されます。) |
![]() | Hash | 計算されたハッシュ コードの値を取得します。(HashAlgorithm から継承されます。) |
![]() | HashSize | 計算されたハッシュ コードのサイズをビット単位で取得します。(HashAlgorithm から継承されます。) |
![]() | InputBlockSize | 派生クラスでオーバーライドされると、入力ブロック サイズを取得します。(HashAlgorithm から継承されます。) |
![]() | OutputBlockSize | 派生クラスでオーバーライドされると、出力ブロック サイズを取得します。(HashAlgorithm から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Clear | HashAlgorithm クラスによって使用されているすべてのリソースを解放します。 (HashAlgorithm から継承されます。) |
![]() | ComputeHash | オーバーロードされます。 入力データのハッシュ値を計算します。 (HashAlgorithm から継承されます。) |
![]() | Create | オーバーロードされます。 この抽象クラスの特定の実装をインスタンス化できるようにします。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | Initialize | HashAlgorithm クラスの実装を初期化します。 (HashAlgorithm から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
![]() | TransformBlock | 入力バイト配列の指定した領域のハッシュ値を計算し、結果ハッシュ値を出力バイト配列の指定した領域にコピーします。 (HashAlgorithm から継承されます。) |
![]() | TransformFinalBlock | 指定したバイト配列の指定した領域のハッシュ値を計算します。 (HashAlgorithm から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Dispose | HashAlgorithm によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。 (HashAlgorithm から継承されます。) |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | HashCore | 派生クラスでオーバーライドされると、ハッシュを計算するために、オブジェクトに書き込まれたデータをハッシュ アルゴリズムにルーティングします。 (HashAlgorithm から継承されます。) |
![]() | HashFinal | 派生クラスでオーバーライドされると、暗号ストリーム オブジェクトによって最後のデータが処理された後に、ハッシュ計算を終了します。 (HashAlgorithm から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

SHA-1
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/08/13 14:46 UTC 版)
一般 | |
---|---|
設計者 | アメリカ国家安全保障局 |
初版発行日 |
1993 (SHA-0), 1995 (SHA-1) |
シリーズ | (SHA-0), SHA-1, SHA-2, SHA-3 |
認証 | FIPS PUB 180-4, CRYPTREC(運用監視) |
詳細 | |
ダイジェスト長 | 160 bits |
構造 | Merkle-Damgård construction |
ラウンド数 | 80 |
最良の暗号解読法 | |
2011年にMarc Stevensによって261回の試行で理論上、強衝突耐性を突破[1][2]。 |
SHA-1(シャーワン[3][4])は、Secure Hash Algorithmシリーズの暗号学的ハッシュ関数で、SHAの最初のバージョンであるSHA-0の弱点を修正したものである。National Security Agency(NSA)によって設計され、National Institute of Standards and Technology(NIST)によってFederal Information Processing Standard(FIPS) PUB 180-4として標準化されている。NISTは2030年12月31日に仕様を廃止予定[5]。
概要
SHAシリーズ全体の俯瞰についてはSecure Hash Algorithmの記事を参照のこと。
SHA-1は、160ビット(20バイト)のハッシュ値を生成する。SHA-1はSHA-0にきわめて類似しており、SHA-0において脆弱性の原因となっていた仕様のエラーを修正したものがSHA-1であるため、SHA-0は基本的に全く用いられない。
廃止
以前は、SHA-1はSHAシリーズの中で最も広く用いられていたものであり、多くのアプリケーションやプロトコルに採用されていたが、2017年2月には衝突攻撃(強衝突耐性の突破)の成功が現実に示されている。そのため、下記の通りセキュリティの懸念から利用が控えられつつある状況にある。
2005年、SHA-1に対する攻撃法が発見され、将来的な利用に十分な安全性を有していないことが示唆された[6]。NISTは、合衆国の政府組織に対して、2010年までにSHA-1からSHA-2へ移行するよう要請した[7]。SHA-2に対する有効な攻撃法はいまだ報告されていないが、その構造はSHA-1に類似したものである。2012年、公募を経て、KeccakがSHA-3として選定された[7]。2013年11月にはマイクロソフトが、2017年までにMicrosoft WindowsのTLS/SSLにおいてSHA-1を利用した証明書を受け入れないようにすることを表明した[8]。2014年9月にはGoogleも2017年までにGoogle ChromeにおいてSHA-1による証明書を受け入れないようにすることを表明した[9]。Mozillaでも同様に2017年までにSHA-1による証明書を受け入れないようにすることを検討している[10][11][12]。
日本においても、CRYPTRECが2003年の初版では推奨リストに掲載されていたSHA-1を2013年の改訂において互換性維持のための利用に限定した運用監視リストに移行し[13]、総務省および法務省では、政府認証基盤および電子認証登記所(商業登記認証局)においてSHA-1を用いた電子証明書の検証を2015年度まで(特別の事情がある場合は2019年度まで)に終了することとしている[14]。 これらを受けて、SHA-1を使っているウェブサイトはSHA-2への移行が予定されており、SHA-2に対応できないソフトや機器によるアクセスは不能になる[15]。特に2009年以前の携帯電話機は一部を除き内蔵ソフト更新が行われないため、ハードウェアの買い替えを余儀なくされる[16][17][18]。
NISTは2030年12月31日に仕様を廃止する予定で、それ以降は米国政府はSHA-1を使用している商品を購入しない予定[5]。
SHA-1 ハッシュ関数

A, B, C, D, E:32ビットの状態ワード
F:非線形関数

n:操作ごとに変化
Wt:ラウンドtにおける拡張メッセージワード
Kt:ラウンドtにおける定数

SHA-1は、マサチューセッツ工科大学のロナルド・リベストがMD4やMD5の設計で用いたものと同様の原理に基づいているが、より保守的な設計となっている。
オリジナルの仕様は、1993年にNISTによってFIPS 180 "Secure Hash Standard" として発表された。このバージョンは現在ではしばしば SHA-0 と呼ばれる。このバージョンは発表からしばらくしてNSAによって撤回され、1995年に改訂版がFIPS PUB 180-1として発表された。これがSHA-1と呼ばれるものであり、SHA-0とは圧縮関数におけるビット演算のローテートが1つ異なるのみである。NSAによれば、これによってSHA-0においてセキュリティを低下させていたフローが修正されたとしているが、NSAはそれ以上の説明や証拠の提示を行わなかった。その後も、SHA-0、SHA-1の双方についてセキュリティ脆弱性の報告がなされている。
用途
暗号
SHA-1は暗号に関する多くのアプリケーションやプロトコルに用いられている。例としては、TLS/SSL、OpenPGP、SSH、S/MIME、IPsecなどが挙げられる。これらではMD5もよく用いられる(SHA-1とMD5はともにMD4の後継である)。
SHA-1とSHA-2は、アメリカ合衆国において機密情報を扱う際に法律によって要求されるハッシュアルゴリズムの一つである。FIPS 180-1では、SHA-1を私的にあるいは商業で用いることも推奨している。SHA-1は合衆国政府での利用はほぼ終了しており、NISTでは「連邦組織は、電子署名、タイムスタンプ、衝突への耐性を必要とするアプリケーションでのSHA-1の利用を可及的速やかに中止すべきである。2010年以降はSHA-2を利用すべきである」としている[19]。
SHA制定の重要な動機はDigital Signature Standardであった。DSAの仕様には、SHA-1を利用する過程が含まれている。
SHAハッシュ関数はブロック暗号であるSHACALの基礎となっている。
データ完全性
SHA-1ハッシュはGit、Mercurial、Monotoneといった分散型バージョン管理システムにおいても、バージョンの管理やデータの破損、改竄の検出に用いられている。任天堂のWiiにおいては、起動時にSHA-1による署名を検証しているが、これを回避する手法も開発されている[20]。
攻撃と認証
ハッシュ長が L ビットであるハッシュ関数において、与えられた特定のハッシュに対応する元のメッセージを見つけることは、総当たり攻撃では 2L の試行で可能である。これは原像攻撃と呼ばれる。一方、同じハッシュを与える2つの異なるメッセージを見つけることは衝突攻撃と呼ばれ、およそ 1.2 * 2L / 2 の試行で可能である。後者の理由により、ハッシュ関数の強度はハッシュ長の半分の鍵長の共通鍵暗号と比較される。これより、SHA-1の強度は80ビットであると考えられてきた。
暗号研究者によって、SHA-0については衝突ペアが発見され、SHA-1についても当初想定されていた 280 の試行よりもずっと少ない試行で衝突を発生させうる手法が発見された。
そのブロック構造、繰り返し構造と、追加的な最終ステップの欠如により、SHAシリーズは伸長攻撃およびpartial-message collision attacksに対して脆弱である[21]。これらの攻撃法により、 カテゴリ:ハッシュ関数・メッセージ認証コード・認証付き暗号

SHA-1
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/11 03:54 UTC 版)
「Secure Hash Algorithm」の記事における「SHA-1」の解説
詳細は「SHA-1」を参照 SHA-0の欠点を修正した。SHA-1のハッシュ値の長さは、SHA-0と同じく160ビット。 2017年に、衝突攻撃の成功と実例が報告された。
※この「SHA-1」の解説は、「Secure Hash Algorithm」の解説の一部です。
「SHA-1」を含む「Secure Hash Algorithm」の記事については、「Secure Hash Algorithm」の概要を参照ください。
固有名詞の分類
- SHA1のページへのリンク