SHA-1(エスエイチエーワン)とは | 意味や読み方など丁寧でわかりやすい用語解説
SHA-1(エスエイチエーワン)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
シェアワン (シェアワン)
英語表記
SHA-1 (シャーワン)
用語解説
SHA-1(Secure Hash Algorithm 1)とは、データの完全性を検証するために用いられる「ハッシュ関数」の一種である。ハッシュ関数とは、任意の長さのデータを入力として受け取り、そこから固定長の短いデータ(これをハッシュ値、またはメッセージダイジェストと呼ぶ)を生成するアルゴリズムである。SHA-1が生成するハッシュ値は160ビット(16進数で40桁)の固定長であり、元のデータがどれほど巨大であっても、常にこの長さのハッシュ値が出力される。このハッシュ値は、元のデータが少しでも変更された場合に大きく異なる値となるため、データの改ざんを検知する目的で広く利用されてきた。
SHA-1の主な用途としては、デジタル署名、データの完全性検証、パスワードのハッシュ化、バージョン管理システム(Gitなど)におけるファイルの識別などが挙げられる。たとえば、あるファイルをダウンロードする際に、そのファイルのSHA-1ハッシュ値が事前に公開されていれば、ダウンロード後に自分で計算したハッシュ値と公開されているハッシュ値を比較することで、ファイルが転送中に改ざんされていないか、あるいはダウンロードしたファイルが正規のものであるかを検証できる。パスワードのハッシュ化においては、パスワードそのものをデータベースに保存するのではなく、ハッシュ値を保存することで、万が一データベースが漏洩しても元のパスワードが直接知られることを防ぐ。
ハッシュ関数にはいくつかの重要な性質がある。一つは「一方向性」であり、ハッシュ値から元のデータを逆算して復元することは極めて困難である。もう一つは「衝突耐性」であり、異なる二つの入力データから同じハッシュ値が生成されること(これを「衝突」と呼ぶ)が、計算上非常に難しいとされている。理想的なハッシュ関数では、衝突は事実上発生しないと期待される。さらに、入力データがわずかに変化しただけでも、出力されるハッシュ値はまったく異なる値となるという「アバランチ効果」も持つ。これらの特性により、ハッシュ値はデータの「指紋」のような役割を果たす。
SHA-1は、アメリカ国家安全保障局(NSA)によって設計され、1995年に公開された。それ以前に存在したSHA-0の脆弱性を修正したバージョンとして登場し、その後、長らくインターネットセキュリティの基盤技術の一つとして広く利用されてきた。SSL/TLS証明書、SSH、IPsecなどの通信プロトコルや、ソフトウェアの署名、ファイル整合性のチェックなど、多岐にわたる場面でその信頼性が評価されてきた。
しかしながら、時間の経過とともにSHA-1の安全性に関する懸念が浮上するようになった。ハッシュ関数が安全であるためには、攻撃者が現実的な計算量で衝突を発見できないことが重要である。2005年には理論的な衝突攻撃の可能性が指摘され、SHA-1の衝突耐性が数学的に完全ではないことが示された。そして2017年、Googleの研究者によって、現実的な計算量でSHA-1の衝突を実際に作り出すことに成功した攻撃が発表された。これは「SHAtteredアタック」と呼ばれ、異なる二つのPDFファイルが全く同じSHA-1ハッシュ値を持つことを実証した。
この現実的な衝突攻撃の成功は、SHA-1の信頼性を大きく損なうものであった。なぜなら、攻撃者が悪意のあるファイルと正規のファイルとの間で同じSHA-1ハッシュ値を生成できるようになれば、正規のデジタル署名を持つ偽のファイルを作成したり、改ざんされたファイルを正規のものとして偽装したりすることが可能になるからである。これにより、データの完全性や真正性を保証するSHA-1の機能が根本的に揺らぐこととなった。
このようなセキュリティ上の脆弱性から、現在ではSHA-1の使用は非推奨とされており、多くのウェブブラウザやオペレーティングシステムではSHA-1を利用した証明書や署名のサポートを終了しているか、あるいは警告を表示するようになっている。新規のシステム開発においてはSHA-1の使用は避けるべきであり、既存のシステムでSHA-1が使われている場合は、より安全性の高いハッシュ関数への移行が強く推奨されている。代替として推奨されるハッシュ関数には、SHA-2(Secure Hash Algorithm 2)ファミリー(SHA-256、SHA-512など)や、さらに新しい標準であるSHA-3が存在する。これらのハッシュ関数は、より長いハッシュ値を生成し、現在のところ既知の現実的な衝突攻撃に対して安全であると考えられている。システムエンジニアを目指す上では、SHA-1がかつて広く利用されたが、現在はセキュリティ上の理由から使用を避けるべき技術であることを理解しておくことが重要である。