Совместимость rsa.js и rsa.php - PullRequest
       34

Совместимость rsa.js и rsa.php

3 голосов
/ 20 января 2012

У меня есть веб-сайт, и я пытаюсь обезопасить свои формы. Я провел некоторое исследование, и хотя я не программист, я аутентифицирую пользователей с помощью самодельного механизма «вызов-ответ» и шифрую значения форм, используя шифрование aes из библиотеки mcrypt. Пока все хорошо. За исключением того, что мой пароль AES должен быть отправлен от клиента к серверу ... безопасно. Я думал, что RSA сделает свое дело. Итак, я скачал phpseclib, я успешно зашифровал / расшифровал на стороне сервера. Теперь мне нужен был код на стороне клиента для шифрования RSA. Я использовал эту библиотеку здесь http://www.ohdave.com/rsa/. Теперь ... вот моя проблема.

  1. Я генерирую пару ключей в php, используя phpseclib.
  2. Я извлекаю частный показатель, открытый показатель и модуль (открытый).
  3. Я отправляю открытый показатель и модуль (public) в 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 будет использовать открытый показатель и модуль (public), отправленные с 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 не может правильно расшифровать.

Пожалуйста, помогите мне найти или изменить JavaScript, чтобы вывести в скрипт php зашифрованный строковый формат PKCS # v 1.5, который он ожидает.

1 Ответ

0 голосов
/ 20 января 2012

phpseclib по умолчанию выполняет заполнение OAEP.Вот демонстрация того, как сделать javascript совместимым с этим:

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

Вот сайт, который выполняет заполнение PKCS # 1 в javascript:

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

...