3

Web サイトを持っていて、フォームを安全にしようとしています。私はいくつかの調査を行いましたが、プログラマーではありませんが、自家製のチャレンジ/レスポンス メカニズムを介してユーザーを認証し、mcrypt ライブラリの aes 暗号化を使用してフォーム値を暗号化しています。これまでのところすべて順調です。私のaesパスワードをクライアントからサーバーに送信する必要があることを除いて...安全に。RSAがうまくいくと思いました。phpseclib をダウンロードしたので、サーバー側で暗号化/復号化に成功しました。ここで、RSA を暗号化するためのクライアント側コードが必要でした。ここでこのライブラリを使用しましたhttp://www.ohdave.com/rsa/。さて...ここに私の問題があります。

  1. phpseclib を使用して、php でキーのペアを生成します。
  2. プライベート指数、パブリック指数、モジュラス (パブリック) を抽出します。
  3. 公開指数とモジュラス (パブリック) を 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 を検索または変更する方法を教えてください。

4

1 に答える 1

0

phpseclibは、デフォルトでOAEPパディングを実行します。これは、JavaScriptを相互運用可能にするデモです。

http://www.frostjedi.com/terra/dev/rsa/index.php

これは、JavaScriptでPKCS#1パディングを行うWebサイトです。

http://www-cs-students.stanford.edu/~tjw/jsbn/rsa.html

于 2012-01-20T07:00:48.133 に答える