Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

SHA-3(シャスリー)とは | 意味や読み方など丁寧でわかりやすい用語解説

SHA-3(シャスリー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

シャスリー (シャスリー)

英語表記

SHA-3 (シャースリー)

用語解説

SHA-3は、セキュアハッシュアルゴリズム(Secure Hash Algorithm)ファミリーに属する暗号学的ハッシュ関数の一種である。データの改ざん検出やデジタル署名など、情報セキュリティの様々な場面で不可欠な役割を果たす。具体的には、入力された任意の長さのデータを、予測不能かつ一意性の高い固定長の短いデータ(ハッシュ値またはメッセージダイジェストと呼ぶ)に変換するアルゴリズムである。システムエンジニアを目指す上で、データの完全性や認証を担保するためにハッシュ関数がどのように機能するかを理解することは重要である。SHA-3は、既存のSHA-1やSHA-2といったハッシュ関数とは根本的に異なる設計思想に基づいている点が大きな特徴である。

SHA-3が開発された背景には、先行するハッシュ関数であるSHA-1の脆弱性や、SHA-2がSHA-1と同じMD系(Merkle-Damgard構造)と呼ばれる構造を基にしていることに対する懸念があった。SHA-1は実際に衝突攻撃の事例が報告され、その利用は非推奨とされた。SHA-2自体には具体的な脆弱性は見つかっていなかったものの、将来的なセキュリティ脅威に対して、異なる設計原理を持つ新しいハッシュ関数が必要であるという認識が高まった。このため、アメリカ国立標準技術研究所(NIST)は、2007年に新しいハッシュ関数「SHA-3」を選定するための公開コンペティションを開始した。世界中から応募された多数の候補の中から、厳格な審査と分析を経て、2012年に「Keccak(ケチャック)」というアルゴリズムが最終的にSHA-3として採用された。そして、2015年にFIPS 202として正式に標準化された。

SHA-3の最大の特徴は、その内部構造にある。SHA-1やSHA-2がMD系構造に基づいているのに対し、SHA-3は「スポンジ構造(Sponge Construction)」と呼ばれる全く新しい設計原理を採用している。スポンジ構造とは、データを吸収し、その内部状態を更新し、最終的にハッシュ値を絞り出す(スクイーズする)というプロセスを模したものである。具体的には、この構造はレート(rate; r)と容量(capacity; c)という二つのパラメータを持つ内部状態(state)を用いる。入力データは一定のブロックに分割され、レートrの部分だけが内部状態と排他的論理和(XOR)されながら「吸収フェーズ(Absorbing phase)」で内部状態に取り込まれる。この吸収プロセスは、各データブロックが取り込まれるたびに、Keccakのパーミュテーション関数(permutation function)と呼ばれる複雑な変換関数によって内部状態全体が更新される。このパーミュテーション関数は、入力データをシャッフルし、ビットレベルで拡散させることで、わずかな入力データの変化でもハッシュ値に大きな影響を与える「雪崩効果」を生み出す。

全ての入力データが吸収され、内部状態が最終的な形になった後、ハッシュ値の出力が始まる「スクイージングフェーズ(Squeezing phase)」に入る。このフェーズでは、内部状態のレートrの部分が取り出され、ハッシュ値の一部として出力される。そして、ハッシュ値が必要な長さになるまで、Keccakパーミュテーション関数で内部状態を更新し、再びレートrの部分を取り出すというプロセスを繰り返す。このスポンジ構造により、SHA-3は非常に高いセキュリティ特性を実現している。特に、MD系構造で問題となる可能性があった拡張攻撃や長さ拡張攻撃といった特定の種類の攻撃に対する耐性が向上している。

SHA-3が提供するセキュリティ特性としては、暗号学的ハッシュ関数に求められる以下の三つの性質が挙げられる。一つ目は「衝突耐性(Collision Resistance)」である。これは、異なる二つの入力データから同じハッシュ値が生成されること(衝突)が、計算上非常に困難であるという性質である。二つ目は「原像計算困難性(Preimage Resistance)」である。これは、あるハッシュ値が与えられたときに、そのハッシュ値を生成した元の入力データを特定することが計算上不可能であるという性質を指す。そして三つ目は「第2原像計算困難性(Second Preimage Resistance)」である。これは、ある入力データとそのハッシュ値が与えられたときに、元の入力データとは異なる別の入力データで同じハッシュ値を生成することが計算上困難であるという性質である。これらの性質により、SHA-3はデータの改ざんを確実に検出し、デジタル署名などでメッセージの完全性を保証する基盤となる。

SHA-3には、出力されるハッシュ値の長さによっていくつかのバリアントが存在する。標準的なハッシュ関数としては、SHA3-224、SHA3-256、SHA3-384、SHA3-512があり、それぞれ224ビット、256ビット、384ビット、512ビットのハッシュ値を生成する。これらのバリアントは、セキュリティ要件に応じて使い分けられる。さらに、SHA-3では「SHAKE(SHA-3 extendable-output function)」という拡張可能な出力関数も定義されている。SHAKE128とSHAKE256は、任意の長さのハッシュ値を生成できるという柔軟性を持つ。例えば、SHAKE128は128ビット相当のセキュリティレベルを持ちながら、ユーザーが指定した任意の長さのビット列を出力できる。これは、多様なアプリケーションやプロトコルにおいて、必要な出力長に応じてハッシュ値を生成できるため、非常に有用である。

SHA-3の利用シナリオは多岐にわたる。デジタル署名では、文書のハッシュ値を計算し、それを秘密鍵で暗号化することで署名を作成する。これにより、文書の作成者を証明し、改ざんを検出することが可能となる。メッセージ認証コード(MAC)では、共有秘密鍵を用いてメッセージのハッシュ値を生成し、メッセージの完全性と認証性を保証する。パスワードの保存においても、パスワードを直接データベースに保存するのではなく、SHA-3のようなハッシュ関数で変換したハッシュ値を保存することで、万が一データベースが漏洩しても元のパスワードが容易には特定できないようにする。また、乱数生成器のシード値の生成や、鍵導出関数としても利用されることがある。SHA-3は、SHA-2をすぐに置き換えるものではなく、セキュリティリスクの分散や将来的な脅威への備えとして、並行して利用されることが想定されている。既存のシステムがSHA-2を利用している場合でも、新しいシステムや特に高いセキュリティが求められる場面でSHA-3が採用されるなど、用途に応じて使い分けが進んでいる状況である。

関連コンテンツ