PHPの crypto_aead_aes256gcm_decrypt() 関数について詳しく解説!

PHP

こんにちは!今回は、PHPの暗号化ライブラリ「libsodium」で使用される crypto_aead_aes256gcm_decrypt() 関数について詳しく解説します。この関数は、AES-256-GCM(Galois/Counter Mode)暗号化モードを使用して暗号化されたデータを復号化するために使用されます。

crypto_aead_aes256gcm_decrypt() 関数とは?

crypto_aead_aes256gcm_decrypt() 関数は、AES-256-GCMモードで暗号化されたデータを復号化し、元のプレーンテキストを取得するための関数です。このモードは認証付き暗号化であり、データの機密性と完全性を保証します。

基本的な使い方

string crypto_aead_aes256gcm_decrypt ( string $ciphertext , string $ad , string $nonce , string $key )
  • $ciphertext: 復号化する暗号文です。
  • $ad: 認証データ(付加データ)です。暗号化時に使用された認証データと同じものを指定する必要があります。
  • $nonce: 暗号化時に使用された一意の値(ナンス)です。通常、ランダムな値を使用します。
  • $key: 暗号化と復号化に使用される256ビットの秘密鍵です。

  1. 基本的な復号化の例
// 暗号文、認証データ、ナンス、秘密鍵を指定します。
$ciphertext = "暗号化されたデータ";
$ad = "認証データ";
$nonce = "一意のナンス";
$key = "256ビットの秘密鍵";

try {
    $plaintext = crypto_aead_aes256gcm_decrypt($ciphertext, $ad, $nonce, $key);
    echo "復号化されたプレーンテキスト: " . $plaintext;
} catch (SodiumException $e) {
    echo "復号化に失敗しました: " . $e->getMessage();
}

この例では、指定された暗号文、認証データ、ナンス、および秘密鍵を使用してデータを復号化し、元のプレーンテキストを取得しています。

  1. 実際のデータを使用した例
$key = sodium_crypto_aead_aes256gcm_keygen(); // 秘密鍵の生成
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES); // ナンスの生成
$ad = "追加の認証データ";
$plaintext = "秘密のメッセージ";

// 暗号化
$ciphertext = sodium_crypto_aead_aes256gcm_encrypt($plaintext, $ad, $nonce, $key);

// 復号化
try {
    $decrypted = sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $ad, $nonce, $key);
    echo "復号化されたメッセージ: " . $decrypted;
} catch (SodiumException $e) {
    echo "復号化に失敗しました: " . $e->getMessage();
}

この例では、ランダムに生成された秘密鍵とナンスを使用してデータを暗号化し、そのデータを再度復号化しています。

注意点

  • ナンスの再利用禁止: 同じナンスを異なるメッセージで再利用しないでください。再利用すると暗号の安全性が損なわれます。
  • 認証データの一致: 暗号化時と同じ認証データを復号化時にも使用する必要があります。認証データが一致しない場合、復号化に失敗します。
  • 秘密鍵の管理: 秘密鍵は安全に管理し、不正アクセスを防止する必要があります。

まとめ

crypto_aead_aes256gcm_decrypt() 関数は、AES-256-GCM暗号化モードを使用して暗号化されたデータを復号化するための強力なツールです。この関数を正しく使用することで、データの機密性と完全性を保ちながら、安全な通信を実現できます。

次回もお楽しみに!Happy coding!

タイトルとURLをコピーしました