SHA-1 vs SHA-256 vs SHA-512:適切なハッシュアルゴリズムの選び方

16 Jun 2026 184 words

SHA-1 vs SHA-256 vs SHA-512

SHA-1、SHA-256、SHA-512はすべてSecure Hash Algorithmファミリーのメンバーですが、セキュリティ、出力サイズ、パフォーマンスにおいて大きな違いがあります。適切なものを選択するには、セキュリティ要件、パフォーマンスの制約、互換性のニーズに依存します。

クイック比較

特徴 SHA-1 SHA-256 SHA-512
出力サイズ 160ビット(20バイト) 256ビット(32バイト) 512ビット(64バイト)
セキュリティレベル 80ビット(破られている) 128ビット(安全) 256ビット(安全)
ラウンド数 80 64 80
ワードサイズ 32ビット 32ビット 64ビット
ブロックサイズ 512ビット 512ビット 1024ビット
状態 非推奨 推奨 推奨

セキュリティ分析

SHA-1は160ビットのハッシュを生成し、誕生日のパラドックスにより2^80回の操作での衝突耐性を持ちます。2017年、GoogleはSHAttered攻撃を実証し、約2^63回の操作を使用して最初の実用的なSHA-1衝突を生成しました。これにより、SHA-1が衝突耐性が重要なあらゆる目的に対して適切なセキュリティを提供しなくなったことが証明されました。

SHA-256は128ビットの衝突耐性を提供します。2026年現在、SHA-256のセキュリティを設計強度以下に低下させる実用的な攻撃はありません。NISTによって米国政府アプリケーションでの使用が承認されており、SSL/TLS証明書、ブロックチェーン、デジタル署名の標準となっています。

SHA-512は256ビットの衝突耐性を提供します。SHA-256よりもさらに強力ですが、ほとんどのアプリケーションが必要とする以上のセキュリティを提供します。追加の強度には32ビットシステムでのパフォーマンスコストが伴いますが、64ビットシステムではSHA-512は実際にはSHA-256よりも高速になる可能性があります。

SHA-1がまだ見られる場所

非推奨であるにもかかわらず、SHA-1は依然としてレガシーシステムに存在しています:

  • GitはコミットハッシュにSHA-1を使用しています(ただしGitはSHA-256サポートを追加しました)
  • 古いデジタル署名はSHA-1証明書で署名されています
  • レガシーファイルチェックサムは非推奨前に配布されました
  • 一部のバージョン管理システムおよびバックアップツール

新しいシステムでSHA-1に遭遇した場合は、直ちにSHA-256に移行してください。

パフォーマンスに関する考慮事項

32ビットプロセッサでは、SHA-256はSHA-512よりも高速です。SHA-512は64ビットワードで動作するため、追加の命令が必要になるからです。ハードウェアアクセラレーション(SHA拡張機能)を備えた64ビットプロセッサでは、SHA-256とSHA-512の両方が良好に動作し、通常SHA-256がわずかに高速です。

大きなファイルのハッシュ化では、差は測定可能ですが、通常の使用ではめったに重要ではありません。SHA-256でハッシュ化に1秒かかるファイルは、SHA-1で0.7秒、SHA-512で1.3秒かかる場合があります。ほとんどのアプリケーションでは、SHA-256のセキュリティ上の利点がわずかなパフォーマンスの差をはるかに上回ります。

コード例

// PHP
echo hash('sha1', 'hello');   // aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
echo hash('sha256', 'hello'); // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
echo hash('sha512', 'hello'); // 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
import hashlib

print(hashlib.sha1(b'hello').hexdigest())
print(hashlib.sha256(b'hello').hexdigest())
print(hashlib.sha512(b'hello').hexdigest())
// Node.js
const crypto = require('crypto');
console.log(crypto.createHash('sha1').update('hello').digest('hex'));
console.log(crypto.createHash('sha256').update('hello').digest('hex'));
console.log(crypto.createHash('sha512').update('hello').digest('hex'));

推奨事項

ユースケース 推奨
SSL/TLS証明書 SHA-256
ファイル整合性検証 SHA-256またはSHA-512
デジタル署名 SHA-256
パスワードハッシュ化 bcryptまたはargon2(SHAではない)
ブロックチェーン/暗号通貨 SHA-256
長期アーカイブ SHA-512
レガシー互換性 SHA-256に移行

オンラインツール

SHA-1ジェネレーターSHA-256ジェネレーターSHA-512ジェネレーターツールを使用して、ハッシュを即座に計算できます。マルチハッシュジェネレーターは、比較のために一度にすべてのハッシュタイプを生成します。

結論

SHA-1は破られており、使用すべきではありません。SHA-256はほとんどのアプリケーションで推奨される標準です。SHA-512は高リスク環境に追加のセキュリティを提供します。特に理由がない限り、SHA-256をデフォルトとして使用してください。


About this article

SHA-1、SHA-256、SHA-512のハッシュアルゴリズムを比較し、それぞれのセキュリティレベル、パフォーマンスのトレードオフ、使用すべきタイミングを理解します。


Related Articles


Related Tools

Help2Code Logo
Menu