2013-05-01 4 views
21

Я шифрую данные с помощью openSSL с использованием шифрования RSA, который отлично работает. Мое понимание RSA заключается в том, что шифрование одних и тех же данных одним и тем же открытым ключом всегда даст вам тот же результат (as stated here или here).Почему зашифрованный текст 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. Я хотел бы выполнять поиск по хэш-засам зашифрованной информации, что невозможно, если сама процедура шифрования не уникальна.

+0

FWIW, rsautil обесценивается в пользу [pkeyutil] (http://www.openssl.org/docs/apps/pkeyutl.html) –

ответ

38

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

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

5

Хорошо, я понял. RSA сам по себе является детерминированным. Однако, чтобы получить более высокий уровень безопасности и предотвратить нападавшие угадать зашифрованную информацию, шифрование выполняется не на чистые «данные», а на «данные» + «какой-хаотическом узор» (I should have read wikipedia more carefully)

+0

Речь идет не только об угадывании зашифрованной информации. Даже если информация неопровержимая (скажем, 128-битный ключ), не используя правильную схему заполнения, приводит к серьезным недостаткам. Даже популярная схема PKCS # 1 v1.5 слаба. – CodesInChaos

Смежные вопросы