日本にはAESとほぼ同格の国産暗号がある——それがCamellia(カメリア)だ。2000年にNTTと三菱電機が共同開発したこの128ビットブロック暗号は、日本の電子政府推奨暗号リストであるCRYPTREC(Cryptography Research and Evaluation Committees)にAESと並んで登録されており、ISO/IEC 18033-3にも国際標準として採用されている。
なぜAESと同等の暗号がもう一つ存在するのか
CamelliaはAESの代替や競合というより、「日本発の暗号技術も国際的な安全性評価に耐えられる」ことを示すプロジェクトという性格が強い。実際、速度や安全性の評価はAESとほぼ同水準とされ、OpenSSLやTLSの暗号スイートにも組み込まれている。CRYPTRECは日本の政府情報システムで使用が推奨される暗号を定期的に評価・更新しており、AESもCamelliaもその「電子政府推奨暗号リスト」に載っている点は共通している。
動作モード:CBC対GCM
AESは固定サイズのブロックでデータを暗号化するため、動作モードによってこれらのブロックがどう関連付けられるかが決まります。CBC(Cipher Block Chaining)は各ブロックを前のブロックに連鎖させ、機密性を保証しますがデータの整合性はチェックしません。GCM(Galois/Counter Mode)は認証を追加します——データを暗号化しつつ、それが改ざんされていないことも保証するため、現在はこちらが標準的な選択とされています。
初期化ベクトル(IV)がなぜ必要か
追加の変化なしに同じ鍵で同じデータを暗号化すると、結果は常に同一になります——これは繰り返されるブロックに関する情報を漏らします。初期化ベクトルは各暗号化操作に追加される一意のランダムな値で、同じ入力データと同じ鍵であっても異なる結果を保証します。
なぜこれが必要か
- 保存やネットワーク経由での送信の前に機密データを暗号化する。
- CRYPTRECのような評価リストに複数の暗号が並存する理由を理解する。
- 別のシステムで暗号化されたデータを復号する際の互換性の問題を診断する。
AES-128とAES-256: 長い鍵は本当に必要か
直感的には鍵の長さが2倍になれば保護も2倍になるように思えますが、実際にはAES-128は今日でも暗号学的に十分安全とされており、それを破る実用的な攻撃は存在しません。AES-256は将来の理論的な突破(特に量子コンピューティング)に備えたより大きな安全マージンを提供しますが、その分わずかに計算コストが高くなります。したがって両者の選択は「安全か危険か」ではなく、性能と安全マージンのトレードオフです。