ホームページ >バックエンド開発 >PHPチュートリアル >非対称キーとphpseclibで大きなメッセージを暗号化する方法

非対称キーとphpseclibで大きなメッセージを暗号化する方法

Christopher Nolan
Christopher Nolanオリジナル
2025-02-18 09:11:12381ブラウズ

このチュートリアルは、非対称キーとPHPSECLIBライブラリを使用して大きなメッセージを暗号化する方法を示しています。


重要な概念How to Encrypt Large Messages with Asymmetric Keys and phpseclib RSAと同様に、非対称暗号化は、暗号化のために公開キーと復号化の秘密鍵を使用することにより、キーの分布の課題を解決します。 これにより、秘密キーホルダーのみが復号化できるため、安全な公開キーの共有が可能になります。

RSAの制限は、その制限されたプレーンテキスト容量です。 2048ビットキーは通常、最大256バイトを処理します。

ハイブリッド暗号化(対称と非対称の方法を組み合わせて)これを克服します。 対称キーがメッセージを暗号化し、この対称キーは受信者の公開キーで暗号化され、追加されます。受信者は秘密鍵を使用して対称キーを復号化し、それを使用してメッセージを復号化します。

PHP Secure Communications Library(PHPSECLIB)は、RSAや対称アルゴリズム(DES、AES)を含むさまざまな暗号化アルゴリズムの純粋なPHP実装を提供する無料のオープンソースライブラリです。ハイブリッド暗号化をサポートし、暗号化が速く拡張されなくても確実に機能します。

はじめに

伝送前に機密データを暗号化することが重要です。暗号化は、キーとアルゴリズムを使用して、プレーンテキスト(通常のデータ)を暗号文(秘密データ)に変換します。復号化はこのプロセスを逆転させます。

暗号化アルゴリズムは、数学操作をキーとプレーンテキストの数値値に適用して、暗号文を生成します。 より大きなキーはセキュリティを強化します。

キーディストリビューションは重要な課題です。承認された受信者にキーを安全に送信するにはどうすればよいですか? ソリューションは、アルゴリズムとキータイプに依存します

暗号化アルゴリズムとキー

2つの主要な暗号化アルゴリズムタイプが存在します:

対称アルゴリズム:

暗号化と復号化に同じキーを使用します。 キーエクスチェンジは脆弱性です。

非対称アルゴリズム:
    個別のパブリックキーとプライベートキーを使用します。 公開キーで暗号化されたデータは、対応する秘密鍵でのみ復号化できます。 これは、セキュリティを損なうことなく公開キーを共有できるため、キーの分布の問題を解決します。
  1. 暗号化アルゴリズムの選択
  2. 強いアルゴリズムは高度な数学に依存しています。 強度は、キーなしで復号化に必要な時間によって決まります。 国立標準技術研究所(NIST)は推奨事項を提供しています。 一般的な非対称アルゴリズムにはRSAとDSAが含まれ、RSAはそのスケーラビリティのために商業的に好まれることがよくあります。 Rijndael(AES)は、広く使用されている対称アルゴリズムです
  3. rsaキー制限 非対称アルゴリズムは重要な分布を解決しますが、RSAにはプレーンテキスト暗号化容量が限られています。 2048ビットキーは、最大256バイトのみを暗号化する場合があります。

    ソリューション:ハイブリッド暗号化

    最適なソリューションは、対称暗号化と非対称暗号化を組み合わせます:

    1. 対称暗号化:ランダムに生成された対称キーを使用して大きなメッセージを暗号化します。
    2. 非対称暗号化:受信者の公開キーを使用して対称キーを暗号化します。
    3. 送信:
    4. 暗号化されたメッセージと暗号化された対称キーを受信者に送信します。 受信者はプロセスを逆転させます。対称キーを秘密鍵で復号化し、メッセージを復号化します。 phpseclibを使用した
    5. 実装

    この例では、PHP Secure Communications Library(PHPSECLIB)を使用しています。 Composerを介してインストールします。 ドキュメントは、

    キーの生成

    暗号化関数

    復号化関数

    <code class="language-php">$rsa = new Crypt_RSA();
    $keys = $rsa->createKey(2048);
    
    file_put_contents('key.pri', $keys['privatekey']);
    file_put_contents('key.pub', $keys['publickey']);</code>

    結論

    <code class="language-php">function encrypt_message($plaintext, $asym_key, $key_length = 150) {
        $rsa = new Crypt_RSA();
        $rij = new Crypt_Rijndael();
    
        $sym_key = crypt_random_string($key_length);
        $rij->setKey($sym_key);
        $ciphertext = $rij->encrypt($plaintext);
        $ciphertext = base64_encode($ciphertext);
    
        $rsa->loadKey($asym_key);
        $sym_key = $rsa->encrypt($sym_key);
        $sym_key = base64_encode($sym_key);
        $len = strlen($sym_key);
        $len = dechex($len);
        $len = str_pad($len, 3, '0', STR_PAD_LEFT);
    
        $message = $len . $sym_key . $ciphertext;
        return $message;
    }</code>
    安全なデータ通信が不可欠です。 対称アルゴリズムと非対称アルゴリズムの両方を活用するハイブリッド暗号化は、堅牢なソリューションを提供します。 PHPSECLIBは、このアプローチをPHPで実装するための信頼性が高く汎用性の高いツールを提供します。 ソースコードはgithub(元のテキストで提供されているリンク)で入手できます。

以上が非対称キーとphpseclibで大きなメッセージを暗号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。