SHA-1とは

SHA-1は、任意の長さのデータから、160ビット(20バイト)の固定長ハッシュ値を生成する暗号学的ハッシュ関数であり、かつては広く利用されていたものの、現在では衝突攻撃に対する脆弱性が判明し、セキュリティ用途での利用が非推奨とされているアルゴリズムのことです。

SHA-1の概要と歴史的役割

SHA-1(Secure Hash Algorithm 1)は、アメリカの国家安全保障局(NSA)によって設計され、1995年にNIST(アメリカ国立標準技術研究所)によって連邦情報処理標準(FIPS PUB 180-1)として標準化されました。

SHA-1は、先行するMD5の128ビットよりも長い160ビットのハッシュ長を採用したことで、より高いセキュリティレベルを提供すると見なされ、長らくデジタル署名、TLS/SSL証明書、バージョン管理システム(例:Git)におけるデータの完全性検証など、多岐にわたる暗号技術分野で標準的に使用されていました。

ハッシュ関数は、入力データにわずかな変更があっても、出力されるハッシュ値が大きく変化する性質(雪崩効果)を持ち、これによりデータの同一性を迅速かつ確実に検証することを可能にします。

主な目的は、MD5よりも安全な代替手段を提供し、暗号技術におけるデータの完全性と認証の基盤となることでした。

SHA-1の技術的仕組み

SHA-1は、MD5と同じくMerkle-Damgård構造という設計原理をベースとしています。この構造は、入力メッセージを固定長のブロックに分割し、圧縮関数を用いてそのブロックを順次処理していく方式です。

1. 処理フロー

  • パディング: 入力メッセージは、512ビットの倍数となるようにパディング(詰め物)が施されます。パディング後、元のメッセージの長さを示す64ビットの値が末尾に付加されます。
  • 初期ハッシュ値: 5つの32ビットワード(合計160ビット)で構成される固定の初期値から処理が開始されます。
  • ラウンド処理: 各512ビットのメッセージブロックは、圧縮関数によって80ラウンドの複雑な操作を受けます。この操作には、ビット単位の論理演算や、循環シフト(ローテート)、加算などが含まれます。
  • 最終ハッシュ値: すべてのブロックの処理が完了すると、最終的な5つのレジスタの値が連結され、160ビットのハッシュ値が出力されます。

2. 衝突耐性

SHA-1の160ビットのハッシュ長は、理論上 $2^{160}$ 通りの出力が存在します。しかし、前述のMD5と同様、衝突(異なる入力から同じハッシュ値が生成されること)を見つけるために必要な計算量は、誕生日攻撃の原理により、約 $2^{80}$ に減少します。

SHA-1の脆弱性と利用の現状

SHA-1は、長期間にわたり信頼されてきましたが、その衝突耐性に関する理論的な脆弱性が指摘され続けました。

  • 衝突攻撃の成功: 2017年には、SHA-1に対する実用的な衝突攻撃(同じSHA-1ハッシュ値を持つ異なる2つのPDFファイルを生成する攻撃)が実際に成功したことが発表されました。これは、理論上の懸念が現実のものとなったことを示し、SHA-1が暗号学的な安全性を失ったことを意味します。
  • セキュリティ用途からの撤退: この脆弱性の判明以降、主要なブラウザベンダー(Google, Mozillaなど)や標準化団体は、SSL/TLS証明書をはじめとするセキュリティ用途でのSHA-1の利用を段階的に廃止しました。

現在、SHA-1は、セキュリティが要求される通信や認証の用途では使用されず、より安全性の高いSHA-2(特にSHA-256)やSHA-3への移行が完了しています。ただし、Gitのようなバージョン管理システムでは、データの識別子としてまだ使用されている場合がありますが、これはデータの完全性検証(改ざん検知)が主目的であり、暗号学的認証が主目的ではないためです。

関連用語

ハッシュ値 | 今更聞けないIT用語集
米国国立標準技術研究所(NIST) | 今更聞けないIT用語集
ソフトウェアエンジニアリング

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。