暗号化アルゴリズムは、現代のデジタル社会においてデータの機密性と完全性を守るための基盤技術です。共通鍵暗号、公開鍵暗号、ハッシュ関数の3つの主要カテゴリに分類され、それぞれ異なる特性と用途を持っています。本記事では、NISTなどの標準化機関が推奨する主要な暗号化アルゴリズムについて解説します。
共通鍵暗号方式(対称鍵暗号)
共通鍵暗号方式は、暗号化と復号化に同じ鍵を使用する方式です。処理速度が高速であるため、大量のデータ暗号化に適しています。現在最も広く使用されているのはAES(Advanced Encryption Standard)で、2001年にNISTによって標準化されました。128ビットブロックに対して128/192/256ビットの鍵長をサポートし、TLS/SSL通信、VPN、Wi-Fi、ディスク暗号化など幅広い用途で利用されています。特にAES-256-GCMは、認証付き暗号として高い安全性を提供します。
一方、ChaCha20はGoogleが広めたストリーム暗号で、モバイルデバイスやARMプロセッサなどAES実装が遅い環境で優位性を発揮します。TLS 1.3ではChaCha20-Poly1305として標準化されています。古いアルゴリズムとしてはDESや3DESがありますが、いずれも安全性の問題から段階的に廃止が進められており、新規システムでは使用しないことが推奨されています。
公開鍵暗号方式(非対称鍵暗号)
公開鍵暗号方式は、数学的に関連する公開鍵と秘密鍵のペアを使用します。公開鍵は誰でも知ることができ、秘密鍵は所有者のみが保持します。最も有名なのはRSAで、素因数分解の困難性を安全性の基盤としています。2048ビット以上の鍵長が推奨され、電子署名や鍵交換に広く使用されています。ただし、処理速度が対称鍵暗号より遅いため、通常はセッション鍵の暗号化などに限定して使用されます。
ECC(楕円曲線暗号)は、RSAと同等の安全性を短い鍵長で実現できるため、新規システムでの採用が推奨されています。224ビットのECCは2048ビットのRSAと同等の安全性を持ち、処理速度と通信効率に優れています。モバイルデバイスやIoT機器などリソース制約のある環境に特に適しています。
ハッシュ関数
ハッシュ関数は、任意長の入力から固定長のハッシュ値を生成する一方向性の関数です。SHA-256は現在の標準的なハッシュ関数で、256ビットの出力を持ち、デジタル署名、証明書、ブロックチェーンなどに広く使用されています。SHA-3は2015年に標準化された最新のハッシュ関数ファミリーで、SHA-2とは異なる構造を持ち、代替手段として位置づけられています。
一方、MD5やSHA-1は衝突攻撃が可能となっており、セキュリティ上の理由から使用が推奨されません。MD5はファイルの整合性チェックなど、セキュリティを要求しない用途でのみ使用可能です。SHA-1は2017年にGoogleが実用的な衝突攻撃を実演し、TLS証明書やデジタル署名での使用が段階的に廃止されています。
耐量子暗号(Post-Quantum Cryptography)
量子コンピュータの発展に伴い、従来の公開鍵暗号(RSA、ECCなど)は量子アルゴリズムによって破解される可能性があります。これに対応するため、NISTは2024年8月に最初の耐量子暗号標準を発表しました。ML-KEM(鍵カプセル化メカニズム)とML-DSA(デジタル署名アルゴリズム)は、格子暗号の困難性を基にしており、量子コンピュータによる攻撃に耐性を持ちます。重要インフラや長期間の機密性が必要なデータを扱うシステムでは、早急な移行計画の検討が推奨されています。
アルゴリズム選定のポイント
暗号化アルゴリズムを選定する際は、以下の点を考慮することが重要です。データ暗号化にはAES-256-GCMまたはChaCha20-Poly1305を、鍵交換や電子署名にはECC P-384またはRSA-4096を推奨します。パスワードの保存にはArgon2やPBKDF2などの専用ハッシュ関数を使用し、単純なハッシュ関数(SHA-256など)を直接使用することは避けるべきです。また、NISTやIETFなどの標準化機関の最新の推奨事項を確認し、脆弱とされたアルゴリズム(DES、3DES、RC4、MD5、SHA-1など)は使用しないことが重要です。