セキュア・ハッシュ・アルゴリズム(SHA)は、任意の長さのデータを固定長のダイジェスト(フィンガープリント)に変換する暗号ハッシュ関数のファミリーです。これは、完全性チェック、デジタル署名、証明書の信頼性の基盤となっており、IPsec、TLS、およびDTLSにおけるトンネルの認証にも利用されています。
主なポイント
- SHAは、あらゆる入力を、完全性を検証するための固定長ダイジェストに変換します。
- SHA-1は非推奨となっており、SHA-2(SHA-256、SHA-384、SHA-512)が現在の標準となっています。
- SHA-3は、SHA-2の構造的なバックアップとして、異なる内部設計を採用しています。
- HMAC-SHAは、SHAと秘密鍵を組み合わせてメッセージの認証を行います。
- VersaのIKE、IPsec、TLS、およびDTLSの各トランスフォームは、すべてSHAベースのハッシュ処理を提供しています。
このページの内容: その重要性仕組み種類SHA およびVersaよくある質問
SHAはなぜ重要なのでしょうか?
データが改ざんされていないことを証明する仕組みのほぼすべてがハッシュ関数に依存しており、SHAはインターネットで標準化されたハッシュ関数のファミリーです。認証局はSHAに基づくダイジェストを用いて証明書に署名します。また、TLSやIPsecのセッションでは、パケットが転送中に改ざんされていないことを確認するために、SHAを直接、あるいはHMACを介して使用しています。さらに、ソフトウェアの配布業者は、ダウンロードしたファイルの整合性を確認できるよう、SHA-256のチェックサムを公開しています。
こうした依存関係こそが、SHAの歴史が重要である理由でもあります。20年間にわたり主流であったSHA-1は、2017年に実用的な衝突攻撃によって破られ、ブラウザや認証局はSHA-2への移行を余儀なくされました。システムがどのSHAの亜種を使用しているかを把握することは、その完全性の保証が依然として有効であるかどうかを判断するための基本的な前提条件となります。
SHAとは何ですか?
ハッシュ関数は、任意のサイズの入力を取り込み、固定長の出力(ダイジェスト)を生成します。 たとえば、SHA-256は、入力が1バイトであっても1ギガバイトであっても、常に256ビットを出力します。この関数が有用である理由は、次の3つの特性にあります。すなわち、単方向性(入力値を復元することは計算上不可能です)、決定性(同じ入力には常に同じダイジェストが生成されます)、および衝突耐性(同じダイジェストを持つ2つの異なる入力を見つけることは、事実上不可能です)です。
SHAを単独で使用すると、データの整合性チェックのためのフィンガープリントが生成されます。秘密鍵と組み合わせてHMAC-SHA(ハッシュベースのメッセージ認証コード)として使用すると、メッセージの認証が可能になります。これにより、データが改ざんされていないこと、およびそのデータが共有鍵を保持する者から送信されたものであることの両方が証明されます。IPsecやTLSでは、パケットやハンドシェイクメッセージの認証にこの方式が採用されています。
SHAの種類
SHA-1は160ビットのダイジェストを生成し、1995年に公開されました。実証された衝突攻撃(2017年の「SHAttered」研究)により、その衝突耐性が破られ、現在では新規導入において非推奨となっていますが、レガシーな設定オプションには依然として含まれている場合があります。
SHA-2は2001年に公開された現在の標準規格です。これは、SHA-224、SHA-256、SHA-384、SHA-512、および切り捨て変種といったハッシュサイズの一連のアルゴリズムからなるファミリーであり、SHA-256はTLS証明書、コード署名、およびIPsecトランスフォームにおいて最も一般的な基準となっています。SHA-2には、実用的な衝突攻撃は知られていません。
2015年に公開されたSHA-3は、構造が異なります。SHA-1やSHA-2で採用されているマークル・ダムガード方式ではなく、スポンジ構造(Keccak)を採用しています。これは代替手段ではなく、予備として標準化されたものであり、現在のネットワークプロトコルにおける採用率はSHA-2に比べて低くなっています。
SHA &Versa
VersaのSecure Access Serviceの設定では、トンネル暗号化においてSHAが直接使用されます。 セキュアアクセスサーバーまたはSASE クライアントプロファイルのIKEトランスフォームを設定すると、鍵交換制御チャネル用に、暗号化アルゴリズム(3DES、AES 128ビット、またはAES 256ビット)とハッシュアルゴリズム(MD5、SHA-1、SHA-256、SHA-384、またはSHA-512)が組み合わされます。 IPsec (ESP) トランスフォームでは、データプレーン・トンネルに対して同様の SHA 選択肢が提供されるほか、認証を個別の SHA ハッシュと組み合わせるのではなく、暗号化方式に統合する GCM モードも利用可能です。
SHAは、セキュアアクセスポータルやSASE クライアントセッション向けに提供されているTLSおよびDTLSの暗号スイートにも含まれています。例えば、 TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 – 末尾の「SHA」という表記は、ハンドシェイクの整合性アルゴリズムを設定するものです。管理者は、Secure SD-WAN およびNGFWを前面に配置した環境を問わず、トンネルごとにSHAの強度を調整します。SHA-256以上の強度を優先し、SHA-1およびMD5は互換性確保のみを目的として扱うようにしてください。
よくある質問
SHA-1とSHA-256の違いは何ですか?
SHA-1は160ビットのダイジェストを生成しますが、衝突攻撃に対して破られているため、新たなセキュリティ用途には使用すべきではありません。SHA-2ファミリーの一員であるSHA-256は、256ビットのダイジェストを生成し、実用的な衝突攻撃は知られておらず、現在推奨されている基準となっています。
SHAは暗号化ですか、それともハッシュ化ですか?
ハッシュ化であり、暗号化ではありません。暗号化は正しい鍵があれば復号可能ですが、ハッシュ化は設計上一方向性であり、SHAダイジェストから元の入力を復元するための鍵は存在しません。SHAはデータの整合性を検証し、HMACとして鍵と組み合わせることで、その認証も行います。
なぜSHA-1は非推奨となったのでしょうか?
2017年、研究者たちは、2つの異なる入力が同じSHA-1ダイジェストを生成するという実用的な衝突を実証し、これにより、SHA-1が署名や証明書において信頼性を確保していた特性を破った。その後、ブラウザや認証局は、新規の証明書に対してSHA-2以降のアルゴリズムの使用を義務付けた。
HMAC-SHAとは何ですか?また、SHA単体とはどのように異なりますか?
HMAC-SHAは、SHAハッシュ関数と秘密鍵を組み合わせて、鍵付き認証コードを生成します。通常のSHAはデータが改ざんされていないことを証明しますが、HMAC-SHAはさらに、送信者が共有鍵を保有していたことも証明します。IPsecやTLSでは、トンネル通信の認証にこのHMAC-SHAが使用されています。
今日はどのSHAバリアントを使えばいいでしょうか?
SHA-256は、現在、証明書、TLSハンドシェイク、およびIPsecトランスフォームにおいて事実上のデフォルトとなっています。SHA-384やSHA-512は、より大きなダイジェストサイズに対応できる高信頼性の導入環境において、さらなる余裕をもたらします。SHA-1およびMD5の使用は、アップグレードできないレガシーな相手との相互運用性に厳格に限定すべきです。
SHAに関する詳細
さらに詳しく知りたい場合は、私たちが信頼している情報源を以下にご紹介します。
| RFC 3174: 米国セキュアハッシュアルゴリズム 1 (SHA1) | RFC 6234: 米国のセキュアハッシュアルゴリズム(SHA および HMAC) |
|---|---|
| SHA-1アルゴリズムに関するIETFのオリジナル仕様書。これには、擬似コードおよび検証用の完全な参照実装が含まれている。 | SHA-1およびSHA-2ダイジェストファミリー、ならびにそれらに基づいて構築されたSHAベースのHMACおよびHKDFの仕組みを網羅したIETF仕様。 |
関連用語
SHAについてお読みの方は、次にこれらもぜひご覧ください。
| 高度暗号化規格 | ガロア/カウンターモード | データグラム型トランスポート層セキュリティ |
|---|---|---|
| 対称暗号SHAは、IPsecやTLSのトランスフォームにおいて、暗号化と完全性の両方を確保するために最も頻繁に組み合わされています。 | ハッシュ処理を暗号化アルゴリズム自体に組み込んだ認証付き暗号化モードであり、AESとSHAを別々に適用する方式の代替として提供されている。 | TLSと同様に、ハンドシェイクの完全性を確保するためにSHAの変種を組み込んだ暗号スイートを備えた、UDPベースのトンネルプロトコル。 |