[PHP]crypto_box_open() 関数について詳しく解説!

PHP

こんにちは、皆さん!今回は、PHPの暗号化ライブラリ「libsodium」で提供される crypto_box_open() 関数について詳しく解説します。この関数は、暗号化されたメッセージを復号するために使用されます。

crypto_box_open() 関数とは?

crypto_box_open() 関数は、公開鍵暗号方式で暗号化されたメッセージを復号するための関数です。これにより、送信者が受信者の公開鍵を使って暗号化したメッセージを、受信者が自身の秘密鍵を使って復号することができます。

基本的な使い方

string sodium_crypto_box_open(string $ciphertext, string $nonce, string $keypair)
  • $ciphertext: 復号する暗号化されたメッセージ。
  • $nonce: 暗号化時に使用されたナンス(nonce)。ナンスは一度しか使われない一意の値で、メッセージの復号に必要です。
  • $keypair: メッセージの復号に使用する鍵ペア。これは受信者の秘密鍵と送信者の公開鍵から構成されます。

この関数は、指定された暗号文を復号し、元の平文を返します。復号に失敗した場合、falseが返されます。

  1. メッセージの復号
// メッセージの暗号化
$secret_key = sodium_crypto_box_secretkey(sodium_crypto_box_keypair());
$public_key = sodium_crypto_box_publickey(sodium_crypto_box_keypair());
$keypair = sodium_crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key);

$message = "Hello, this is a secret message!";
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$ciphertext = sodium_crypto_box($message, $nonce, $keypair);

// メッセージの復号
$decrypted_message = sodium_crypto_box_open($ciphertext, $nonce, $keypair);

if ($decrypted_message === false) {
    echo "復号に失敗しました。\n";
} else {
    echo "復号されたメッセージ: " . $decrypted_message . "\n";
}

この例では、まずメッセージを暗号化し、その後 crypto_box_open() 関数を使って復号しています。

利用シーン

  • 安全な通信: 暗号化されたメッセージを安全に受信し、復号して読む場合に使用されます。
  • 認証付き暗号化: 送信者と受信者が互いに認証し合い、メッセージの機密性と整合性を保証する場合に使用されます。

まとめ

crypto_box_open() 関数は、暗号化されたメッセージを復号するための非常に重要な関数です。公開鍵と秘密鍵の組み合わせを使用することで、安全な通信を実現できます。セキュリティが求められるシステムでは、この関数が大いに役立つことでしょう。

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

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