SHA1ハッシュジェネレータ

SHA-1は160ビット(40の16進文字)のディジェスト値を生成し、gitオブジェクトID、従来のSVNチェックサム、および2017年以前の多くの署名システムで使用されているハッシュ関数です。任意のテキストを貼り付けるだけで決定的なハッシュ値が得られます。ただし、あらかじめ注意が必要な点があります:SHA-1は衝突耐性に欠けている(SHAttered, 2017)ため、新しい署名やパスワードの保存には使用してはならず、非攻撃的な整合性チェックにのみ適しています。

SHA-1ハッシュの計算方法

  1. 1

    入力内容を貼り付けてください

    任意のテキスト、文字列、テキスト形式に変換された完全なファイル、またはヘックスデシマル数列です。

  2. 2

    エンコードはUTF-8です

    入力データはハッシュ処理前にUTF-8バイトとしてシリアル化され、これはOpenSSL、Python hashlibおよびNode.jsのcryptoモジュールで採用されているデフォルト設定と一致しています。

  3. 3

    メルケル・ダムガードループが走っています

    メッセージはパディング処理を施され、512ビットのブロックに分割された後、各ブロックについてSHA-1圧縮関数を80回適用される。

  4. 4

    40文字のヘックスデジストをコピーします

    出力は常に小文字の16進数文字40個(160ビット)です。

SHA-1の概要

プロパティ 値
出力サイズ 160ビット / 40の16進数文字
ブロックサイズ 512ビット
ラウンド数 80
衝突耐性 破損(2^63 選択プレフィックス)
前像抵抗 無傷(執筆時点)
速度 現代的な単一コアでは約500 MB/s

SHA-1がまだ許容されている場所

  • Git:コミットおよびブロブIDはSHA-1に基づいています(SHA-256の使用はオプションです)。衝突が発生した場合、履歴が混乱する可能性がありますが、著者の鍵がなければコミットを偽造することはできません。
  • 非セキュリティ対象のデータ重複削除。 脅威モデルに攻撃者が含まれていないオブジェクトストアにおけるコンテンツアドレッシング方式。
  • 後方互換性のあるAPI。 GitHubのX-Hub-Signature(v1)などの従来型ウェブフック
  • フォレンジック識別子。 アーカイブ全体での重複データ除去を目的としたファイルの指紋化処理。

SHA-1が受け入れられない場所

  • TLS証明書。 ブラウザは2017年からSHA-1方式の証明書を信頼しなくなった。
  • コード署名。 マイクロソフト、アップル、モジラはSHA-1署名を採用していません。
  • パスワードのハッシュ処理。 Argon2idまたはbcryptを使用します。
  • 新しい設計におけるHMACの使用。 少なくともHMAC-SHA-256を使用してください。

出力を確認したい場合は

任意のUnixシステム上でecho -n "hello" | sha1sumと比較してください。文字列「hello」のハッシュ値はaaf4c61ddcc5e8a2dabede0f3b482cd9aea9434dです。

よくある質問

数学的な意味ではではありません。一般的な短い入力文字列については、事前に計算済みの辞書を用いる攻撃者が即座に識別できるため、ハッシュ値だけではパスワードを保護することはできません。40文字のランダム文字列に対しては、実用的な逆算手法が存在しません。

いいえ。SHA(Secure Hash Algorithm)はNISTが公開したアルゴリズムファミリーです。SHA-1は1995年に発表された160ビットのアルゴリズムであり、SHA-2はSHA-224、SHA-256、SHA-384およびSHA-512を含むファミリーです。

10年以上にわたる歴史との互換性を確保するため、2017年からはgitは選択されたプレフィックスによる衝突(SHA-1DC)に対抗する機能を強化し、新しいプロジェクト向けにSHA-256レポジトリもサポートしています。

当社のサーバー上で計算されます。入力テキストは暗号化された接続を通じて送信され、標準のSHA-1関数でハッシュ化された後、40文字のダイジェストが返されます。送信されたテキストは保存しません。SHA-1は一方向関数であるため、ダイジェスト自体を元の入力に戻すことはできません。

関連ツール

このツールは他の言語でも利用できます