Подтвердить что ты не робот

Почему зашифрованный текст RSA дает мне разные результаты для одного и того же текста

Я шифрую данные с помощью openSSL, используя шифрование RSA, которое отлично работает. Мое понимание RSA заключается в том, что шифрование одних и тех же данных одним открытым ключом всегда даст вам тот же результат (как указано здесь или здесь).

Однако, используя openssl, я получаю разные результаты каждый раз, когда я повторяю шифрование. Например:

➜  ~  echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin  | shasum
      11b6e058273df1ebe0be5e0596e07a6c51724ca0  -

➜  ~  echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin  | shasum
      05cb82595f7429ef196189f4e781088597d90eee  -

Итак, почему вывод не уникален? Это потому, что я получил шифрование RSA неправильно или потому что openssl делает некоторую дополнительную магию?

На самом деле я пытаюсь создать базу данных, в которой хранятся только зашифрованные данные RSA. Я хотел бы выполнять поиск по хэш-засам зашифрованной информации, что невозможно, если сама процедура шифрования не уникальна.

4b9b3361

Ответ 1

Безопасное шифрование RSA реализовано с соответствующей схемой заполнения, которая включает в себя некоторую случайность. Подробнее см. PKCS # 1 или OAEP.

Шифрование RSA шифрует сообщение, заполненное "0", и строку случайного бита. При этом случайная строка "скрыта" в зашифрованном тексте посредством криптографического хэширования и XORing. При расшифровке расшифровка RSA восстанавливает случайную строку из зашифрованного текста и использует ее для восстановления сообщения. Вот почему вы получаете другой результат с помощью openssl rsautl для того же текстового сообщения.

Ответ 2

Хорошо, я понял. RSA сам по себе является детерминированным. Однако, чтобы получить лучшую защиту и не дать злоумышленникам угадать зашифрованную информацию, шифрование выполняется не по чистым "данным", а по "данным" + "случайным образом" (Я должен был прочитать wikipedia более внимательно)