Overview
共通鍵暗号(Symmetric Encryption)とは、暗号化と復号に同一の鍵(秘密鍵)を使用する暗号方式です。送信者と受信者が同じ鍵を共有し、その鍵を用いてデータの暗号化・復号を行います。公開鍵暗号と比較して処理速度が高速であり、大量データの暗号化に適しています。
現在の共通鍵暗号の国際標準はAES(Advanced Encryption Standard)です。AESは2001年にNIST(米国国立標準技術研究所)が公募・選定したアルゴリズムで、ベルギーの暗号学者Joan DaemenとVincent Rijmenが設計した「Rijndael」が採用されました。
AESは現在、世界中の政府機関、金融機関、企業で広く使用されており、Wi-Fi(WPA2/WPA3)、VPN、TLS通信、ディスク暗号化(BitLocker、FileVault)など、あらゆる場面でデータ保護の基盤となっています。
Details
AESの仕組み
AESはブロック暗号の一種で、128ビット(16バイト)の固定ブロック単位でデータを処理します。鍵長は128ビット、192ビット、256ビットの3種類から選択でき、それぞれAES-128、AES-192、AES-256と呼ばれます。処理はラウンドと呼ばれる変換を繰り返し適用する構造で、鍵長に応じてラウンド数が異なります(128ビット:10ラウンド、192ビット:12ラウンド、256ビット:14ラウンド)。
各ラウンドでは以下の4つの変換が実行されます:
- SubBytes:S-Boxと呼ばれる置換表を使ってバイト単位で非線形な置換を行う
- ShiftRows:行ごとに異なるバイト数だけ左シフトし、データを拡散させる
- MixColumns:列ごとにガロア体上の演算を行い、バイト間の相関を高める
- AddRoundKey:ラウンド鍵とのXOR演算を行い、鍵情報を混合する
AES以前の共通鍵暗号
DES(Data Encryption Standard)は1977年に米国の標準暗号として採用されましたが、鍵長が56ビットと短く、1999年には専用ハードウェアで22時間以内に解読可能であることが実証されました。その後、DESを3回繰り返す3DES(Triple DES)が暫定的に使われましたが、処理速度の遅さとブロック長の短さ(64ビット)が課題でした。
共通鍵暗号の課題:鍵配送問題
共通鍵暗号の最大の課題は鍵配送問題です。暗号化と復号に同じ鍵を使用するため、通信相手と安全に鍵を共有する方法が必要です。n人が相互に暗号通信を行うには n(n-1)/2 個の鍵が必要となり、ユーザー数の増加に伴い鍵管理が複雑化します。この問題を解決するため、実際の通信では公開鍵暗号やDiffie-Hellman鍵交換を組み合わせたハイブリッド暗号方式が一般的に使用されています。
主な共通鍵暗号アルゴリズム
- AES:現在の国際標準。128/192/256ビット鍵、128ビットブロック
- ChaCha20:Googleが推進するストリーム暗号。モバイル環境で高速
- Camellia:日本発(NTT・三菱電機)の暗号。AESと同等の安全性
- Blowfish/Twofish:Bruce Schneier設計。Twofishは AES候補の一つだった
Security Measures
- 01十分な鍵長の選択:AES-128は現時点で安全ですが、長期保存データや高機密情報にはAES-256を推奨します。量子コンピュータの脅威を考慮すると、256ビット鍵がGroverのアルゴリズムに対しても128ビット相当の安全性を維持します。
- 02適切な暗号利用モードの選択:ECBモードは同一平文が同一暗号文になるため絶対に使用しないでください。認証付き暗号(AEAD)であるGCMモードの使用を強く推奨します。CBCモードを使用する場合はHMACによる認証を必ず追加しましょう。
- 03安全な鍵生成:暗号鍵は暗号論的擬似乱数生成器(CSPRNG)を使用して生成してください。パスワードから鍵を導出する場合はPBKDF2、bcrypt、Argon2などの鍵導出関数を使用し、十分なイテレーション回数を設定します。
- 04IV(初期化ベクトル)の適切な管理:IVは毎回異なる値を使用し、予測不可能であることが重要です。GCMモードでは同一鍵でIVを再利用すると認証機能が完全に破綻するため、特に注意が必要です。
- 05定期的な鍵ローテーション:暗号鍵には有効期限を設け、定期的に更新してください。同一鍵で暗号化するデータ量が増えるほど、統計的攻撃のリスクが高まります。
- 06レガシー暗号の廃止:DES、3DES、RC4などの古い暗号アルゴリズムは脆弱性が確認されているため、速やかにAESまたはChaCha20に移行してください。
Incidents
📋 Adobe社 大規模パスワード漏洩事件(2013年)
2013年10月、Adobe社から約1億5300万件のユーザーアカウント情報が流出しました。特に問題だったのは、パスワードがAESのECBモードで暗号化されていたことです。ECBモードでは同じパスワードが同じ暗号文になるため、暗号化されたパスワードのパターン分析が可能でした。さらに、全ユーザーに対して同一の暗号鍵が使用されていたため、パスワードヒントと組み合わせることで大量のパスワードが推測される事態となりました。この事件は、暗号利用モードの選択がいかに重要であるかを示す教科書的な事例です。
📋 WEP(Wired Equivalent Privacy)の崩壊(2001年〜)
Wi-Fiの初期暗号化規格WEPは、RC4ストリーム暗号を基盤としていましたが、IV(初期化ベクトル)の長さが24ビットと短く、鍵スケジューリングアルゴリズムに脆弱性がありました。2001年にFluhrer-Mantin-Shamir攻撃が発表され、数分間の通信傍受で暗号鍵を復元できることが実証されました。この事件を契機にWPA/WPA2(AESベース)への移行が進みました。
📋 SWEET32攻撃による3DES・Blowfishの脆弱性(2016年)
2016年、フランスINRIAの研究者らが64ビットブロック暗号(3DES、Blowfish)に対する「SWEET32」攻撃を発表しました。この攻撃は誕生日パラドックスを利用し、同一鍵で約32GB(2^32ブロック)のデータを暗号化すると暗号文の衝突が発生し、平文情報が漏洩することを示しました。この研究により、多くのブラウザやサーバーが3DESのサポートを終了し、AES(128ビットブロック)への完全移行が加速しました。