Как использовать открытый ключ ssh-rsa для шифрования текста?


54

Итак, сценарий таков: учитывая, что я Боб, я хочу зашифровать какое-то сообщение для Алисы. Единственный открытый ключ, который у меня есть, это ее ssh-rsaid_rsa.pub:

SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == sikachu@Sikachus-Notebook.local

Итак, есть ли способ зашифровать строку с помощью этого открытого ключа, чтобы она могла использовать свой закрытый ключ из id_rsa(сгенерированный из ssh-keygen) для расшифровки сообщения?

(Я знаю, что это возможно сразу, если вы используете .pemфайл пары ключей. Если вы можете показать мне, как преобразовать его в формат, который opensslподдерживает, это было бы также здорово!)

Спасибо!


5
Вы и Алиса должны действительно расследовать gpg ... gnupg.org ; D
tink

4
Хахаха, действительно! Однако сценарий, который у меня есть, заключается в том, что у меня уже есть доступ к их ssh-rsaоткрытому ключу, и я не хочу добавлять еще один уровень сложности (например, попросить получателя перейти на установку gpg и т. Д.)
sikachu

Ответы:


70

Возможно преобразовать ваш открытый ключ ssh в формат PEM (который может прочитать «openssl rsautl»):

Пример:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

Предполагая, что «myMessage.txt» - это ваше сообщение, которое должно быть зашифровано открытым ключом.

Затем просто зашифруйте ваше сообщение с помощью openssl rsautl и вашего преобразованного открытого ключа PEM, как вы это обычно делаете:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

Результатом является ваше зашифрованное сообщение в myEncryptedMessage.txt.

Чтобы проверить свою работу по расшифровке секретного ключа Алисы:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt

5
Я обернул это в скрипт, который извлекает открытый ключ пользователя из GitHub. github.com/twe4ked/catacomb
twe4ked

Это не работает для меня. У моего ssh-keygenнет -mварианта. (Я не могу понять, как спросить ssh-keygen о его версии.) Замена -mна -tработает, но затем opensslговорит мне, что «не удается загрузить открытый ключ». См. Stackoverflow.com/questions/18285294/… .
Джейсон Гросс

1
Та же проблема, что и у Джейсона на MaxOS Mavericks. Заменен -m на -t для генерации ключей с поддержкой keygen.
Роберт Кристиан

8
Обратите внимание, что это работает, только если файл достаточно мал. например, 200 байтов. См stackoverflow.com/questions/7143514/...
h__

1
Повторяя сказанное @hyh, это работает, только если входной файл небольшой (строка где-то около 254 байтов, в противном случае он выдаст «rsa рутины: RSA_padding_add_SSLv23: данные слишком велики для размера ключа: /SourceCache/OpenSSL098/OpenSSL098-52.20. 2 / src / crypto / rsa / rsa_ssl.c: 73 "ошибка.
Деви

1

Попробуйте ssh-vault: он использует открытые ключи ssh-rsa для шифрования «создать хранилище» и закрытый ключ ssh-rsa для расшифровки «просмотра содержимого хранилища»


-3

Почему бы не сделать это супер очевидным способом, который не требует использования собственного крипто.

Алиса sftps to alice@bobserver.com, которая настроена так, чтобы разрешить только аутентификацию с открытым ключом для учетной записи Алиса. Свойства ssh прекрасно гарантируют, что только Алиса может аутентифицировать. Даже человек в середине атаки терпит неудачу, поскольку (при условии, что вы отключили ssh1 и настаиваете на правильных настройках), первоначальное общение с использованием DH создает значение, известное как Алисе, так и Бобу, но не любому человеку в середине, и это может использоваться для аутентификации что ни ответ, ни MITM-атака не могут видеть содержимое сообщения.

Так что имей Алису СФТП в свою коробку и скачай файл.


8
Как использование openssl раскручивает ваш собственный крипто?
CMC

Например, использование RSA для шифрования строки длиной 1024 символа может привести к ошибке из-за размера сообщения. Чтобы преодолеть эту проблему, разработчик находится в опасной ситуации, особенно если сообщения повторяются. Безопаснее использовать RSA для шифрования нового симметричного ключа шифра и вектора инициализации, который вряд ли будет повторяться, поэтому генерируйте уникальный текст шифра для каждого отправленного сообщения, увеличивайте скорость симметричного шифра и уменьшайте количество шифра и простого текста атаковать ключ RSA с помощью. Надеюсь, что это имеет смысл. :)
Сэм

Этот метод требует, чтобы Боб доверял Алисе или блокировал bobserver.com, чтобы Алиса не могла сделать ничего вредоносного.
mwfearnley

Это сворачивает ваше собственное в том смысле, что Алиса должна выполнить большое количество необычных операций для расшифровки, а не в том смысле, что основная математика бросает ваши собственные. Поскольку это было задано с точки зрения утилит командной строки, а не API или теоретической точки зрения, предполагается, что индивидуум действительно хотел передать некоторую конкретную информацию, а не использовать новый протокол поверх ssh. Таким образом, практически sftp выглядел гораздо проще, и да, он требует либо смотреть вниз на сервер, доверять Алисе, либо потом очищать сервер.
Питер Гердес

Мне кажется, что в приведенном выше примере на самом деле уязвим тот, кто перехватывает электронную почту, в которой вы объясняете Алисе, как именно она может расшифровать это необычное сообщение, и дает ей последовательность команд, которая вместо этого безопасно расшифровывает сообщение MITM Чарли (команды openssl подобны магии большинство идей) хотя серверная идея избегает всего этого в пользу стандартных команд, с которыми многие знакомы, и если Боб запускает его с компьютера, на котором он шифрует, он все равно доверяет ему. Очевидно, что лучший ответ зависит от модели угрозы, но с точки зрения контекста это, вероятно, послужит им лучше.
Питер Гердес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.