У меня есть открытый ключ Алисы. Я хочу отправить Алисе зашифрованное сообщение RSA. Как я могу сделать это с помощью openssl
команды?
Сообщение:
Привет Алиса! Пожалуйста, принесите малакпёркельт на ужин!
источник
У меня есть открытый ключ Алисы. Я хочу отправить Алисе зашифрованное сообщение RSA. Как я могу сделать это с помощью openssl
команды?
Сообщение:
Привет Алиса! Пожалуйста, принесите малакпёркельт на ужин!
В руководстве openssl ( openssl
man-страница) найдите 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 (все еще используется во многих протоколах); openssl также поддерживает OAEP (сейчас рекомендуется) и необработанное шифрование (полезно только в особых случаях).
Обратите внимание, что использование openssl напрямую - это в основном упражнение. На практике вы используете такой инструмент, как gpg (который использует RSA, но не напрямую для шифрования сообщения).
openssl
?openssl
командной строки представляет собой смесь различных команд. Некоторые из них, в основном те, которые манипулируют сертификатами, могут быть полезны, но их трудно использовать правильно, потому что их синтаксис и параметры причудливы. Некоторые вроде быrsautl
хороши, но не предоставляют полезной функциональности, они просто предоставляют необработанные криптографические примитивы - например, шифрование RSA в значительной степени используется только для шифрования симметричного ключа для гибридного шифрования. Некоторые, напримерenc
, очень трудно использовать безопасно, и мир был бы лучше, если бы их не было.Во-первых, если вы просто хотите хорошее шифрование, вы должны взглянуть на GnuPG . Но если вы экспериментируете и просто хотите узнать, как это работает, вам нужно понять, что такое RSA . RSA не предназначен для шифрования произвольной строки, это алгоритм, который шифрует целое число. В частности, целое число от 0 до n-1, где n - это значение модуля из открытого ключа. Когда вы говорите о ключе RSA, который имеет длину 1024 бита, это означает, что для сохранения модуля в двоичном виде требуется 1024 бита. Это одна из причин, RSA используется в сочетании с шифром с симметричным ключом, таким как DES или AES, Вы можете сгенерировать случайный 256-битный ключ для AES и зашифровать этот ключ с помощью 1024-битного открытого ключа RSA. Тогда любой, у кого есть доступ к закрытому ключу, может извлечь симметричный ключ и декодировать сообщение с помощью AES. Полный стандарт для RSA называется PKCS # 1
Кроме того, DES и AES являются блочными шифрами. Они только шифруют данные в блоке определенного размера. DES использует 64-битные блоки, а AES использует 128-битные блоки. Чтобы зашифровать больше, чем блок, вы должны использовать режим работы, такой как CBC или CTR. Эти режимы определяют, как шифровать поток битов с использованием шифра блочного режима.
Наконец, важно проверить данные, которые вы получаете. Хотя злоумышленник может не прочитать данные в пути, он может перебрасывать биты без обнаружения, если к потоку данных не применяется целостность или аутентичность. Злоумышленник может легко догадаться, что SSL-соединение с портом 443, вероятно, является запросом веб-страницы, начиная с него,
GET /
и он может слегка изменить его,PUT /
не мешая остальной части шифрования. Простой подход к целостности заключается в добавлении суммы MD5 или SHA-1 в конце, но это обеспечивает только целостность данных, а не их подлинность. Любой, обладающий полным знанием потока данных, может сгенерировать правильную сумму, более безопасный подход заключается в использовании хеширования с ключами, такого как HMAC который требует знания секретного ключа для генерации, обеспечивая тем самым аутентичность данных в дополнение к целостности.источник
Обратите внимание, что ниже вы можете указать любой алгоритм, который вы хотите, будь то перечисленные или RSA (хотя я не знаю точного имени, используемого для RSA OpenSSL)
используйте "openssl enc -help", чтобы получить список поддерживаемых шифров в вашей системе и передать его в качестве аргумента. например, "-aes256"
Обратите внимание, в моей системе у меня нет RSA в моих опциях - по крайней мере, с таким именем.
Как зашифровать сообщение S / MIME?
Допустим, кто-то отправляет вам ее открытый сертификат и просит вас зашифровать ей какое-то сообщение. Вы сохранили ее сертификат как her-cert.pem. Вы сохранили свой ответ как my-message.txt.
Чтобы получить стандартное, хотя и довольно слабое, шифрование RC2-40, вы просто указываете openssl, где находится сообщение и сертификат.
Если вы уверены, что у вашего удаленного корреспондента есть надежный инструментарий SSL, вы можете указать более надежный алгоритм шифрования, например тройной DES:
По умолчанию зашифрованное сообщение, включая заголовки почты, отправляется на стандартный вывод. Используйте опцию -out или вашу оболочку, чтобы перенаправить ее в файл. Или, что еще сложнее, направить вывод напрямую в sendmail.
Как мне подписать сообщение S / MIME?
Если вам не нужно шифровать все сообщение, но вы хотите подписать его, чтобы ваш получатель мог быть уверен в целостности сообщения, рецепт аналогичен таковому для шифрования. Основное отличие состоит в том, что вам нужен собственный ключ и сертификат, так как вы не можете ничего подписать сертификатом получателя.
(с http://www.madboa.com/geek/openssl/ )
(э-э ... все эти обратные слэши - это те, которые должны быть экранированы новыми строками. не уверен, что происходит, так как это хорошо отображается в моем окне редактирования здесь!
источник
openssl enc
потому чтоenc
это только для симметричного шифрования. Да, варианты openssl не очень хорошо организованы. Асимметричные алгоритмы имеют свои собственные команды:rsa
/dsa
/dh
для манипулирования ключами,rsautl
/dsautl
для шифрования / дешифрования / проверки / подписи иgenrsa
/gendsa
/gendh
для генерации ключей.