Как зашифровать сообщения/текст с RSA & OpenSSL?

синхронизация; синхронизация; синхронизация; перезагрузка

может иногда быть действительно полезным. Будьте осторожны!

29
29.03.2017, 23:55
3 ответа

В openssl руководстве (openssl страница справочника), поиск RSA, и Вы будете видеть, что команда для шифрования RSA rsautl. Затем читайте rsautl страница справочника для наблюдения ее синтаксиса.

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

Дополнительная схема значения по умолчанию является исходным PKCS#1 v1.5 (все еще используемый во многих procotols); openssl также поддерживает OAEP (теперь рекомендуемый) и необработанное шифрование (только полезный при особых обстоятельствах).

Обратите внимание, что использование openssl непосредственно является главным образом осуществлением. На практике Вы использовали бы инструмент, такой как gpg (который использует RSA, но не непосредственно зашифровать сообщение).

36
27.01.2020, 19:38
  • 1
    , Какова проблема с использованиемopenssl? –  Bratchley 12.01.2017, 02:06
  • 2
    @Bratchley openssl инструмент командной строки является смесью различных команд. Некоторые, главным образом те, которые управляют сертификатами, могут быть полезны, но тверды использовать правильно, потому что их синтаксис и параметры являются изворотливыми. Некоторые, как rsautl, прекрасны, но не обеспечивают полезную функциональность, они просто выставляют необработанные криптографические примитивы — например, шифрование RSA в значительной степени только используется для шифрования симметричного ключа для гибридного шифрования. Некоторые, как enc, очень тверды использовать надежно, и мир был бы более обеспечен, если бы они не существовали. –  Gilles 'SO- stop being evil' 12.01.2017, 02:26
  • 3
    Большой ответ. Я добавил, что дополнение этим флагом-oaep Затем на дешифрует, указывает, что то же... openssl rsautl - дешифрует - в message.encrypted-inkey private_key.pem-oaep –  rustyMagnet 28.02.2018, 12:48

В ниже, обратите внимание, что можно указать любой алгоритм, который Вы хотите, быть этим те перечисленные или RSA (хотя я не знаю точное имя, используемое для RSA OpenSSL),

используйте "openssl enc - справка" для получения списка поддерживаемых шифров в системе и передачи что как аргумент. например, "-aes256"

Примечание по моей системе у меня нет RSA в моих опциях - по крайней мере, тем именем.


Как я шифрую сообщение S/MIME?

Скажем, то, что кто-то отправляет Вам ее общедоступный сертификат и просит, чтобы Вы зашифровали некоторое сообщение ей. Вы сохранили ее сертификат как она-cert.pem. Вы сохранили свой ответ как my-message.txt.

Получить значение по умолчанию — хотя довольно слабый — шифрование RC2-40, Вы просто говорите openssl, где сообщение и сертификат расположены.

openssl smime ее-cert.pem - шифруют - в my-message.txt

Если Вы вполне уверены, у Вашего удаленного корреспондента есть устойчивый инструментарий SSL, можно указать стойкий алгоритм шифрования как тройной DES:

openssl smime ее-cert.pem - шифруют-des3 - в my-message.txt

По умолчанию зашифрованное сообщение, включая почтовые заголовки, отправляется в стандартный вывод. Используйте - опция или Ваша оболочка для перенаправления его в файл. Или, намного более хитрые, передайте вывод по каналу непосредственно к sendmail.

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <you@youraddress.com>' \
   -to 'Her Fullname <her@heraddress.com>' \
   -subject 'My encrypted reply' |\
 sendmail her@heraddress.com

Как я подписываю сообщение S/MIME?

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

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <you@youraddress.com>' \
   -to 'Her Fullname <her@heraddress.com>' \
   -subject 'My signed reply' |\
 sendmail her@heraddress.com

(из http://www.madboa.com/geek/openssl/)

(er... все те обратные косые черты - они, как предполагается, являются оставленными новыми строками. не уверенный, что продолжается, поскольку это отображается прекрасный в моем окне редактирования здесь!

5
27.01.2020, 19:38
  • 1
    Необходимо поместить четыре пробелов в начале каждой строки для сохранения новых строк. Я изменил первый блок, чтобы показать Вам как. Можно ли зафиксировать второе? –  Mikel 29.04.2011, 02:21
  • 2
    Вы не нашли RSA в openssl enc потому что enc для симметричного шифрования только. Да, опции openssl очень хорошо не организованы. Алгоритмы Asymetric имеют свои собственные команды: rsa/dsa/dh управлять ключами, rsautl/dsautl зашифровать/дешифровать/проверить/подписать, и genrsa/gendsa/gendh генерировать ключи. –  Gilles 'SO- stop being evil' 29.04.2011, 02:24

Во-первых, если Вы просто хотите хорошее шифрование, необходимо посмотреть на GnuPG. Но если Ваше экспериментирование и просто хочет изучить, как оно работает, необходимо понять, каков RSA. RSA не разработан для шифрования любой произвольной строки, это - алгоритм, который шифрует целое число. А именно, целое число от 0 до n-1, где n является значением модуля от открытого ключа. Когда Вы говорите о ключе RSA, это составляет 1 024 бита, который означает, что требуется 1 024 бита для хранения модуля в двоичном файле. Это - одна из причин, RSA используется в сочетании с шифром симметричного ключа как DES или AES. Можно генерировать случайный ключ на 256 битов для AES и зашифровать тот ключ с открытым ключом RSA на 1 024 бита. Затем любой, какой доступ к закрытому ключу может извлечь симметричный ключ и декодировать сообщение с AES. Полный стандарт для RSA называют № 1 PKCS

Кроме того, DES и AES являются блочными шифрами. Они только шифруют данные в блоке определенного размера. DES использует 64-разрядные блоки, и AES использует 128-разрядные блоки. Для шифрования больше, чем блок необходимо использовать Режим работы как CBC или CTR. Эти режимы указывают, как зашифровать поток битов с помощью шифра блочного режима.

Наконец, важно проверить данные, которые Вы получаете. В то время как взломщик не может считывать данные в пути, он может зеркально отражать биты без обнаружения, если никакая целостность или подлинность не применяются к потоку данных. Взломщик может легко предположить, что соединение SSL с портом 443 является, вероятно, запросом веб-страницы, запускающимся с GET / и он мог зеркально отразить бит, изменяющий его на PUT / не вмешиваясь в остальную часть шифрования. Простой подход к целостности должен добавить MD5 или сумму SHA-1 в конце, но который только обеспечивает целостность данных, не подлинность данных. Любой с полным знанием потока данных может генерировать корректную сумму, более безопасный подход должен использовать хэширование по ключу как HMAC, который требует, чтобы знание секретного ключа генерировало, таким образом, обеспечение подлинности данных в дополнение к целостности.

25
27.01.2020, 19:38

Теги

Похожие вопросы