SHA-1ハッシュジェネレーター(160ビット・レガシー)
ブラウザ上でSHA-1ハッシュを生成。40文字の16進数出力、アップロード不要。Gitコミット確認・旧証明書フィンガープリント検証・移行監査向けレガシーツール。データはデバイス外に出ません。
SHA-1とは?
SHA-1(Secure Hash Algorithm 1)はNISTが1995年にFIPS 180-1として公開した160ビットの暗号学的ハッシュ関数です。米国国家安全保障局(NSA)が設計し、1993年に短期間で廃止された欠陥のあるSHA-0の後継として、2000年代を通じてデジタル署名・TLS証明書・コード署名の主要ハッシュアルゴリズムとして使用されました。
破綻の歴史:2005年、王小雲のチームがSHA-1の衝突耐性を期待される2^80から2^63演算に低下させる理論的攻撃を発表しました。2017年2月、GoogleとCWIアムステルダムがSHAtteredアタックを公開し、約110 GPU年の計算で同一SHA-1ハッシュを持つ2つの異なるPDFドキュメントを生成しました。これが決定的な実用的破綻です。NISTは2011年(NIST SP 800-131A)にすでに署名でのSHA-1使用を非推奨とし、ブラウザベンダーとCAは2016〜2017年にSHA-1証明書サポートを廃止しました。
現在の状況:SHA-1はデジタル署名・証明書フィンガープリント・パスワード保存・コード署名など、セキュリティに関わるすべての用途で非推奨です。Gitのオブジェクトフォーマット(コミットハッシュ)では、セキュリティではなくコンテンツアドレッシングに使用されており、移行されていないレガシーソフトウェアチェックサムにも残っています。GitプロジェクトはGit 2.29(2020年10月)でSHA-256オブジェクトフォーマットサポートを追加しました。新規プロジェクトはすべて SHA-256 以上を使用してください。
このツールはWeb Crypto APIの crypto.subtle.digest('SHA-1', ...) を使用してブラウザ内でSHA-1を計算します。40文字の16進数出力は sha1sum・openssl dgst -sha1・git hash-object が生成するものと同一です。バイトはサーバーに送信されません。
SHA-1 vs SHA-2ファミリー:SHA-1は40文字(160ビット)。SHA-256 は64文字(256ビット)で既知の脆弱性はありません。MD5 は32文字(128ビット)でより早く破られました(2004年)。新規のハッシュ作業にはSHA-256が標準の選択です。
// Hash text using Web Crypto API (SHA-1 — legacy use only)
async function sha1(text) {
const data = new TextEncoder().encode(text);
const hash = await crypto.subtle.digest('SHA-1', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
await sha1('Hello, World!');
// → '0a0a9f2a6772942557ab5355d76af442f8f65e01'
// ⚠️ SHA-1 is broken — use SHA-256 for new work. SHA-1の使用例
Gitコミットフィンガープリントの確認
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 author A Dev <dev@example.com> 1716854400 +0000 committer A Dev <dev@example.com> 1716854400 +0000 Initial commit
Gitはすべてのコミットをブロブとして格納し、そのSHA-1をコミットヘッダーと内容からこの形式で計算します。`git log` に表示される40文字の16進数文字列は直接のSHA-1フィンガープリントです。生のコミットオブジェクトテキストをここに貼り付けると同じハッシュを再現できます。`git cat-file` 出力のデバッグやミラーリポジトリの改ざん検証に役立ちます。なお、Git 2.29以降はSHA-256モード(git init --object-format=sha256)をサポートしており、GitHubのオブジェクトストアも移行予定です。新規リポジトリではSHA-256モードを推奨します。
レガシーTLS証明書フィンガープリントの検証
-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAKlL... -----END CERTIFICATE-----
2017年以前、ブラウザは証明書フィンガープリントを40文字のSHA-1 16進数文字列で表示していました。CAは2016年1月にSHA-1署名証明書の発行を停止し、主要ブラウザも2017年初頭までにサポートを終了しました。古い内部証明書や旧IoTデバイスの監査を行う場合、PEM本文をここに貼り付けてSHA-1フィンガープリントを再現し比較できます。現代のワークフローでは64文字の SHA-256 フィンガープリントを使用します。
古いソフトウェアダウンロードの検証
node-v0.12.7-linux-x64.tar.gz
一部の古いソフトウェアアーカイブはSHA-1チェックサムのみを提供しています。改ざん検出ではなく破損検出には依然として有効です。「ファイル」タブにアーカイブをドロップしてSHA-1を計算し、公開元が提供する値と比較してください。SHA-256も利用可能な場合は常にそちらを優先してください。新規アーカイブには SHA-256 またはSHA-512チェックサムを求めてください。
SHAttered衝突の実証
(「ファイル」タブからGoogle/CWI の shattered-1.pdf を読み込んでください)
2017年2月、GoogleとCWIアムステルダムはSHAtteredアタックを公開しました。これが初の実用的なSHA-1衝突で、同一のSHA-1値(38762cf7f55934b34d179ae6a4c80cadccbb7f0a)を持つ2つの異なるPDFファイル(shattered-1.pdf と shattered-2.pdf)が作成されました。どちらかのPDFをこのツールの「ファイル」タブにドロップすると、この正確なハッシュが生成され、衝突が実在することを証明します。この実証は SHA-1 が破られている最も明確な証拠です。新規のドキュメント整合性ワークフローには SHA-256 を使用してください。
SHA-1ハッシュの生成方法
- 1
テキストを貼り付けるかファイルをドロップ
「テキスト」タブを選択し、コミットメッセージ・証明書本文・レガシーチェックサムの入力など任意の文字列を入力欄に貼り付けてください。SHA-1ハッシュは入力に応じてリアルタイムで更新されます。ファイルの場合は「ファイル」タブに切り替え、ファイルをドロップゾーンにドラッグしてください。ブラウザがアップロードなしにローカルでハッシュ化します。
- 2
40文字のハッシュをコピー
ハッシュ出力の隣にある「コピー」ボタンをクリックしてください。40文字の小文字16進数文字列がクリップボードにコピーされます。レガシーシステムが大文字の16進数を要求する場合は「大文字」トグルを使用してください。
- 3
レガシーフィンガープリントとの比較
「比較」タブに切り替えて2つのSHA-1ハッシュを並べて貼り付け、一致を確認してください。レガシー公開元のチェックサム検証、ミラーGitリポジトリの監査、SHA-256採用以前のドキュメントに記載された旧TLS証明書フィンガープリントの確認に役立ちます。
技術仕様
- アルゴリズム:Merkle-Damgård構造、80ラウンド
- SHA-1は512ビット(64バイト)ブロック単位で入力を処理し、4段階の20ラウンドグループで80ラウンドのビット演算を適用します。各段階では異なる論理関数(Ch、Parity、Maj、Parity)と小さな整数の平方根から導出された加法定数を使用します。初期ハッシュ状態は5つの32ビットワード(A〜E)で、最終ハッシュは最後のブロック処理後のワードの連結です。FIPS 180-1(1995年)に実装が定義され、FIPS 180-4(2015年)では正式に非推奨の記述が含まれます。
- 出力:160ビット、40文字16進数
- 常に正確に40文字の小文字16進数(160ビット = 20バイト、1バイト2文字)です。入力サイズによらず出力長は固定です。SHA-256の64文字と比べて短い出力が衝突耐性が弱い主な要因の一つです。
- パフォーマンス:高速だが、それが問題の一部
- SHA-1は高速で、ブラウザでのWeb Crypto使用時は通常400〜700 MB/sとSHA-256と同等です。攻撃者にとってはこの速度が有利で、現代のGPUクラスターは毎秒数十億のSHA-1ハッシュを計算でき、ブルートフォースと衝突探索を加速します。速度こそがSHA-1(MD5同様)をパスワード保存に絶対使用してはならない理由です。パスワードにはbcrypt・scrypt・Argon2を使用してください。
- 標準:FIPS 180-1(1995年)— FIPS 180-4の文脈で非推奨
- SHA-1はFIPS 180-1(1995年)で標準化されました。NISTはNIST SP 800-131A(2011年)でデジタル署名でのSHA-1使用を非推奨とし、FIPS 186-5(2023年)ではすべてのデジタル署名生成での使用を正式に禁止しました。RFC 6194(2011年)は既知のセキュリティ上の考慮事項を文書化しています。W3C WebCrypto APIはレガシー相互運用性のためにSHA-1を含んでおり、これによりこのブラウザツールでの計算が可能です。
ベストプラクティス
- セキュリティに関わる操作にSHA-1を使用しない
- SHA-1はデジタル署名・TLS証明書・コード署名・パスワード保存、および衝突耐性が重要なあらゆるワークフローで非推奨です。2017年のSHAtteredアタックが実用的な衝突を実証しました。セキュリティ用途にはすべて SHA-256 またはSHA-3に移行してください。現代のハードウェアではコスト差は無視できるほどです。SHA-256は現行のすべてのCPUとGPUパイプラインでハードウェアアクセラレーションが搭載されています。
- レガシーフィンガープリントの参照にSHA-1は許容範囲
- 2017年以前のファイルチェックサムの確認、GitコミットIDの調査、監査目的で旧証明書フィンガープリントを検査する場合、SHA-1は適切です。ハッシュ自体は信頼の判断に使用されているのではなく、既知のフィンガープリントをクロス参照のために再現しているだけです。監査ログには明示的に記録してください:「SHA-1はレガシー参照にのみ使用し、セキュリティ検証には使用していない」。
- 常にUTF-8バイトをハッシュ化する
- SHA-1を含むすべてのハッシュアルゴリズムは文字ではなくバイトに対して動作します。UTF-8とUTF-16で同じ文字列を符号化すると異なるハッシュが生成されます。本ツールはハッシュ前に常に入力をBOMなしUTF-8で符号化します。異なる符号化(Windows UTF-16-LE、Latin-1)を使用するシステムと一致させる必要がある場合は、比較前に外部で入力を符号化してください。
- コードでハッシュ値を比較する際は定数時間比較を使用
- コードで2つのSHA-1ハッシュを比較する場合は、定数時間等値チェックを使用してください。Node.jsの
crypto.timingSafeEqual()、Pythonのhmac.compare_digest()など。素のString等値比較(=== や ==)はタイミング情報を漏洩し、攻撃者が期待されるハッシュをバイトごとに再構築できる可能性があります。これはレガシーSHA-1検証にも有効な多層防御の措置です。
SHA-1 よくある質問
SHA-1はまだ安全に使えますか?
GitがまだSHA-1を使っているのはなぜですか?
--object-format=sha256サポートを追加して移行を進めています。既存リポジトリの変換は可能ですが、数十億の既存コミットIDがあるため移行は複雑です。現時点ではほとんどのGit履歴はSHA-1コミットIDで保存されており、本ツールはコミットオブジェクトハッシュのクロスチェックに役立ちます。 SHA-1からSHA-256に移行すべきですか?
SHAtteredアタックとは何ですか?
SHA-1衝突は偶然発生しますか?
チェックサムなど非セキュリティ用途でSHA-1は使えますか?
SHA-1ハッシュの長さはどれくらいですか?
入力データはサーバーに送信されますか?
crypto.subtle.digest('SHA-1', data))を使用してブラウザ内で完全に計算されます。ハッシュ中にDevTools → Networkタブを開くと、送信リクエストがゼロであることを確認できます。「ファイル」タブでドロップしたファイルは FileReader API で読み込まれローカルでハッシュ化されます。バイトはデバイス外に出ません。機密文書・レガシー証明書・独自ソースコードのフィンガープリント確認に安全にご利用いただけます。同じプライバシー保証が SHA-256ジェネレーター にも適用されます。 コマンドラインのsha1sumと出力が異なるのはなぜですか?
echo 'hello' | sha1sum は 'hello' の後に改行(\n)を含むため、'hello\n' をハッシュします。echo -n 'hello' | sha1sum または printf '%s' 'hello' | sha1sum で改行を除去してください。他の原因:Windowsの改行(\r\n vs \n)、ファイル先頭のUTF-8 BOM、エンコーディングの違い(UTF-8 vs Latin-1)。本ツールはハッシュ前に入力をBOMなしUTF-8でエンコードします。 関連ツール
すべてのツールを見る →JWT デコーダー — オンライン解析ツール
セキュリティツール
JWTトークンを無料のJWTデコーダーでオンラインデコード。ヘッダー、ペイロード、署名、有効期限、アルゴリズム、クレームを即座に検査できます。100%ブラウザ動作 — トークンはデバイスから外に出ません。登録不要、追跡なし。
MD5ハッシュジェネレーター&ファイルチェックサムツール
セキュリティツール
無料オンラインMD5ハッシュ生成ツール。ブラウザ上でMD5・SHA-256・SHA-1・SHA-512のハッシュ値を即座に生成。テキストやファイルのチェックサム検証・比較、ワンクリックコピー対応。登録不要でデータはサーバーに送信されません。
ランダムパスワード生成 — カスタマイズ可能&安全
セキュリティツール
無料のオンラインランダムパスワード生成ツール。ブラウザ上で安全な強力パスワードを即座に自動生成できます。長さや文字種のカスタマイズ、最大50個の一括生成に対応。エントロピー分析付き強度メーター搭載。データはサーバーに送信されません。
SHA-256ハッシュジェネレーター&チェックサムツール
セキュリティツール
SHA-256ハッシュをオンラインで無料生成。テキストやファイルをブラウザ上でハッシュ化し、チェックサムを検証して64文字の16進数出力をコピー。登録不要、データはページ外に出ません。
SHA-3ハッシュジェネレーター(Keccak SHA3-256)
セキュリティツール
SHA-3ハッシュをオンラインで無料生成。NIST FIPS 202スポンジ構造 — SHA-2後継の標準。SHA3-256出力64文字16進数。ブラウザ完結型(遅延読み込みjs-sha3)、アップロードなし。
SHA-384ハッシュジェネレーター(TLS Suite Bハッシュ)
セキュリティツール
SHA-384ハッシュをオンラインで生成。96文字16進数出力、長さ拡張攻撃耐性、NSA Suite B準拠。AES-256-GCMとTLSで組み合わせて使用。すべてのハッシュ処理はWeb Crypto API経由でブラウザ内で完結。