SHA-1(Secure Hash Algorithm 1)
SHA-1は、データ完全性のために用いられる160ビットの暗号学的ハッシュ関数です。かつて広く採用されましたが、現在は衝突攻撃に対して安全でないとされ、主にSHA-2およびSHA-3へ移行しています。
概要
SHA-1(Secure Hash Algorithm 1)は、任意の長さの入力データを固定長の160ビット(20バイト)のダイジェストへ写像する暗号学的ハッシュ関数である。以前のアルゴリズムの改訂版として公表され、チェックサム、完全性検証、デジタル署名に広く用いられた。SHA-1が生成するハッシュは一方向の値であることを意図しており、ダイジェストから元の入力を復元することは計算上困難であるべきとされる。
設計と動作
SHA-1は入力を512ビット単位のブロックで処理する。処理前にメッセージにはパディングが追加され、その長さが付加される。内部では160ビットの内部状態を使用し、ビット単位の論理関数(AND、OR、XOR)、固定定数、2の32乗を法とする加算、左への巡回シフトから成る単純な演算を80ラウンド実行して状態を更新する。最終的な160ビットの状態がハッシュ値として出力され、慣例的に40文字の16進数文字列で表される。
セキュリティ特性
暗号学的ハッシュ関数には、主に三つの性質が求められる。すなわち、あるダイジェストに一致する任意のメッセージを見つけることが困難である原像計算困難性、与えられたメッセージと同じダイジェストを持つ別のメッセージを見つけることが困難である第二原像計算困難性、同じダイジェストを生成する二つの異なるメッセージを見つけることが困難である衝突耐性である。SHA-1はこれらを目標に設計されたが、暗号解析によって衝突耐性は弱められた。
脆弱性と非推奨化
2000年代の研究では、SHA-1の衝突耐性に対し、総当たり探索より高速な理論的攻撃が発見され、その後には実用的な衝突も実証された。衝突はデジタル署名および完全性検査の信頼性を損なうため、標準化団体や主要なソフトウェアプロジェクトは、ほとんどのセキュリティ用途でSHA-1を非推奨とした。一般には、SHA-2ファミリーのSHA-256やSHA-512、またはSHA-3など、より強力なハッシュ関数へ移行することが推奨される。
一般的な用途と移行
SHA-1は過去に、TLS証明書とコード署名、パッケージおよびファイルのチェックサム、バージョン管理の識別子など、多くの場面で使われてきた。脆弱性が明らかになるにつれて、これらの用途は移行してきた。新しいシステムでは通常SHA-2またはSHA-3が採用される。一方、レガシーシステムではSHA-1ダイジェストに遭遇することがあるため、互換性と移行戦略は管理者および開発者にとって引き続き重要な課題である。
例と主な事項
ASCII入力「Wikipedia」に対するSHA-1ダイジェストの例は、40文字の16進数文字列「664add438097fbd4307f814de8e62a10f8905588」である。SHA-1は固定サイズの値を出力するため、偶然または意図的に衝突した二つの異なる入力は、同じ16進ダイジェストを共有する。この性質こそが、セキュリティ上重要な文脈において衝突がアルゴリズムの実用的な破綻とみなされる理由の中心である。
- ダイジェスト長:160ビット(20バイト)
- ブロック長:512ビット
- ラウンド数:内部80ラウンド
- 状態:多くのセキュリティ用途で非推奨。移行が推奨される
関連項目
著者
AlegsaOnline.com SHA-1(Secure Hash Algorithm 1) Leandro Alegsa
URL: https://ja.alegsaonline.com/art/89320