SHA-1ハッシュジェネレーター

任意のテキストからSHA-1ハッシュを生成

入力テキスト

ローカルで実行 · シークレットの貼り付けも安全

SHA-1ハッシュ

SHA-1ハッシュがここに表示されます…

SHA-1ハッシングとは?

SHA-1(Secure Hash Algorithm 1)は、任意の入力から固定長160ビット(20バイト)のダイジェストを生成する暗号ハッシュ関数です。NSAが開発し、1995年にNISTがFIPS PUB 180-1として標準化、後にRFC 3174として文書化されました。SHA-0とMD5の後継としてより強固な設計が施されており、入力を512ビットブロック単位に分割し80ラウンドのビット演算で処理することで、40文字の16進数フィンガープリントを生成します。10年以上にわたりSSL/TLS、PGP、SSH、IPsecの基盤として機能してきたアルゴリズムです。

すべての暗号ハッシュ関数と同様に、SHA-1は一方向変換です。入力からハッシュを計算するのは高速ですが、ハッシュ単体から入力を復元することは計算上不可能です。入力の1ビットを変えると160ビットのダイジェスト全体が完全に変わります。これを「アバランシェ効果」と呼びます。SHA-1は任意の大きさの入力空間を固定の160ビット出力にマッピングするため、数学的にはコリジョン(異なる2つの入力が同じハッシュを生成する状況)が必ず存在します。ハッシュ関数のセキュリティ上の主張は、コリジョンを見つけるために約2^80回の演算が必要であるというものです。これは出力ビット長の半分に相当します。

2017年、GoogleとCWI AmsterdamがSHAttered攻撃を公表しました。同一ダイジェストを持つ異なる2つのPDFファイルを生成することで、初の実用的なSHA-1コリジョンを実証したものです。この攻撃には約2^63.1回のSHA-1計算が必要で、理論上の2^80を大きく下回りました。2020年にはGaetan LeurentとThomas Peyrinが選択プレフィックスコリジョン攻撃を発表し、必要な計算量を約2^63.4まで削減しました。これを受け、主要ブラウザ・認証局・標準化団体はすべてデジタル署名とTLS証明書においてSHA-1を非推奨としました。ただし、セキュリティ以外の用途では依然として使われています。GitのオブジェクトID(SHA-256への移行中ではありますが)、レガシーHMAC構成、敵対的なコリジョン耐性を必要としないファイル整合性チェックなどがその例です。

このSHA-1ジェネレーターを使う理由

インストールやコード記述なしに、SHA-1ハッシュを即座に生成できます。テキストを貼り付けるだけでリアルタイムに40文字の16進数ダイジェストを取得できます。レガシーチェックサムの検証、Gitの内部動作のデバッグ、ハッシュベースのワークフローのテストに役立ちます。

即時ハッシュ生成
入力を修正するたびに出力がリアルタイムで更新されます。ボタンをクリックする必要はなく、SHA-1ダイジェストが文字単位で即座に表示されます。
🔒
プライバシー優先の処理
すべてのハッシュ処理はWeb Crypto APIを使用してブラウザ内でローカルに実行されます。入力テキストはデバイス外に出ることなく、サーバーに送信されることもありません。
📋
ワンクリックコピー
ワンクリックでハッシュをクリップボードにコピーできます。小文字と大文字の16進数出力を切り替えて、システムが要求するフォーマットに合わせることができます。
🔍
アカウント不要
登録不要、ログイン不要、使用制限なし。ページを開いてすぐにハッシュ生成を始められます。モダンブラウザを搭載した任意のデバイスで動作します。

SHA-1の活用例

Git内部とデバッグ
Gitはすべてのオブジェクト(コミット、ツリー、ブロブ、タグ)をSHA-1ハッシュで識別します。Gitの配管コマンドのデバッグ、パックファイルの検証、カスタムGitツールの作成時に、SHA-1ジェネレーターを使ってオブジェクトIDを期待値と照合できます。
レガシーシステムの検証
多くの古いシステム、パッケージレジストリ、ファームウェア更新メカニズムでは、ダウンロードとともにSHA-1チェックサムを公開しています。SHA-256ダイジェストが利用できない場合に、SHA-1ハッシュを生成・比較してファイルの整合性を検証できます。
サブリソース整合性(SRI)
HTMLのscriptタグおよびlinkタグのSRIハッシュにはsha256とsha384が推奨されますが、一部のレガシーCDN構成ではSHA-1に依存しています。既存のSRI属性の監査や移行のために期待されるダイジェストを生成できます。
QAとリグレッションテスト
テスト実行間でAPIレスポンス、ビルド成果物、データベーススナップショットのSHA-1ハッシュを比較することで、大きな出力のバイト単位の差分比較を行わずに予期しない変更を検出できます。
データ重複排除
ETLパイプラインでファイルコンテンツやデータレコードのSHA-1ハッシュを計算して重複を特定できます。160ビットの出力は、敵対的でない重複排除シナリオでMD5よりも強力な一意性保証を提供します。
学習と教育
SHA-1は豊富な学術文献を持つ、よく文書化されたアルゴリズムです。Merkle-Damgard構成、メッセージスケジューリング、出力長が現代の計算能力に対して短すぎる場合にコリジョン耐性がなぜ低下するかを理解するために実験することができます。

SHA-1と他のハッシュアルゴリズムの比較

SHA-1は160ビットのダイジェストを生成します。MD5(128ビット)より長いですが、SHA-2ファミリーのアルゴリズムより大幅に短いです。以下の表は各アルゴリズムのダイジェストサイズ、標準規格、適切なユースケースを比較しています。

アルゴリズムダイジェストサイズ16進数長標準規格最適用途
SHA-1160 bits40 hex chars1995 / RFC 3174Deprecated — legacy git commits, old TLS
SHA-256256 bits64 hex chars2001 / FIPS 180-4TLS certificates, blockchain, JWTs
SHA-384384 bits96 hex chars2001 / FIPS 180-4Government systems, higher security margin
SHA-512512 bits128 hex chars2001 / FIPS 180-4Digital signatures, HMAC with large keys
MD5128 bits32 hex chars1992 / RFC 1321Checksums only — broken since 2004
SHA-3256 bits64 hex chars2015 / FIPS 202Post-quantum readiness, alternative to SHA-2
BLAKE3256 bits64 hex chars2020High-performance checksums, Merkle trees

SHA-1の仕組み

SHA-1はMerkle-Damgard構成に従います。メッセージはパディングされ512ビットブロックに分割され、各ブロックはそのブロックから導出されたメッセージスケジュールと入力を混合する80ラウンドのビット演算で処理されます。5つの32ビット状態語(H0からH4)が実行中のハッシュ状態を保持し、これらの語を最終的に連結したものが160ビットのダイジェストとなります。

Input: "hello world"
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
ステップ説明
PaddingAppend a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer.
Block splittingDivide the padded message into 512-bit (64-byte) blocks.
ExpansionExpand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule.
CompressionProcess 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79.
OutputConcatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters.

SHA-1とMD5の主な違いは、状態語の数(5対4)、ブロックあたりのラウンド数(80対64)、および左ローテートフィードバックを持つメッセージスケジュールの使用です。これらの違いにより、SHA-1はMD5より大きな出力(160対128ビット)を持ち、元々より高いセキュリティマージンを提供していましたが、両アルゴリズムとも現在はコリジョン耐性が破られているとみなされています。

コード例

主要な言語と環境でSHA-1ハッシュを生成する方法を示します。MD5とは異なり、SHA-1はブラウザのWeb Crypto APIで利用可能なため、ブラウザとNode.js環境の両方で外部ライブラリなしに使用できます。

JavaScript (Web Crypto API — browser & Node.js)
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
  const data = new TextEncoder().encode(text)
  const hashBuffer = await crypto.subtle.digest('SHA-1', data)
  const hashArray = Array.from(new Uint8Array(hashBuffer))
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}

await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
Python
import hashlib

# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result)  # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

# Hash a file in chunks
with open('file.bin', 'rb') as f:
    sha1 = hashlib.sha1()
    for chunk in iter(lambda: f.read(8192), b''):
        sha1.update(chunk)
    print(sha1.hexdigest())
Go
package main

import (
    "crypto/sha1"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := sha1.Sum(data)
    fmt.Printf("%x\n", hash)
    // → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}
CLI (Linux / macOS)
# Using sha1sum (Linux) or shasum (macOS)
echo -n "hello world" | sha1sum
# → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  -

# macOS
echo -n "hello world" | shasum -a 1
# → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  -

# Hash a file
sha1sum package.json
# → a1b2c3d4e5f6...  package.json

# Using openssl (cross-platform)
echo -n "hello world" | openssl sha1
# → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed

よくある質問

SHA-1はまだ安全に使えますか?
SHA-1はセキュリティに敏感なアプリケーションには安全ではありません。2017年のSHAttered攻撃が実用的なコリジョン生成を実証し、2020年の選択プレフィックス攻撃がさらにコストを下げました。デジタル署名、TLS証明書、または攻撃者がコリジョンを生成できるシナリオでは、代わりにSHA-256またはSHA-3を使用してください。チェックサムやキャッシュキーなど攻撃者が入力を制御しないセキュリティ以外の用途では、SHA-1は引き続き機能します。
SHA-1とSHA-256の違いは何ですか?
SHA-1は160ビット(40文字の16進数)のダイジェストを生成し、コリジョン攻撃に対して脆弱です。SHA-256は256ビット(64文字の16進数)のダイジェストを生成し、既知の実用的な攻撃が存在しないSHA-2ファミリーに属します。同じハードウェアでSHA-256はSHA-1より約20〜30%遅いですが、96ビット多い出力と既知の構造的脆弱性がないことから、新規プロジェクトへのデフォルト推奨となっています。
GitがSHA-1を使っているのはなぜですか?
Linus Torvaldsが2005年にGitを設計した際、SHA-1はセキュアとみなされており、コンテンツアドレス可能ストレージにおける速度とコリジョン耐性のバランスが優れていました。GitはSHA-1をセキュリティメカニズムではなくコンテンツ識別子として使用しています。偶発的な破損を検出するものであり、意図的な改ざんには対応していません。2021年以降、Gitはgit-hash-function-transitionプランに記載されたハッシュ拡張フレームワークを通じてSHA-256への移行を進めています。
SHA-1ハッシュから元の入力を復元できますか?
できません。SHA-1はハッシュ処理中に情報を破棄する一方向関数です。短い入力や一般的な入力に対しては、攻撃者がレインボーテーブルやブルートフォース探索を使って元のテキストを見つけることができますが、これはアルゴリズムの逆算ではなく入力空間の網羅的探索です。パスワードには、高速ハッシュ関数の代わりにbcrypt、scrypt、またはArgon2を使用してください。
SHAttered攻撃はどのように機能しますか?
SHAttered攻撃はSHA-1圧縮関数の構造的な脆弱性を悪用します。同一の中間ハッシュ状態を生成する2つの異なる512ビットメッセージブロックを慎重に構築することで、攻撃者は同一のSHA-1ダイジェストを持ちながら異なる表示内容を持つ2つのPDFファイルを作成しました。攻撃には約2^63回のSHA-1計算が必要で、単一CPUでは約6,500年分に相当しますが、GPUクラスターでは数か月で実現可能です。改良された技術によりコストはその後さらに低下しています。
SHA-1とHMAC-SHA1の違いは何ですか?
SHA-1は単純なハッシュ関数です:hash = SHA1(message)。HMAC-SHA1は鍵付きメッセージ認証コードです:mac = HMAC(key, message)。HMACはハッシュ関数を長さ拡張攻撃を防ぎ秘密鍵を必要とする構造でラップします。興味深いことに、HMAC-SHA1はSHA-1自体がコリジョン耐性を失っているにもかかわらず、メッセージ認証においては依然としてセキュアとみなされています。HMACのセキュリティはコリジョン耐性ではなく、圧縮関数の擬似ランダム関数特性に依存しているためです。
ファイルチェックサムにSHA-1とMD5のどちらを使うべきですか?
ファイルチェックサムにはMD5よりSHA-1の方が優れた選択肢です。MD5は128ビットのダイジェストを生成し、2004年以降破られており、実用的なコリジョン攻撃は現在数秒で実行可能です。SHA-1は160ビットのダイジェストを生成し、コリジョン攻撃が実証されているものの、より高いコストを要します。ただし、新規システムにはSHA-256を推奨します。256ビットのダイジェストを提供し、既知の実用的な攻撃がなく、すべてのプラットフォームと言語で十分にサポートされています。