Web サイトを持っていて、フォームを安全にしようとしています。私はいくつかの調査を行いましたが、プログラマーではありませんが、自家製のチャレンジ/レスポンス メカニズムを介してユーザーを認証し、mcrypt ライブラリの aes 暗号化を使用してフォーム値を暗号化しています。これまでのところすべて順調です。私のaesパスワードをクライアントからサーバーに送信する必要があることを除いて...安全に。RSAがうまくいくと思いました。phpseclib をダウンロードしたので、サーバー側で暗号化/復号化に成功しました。ここで、RSA を暗号化するためのクライアント側コードが必要でした。ここでこのライブラリを使用しましたhttp://www.ohdave.com/rsa/。さて...ここに私の問題があります。
- phpseclib を使用して、php でキーのペアを生成します。
- プライベート指数、パブリック指数、モジュラス (パブリック) を抽出します。
公開指数とモジュラス (パブリック) を JavaScript に送信します。
include('Scripts/phpseclib/Crypt/RSA.php'); require_once('Scripts/phpseclib/Math/BigInteger.php'); session_start(); $rsa = new Crypt_RSA(); extract($rsa->createKey(512)); $priv = $rsa->_parseKey($privatekey,CRYPT_RSA_PRIVATE_FORMAT_PKCS1); $privExp = $priv['privateExponent']->toHex(); $pubExp = $priv['publicExponent']->toHex(); $pubMod = $priv['modulus']->toHex(); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $_SESSION['privatekey']=$privatekey; $_SESSION['publickey']=$publickey;
JavaScript は乱数を生成します。これがパスワードになり、それがさらに AES 暗号化に使用されます。JavaScript は、サーバーから php から送信された公開指数とモジュラス (パブリック) を使用して、javascript でランダムに生成された文字列 (これが aes キーになります) を暗号化し、それを PHP サーバーに送り返します。復号化。
password = random();
key = new RSAKeyPair(
"<?php echo $pubExp; ?>",
"",
"<?php echo $pubMod; ?>"
);
x = encryptedString(key,password);
y = decryptedString(key,x);
document.write(" text cryptat = "+x);
document.write(" text decryptat = "+y);
window.location = "rsa.php?text="+x;
</script>
PHP サーバーは暗号化された文字列を受け取り、最初から生成されたプライベート指数を使用すると、aes キー (クライアント側の JavaScript によってランダムに生成されます) を復号化できるため、外部の介入なしにクライアントとサーバーの間で鍵合意が生成されます。
問題: JavaScript はランダムな文字列を暗号化します....しかし PKCS#1 v1.5 は暗号化しません....phpseclib は PKCS#1 v1.5 パディングのみを受け入れるため、php スクリプトは正しく復号化できません。
暗号化された文字列形式 PKCS# v 1.5 を php スクリプトに出力するために、JavaScript を検索または変更する方法を教えてください。