Як використовувати відкритий ключ ssh-rsa для шифрування тексту?


55

Отже, сценарій такий: Враховуючи, що я Боб, я хочу зашифрувати якесь повідомлення для Аліси. Єдиний відкритий ключ у мене - це її 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
Дзинь

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

Відповіді:


71

Можна перетворити ваш відкритий ключ 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-кейген для своєї версії.) Заміна -mз -tроботи, а потім opensslкаже мені : «Не вдається завантажити відкритий ключ». Дивіться stackoverflow.com/questions/18285294/… .
Джейсон Гросс

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

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 ".
Devy

1

Спробуйте ssh-vault, він використовує відкриті ключі ssh-rsa для шифрування "створення сховища" та приватний ключ ssh-rsa для розшифрування "перегляду вмісту сховища"


-3

Чому б не зробити це над очевидним способом, який не потребує прокатки власної криптовалюти.

Аліса переходить на alice@bobserver.com, яка налаштована лише на те, щоб дозволити аутентифікацію відкритого ключа для облікового запису Аліса. Властивості ssh добре гарантують, що лише Аліса зможе зробити автоматичну передачу. Навіть людина середньої атаки не вдається, оскільки (припустивши, що ви відключите ssh1 та наполягаєте на правильних налаштуваннях), початкове спілкування за допомогою DH створює значення, відоме і Алісі, і Бобі, але не будь-якій людині в середині, і це може бути використане для автентифікації що жодна відповідь або атака MITM не може бачити вміст Communicatino.

Тож покладіть Алісу sftp у свій ящик і завантажте файл.


9
Як за допомогою openssl прокачувати власну криптовалюту?
cmc

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

Цей метод вимагає від Боба довіритися Алісі або заблокувати bobserver.com, щоб Аліса не могла робити нічого шкідливого.
mwfearnley

Її прокатка сама по собі в тому сенсі, що Аліса повинна перекинути значну кількість незвичайних операцій, щоб розшифрувати не в сенсі того, що основна математика перевертається власноруч. Оскільки це було задано з точки зору утиліт командного рядка, а не API або теоретичної точки зору, припускається, що особа насправді хотіла передати якусь конкретну інформацію, а не копіювати новий протокол поверх ssh. Оскільки таке практично здавалося, sftp здається набагато простішим, і так, це вимагає або дивитись на сервер, довіряючи Алісі, або витираючи сервер згодом.
Пітер Гердес

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