Jak używać klucza publicznego ssh-rsa do szyfrowania tekstu?

55

Scenariusz jest taki: Biorąc pod uwagę, że jestem Bobem, chcę zaszyfrować jakąś wiadomość dla Alicji. Jedyny klucz publiczny, jaki mam, to jej ssh-rsaid_rsa.pub w następujący sposób:

ssh rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == [email protected]

Czy istnieje sposób na zaszyfrowanie ciągu przy użyciu tego klucza publicznego, aby mogła użyć swojego klucza prywatnego z id_rsa(wygenerowanego z ssh-keygen) do odszyfrowania wiadomości?

(Wiem, że jest to możliwe od razu, jeśli używasz .pempliku pary kluczy. Jeśli możesz mi pokazać, jak przekonwertować to na opensslobsługiwany format , to też byłoby świetnie!)

Dzięki!

sikachu
źródło
5
Ty i Alice powinniście naprawdę zbadać gpg ... gnupg.org ; D
zadzwońcie
4
Hahaha, rzeczywiście! Jednak scenariusz, który tu mam, jest taki, że mam już dostęp do ich ssh-rsaklucza publicznego i nie chcę dodawać kolejnej warstwy złożoności (np.
Proszenie

Odpowiedzi:

71

Możliwe jest przekonwertowanie klucza publicznego ssh na format PEM (który „openssl rsautl” może go odczytać):

Przykład:

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

Zakładając, że „myMessage.txt” to twoja wiadomość, która powinna być zaszyfrowana kluczem publicznym.

Następnie po prostu zaszyfruj swoją wiadomość za pomocą openssl rsautl i przekonwertowanego klucza publicznego PEM, jak zwykle:

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

Rezultatem jest zaszyfrowana wiadomość w „myEncryptedMessage.txt”

Aby przetestować swoją pracę, aby odszyfrować klucz prywatny Alice:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt
Dirk Thannhäuser
źródło
5
Zamknąłem to w skrypcie, który wyciąga klucz publiczny użytkowników z GitHub. github.com/twe4ked/catacomb
twe4ked
To mi nie działa. Mój ssh-keygennie ma -mopcji. (Nie mogę dowiedzieć się, jak zadawać ssh-keygen do swojej wersji.) Wymiana -mz -tuczynków, ale potem opensslmówi mi „nie można załadować klucza publicznego”. Zobacz stackoverflow.com/questions/18285294/… .
Jason Gross
1
Ten sam problem, co Jason ma na MaxOS Mavericks. Zamieniono -m na -t dla generowania kluczy z włączoną funkcją keygen.
Robert Christian
8
Pamiętaj, że działa to tylko wtedy, gdy plik jest wystarczająco mały. np. 200 bajtów. Zobacz stackoverflow.com/questions/7143514/…
h__
1
Powtarzając to, co powiedział @hyh, działa to tylko wtedy, gdy plik wejściowy jest mały (linia ma gdzieś około 254 bajtów, w przeciwnym razie Daje to procedury rsa: RSA_padding_add_SSLv23: dane są zbyt duże dla rozmiaru klucza: /SourceCache/OpenSSL098/OpenSSL098-52.20. 2 / src / crypto / rsa / rsa_ssl.c: 73 "error.
Devy
1

Spróbuj ssh-vault, który używa kluczy publicznych ssh-rsa do szyfrowania „stwórz sklepienie”, a klucza prywatnego ssh-rsa do odszyfrowywania „wyświetl zawartość skarbca”

nbari
źródło
-3

Dlaczego nie zrobić tego w bardzo oczywisty sposób, który nie wymaga rozwijania własnego krypto.

Alice sftps na adres [email protected], który jest skonfigurowany tak, aby zezwalał tylko na uwierzytelnianie klucza publicznego dla alice konta. Właściwości ssh ładnie zapewniają, że tylko alicja może dokonać autochemii. Nawet atak człowieka w środku nie powiedzie się, ponieważ (zakładając, że wyłączysz ssh1 i nalegasz na właściwe ustawienia), początkowa komunikacja za pomocą DH tworzy wartość znaną zarówno aliceowi, jak i bobowi, ale nie każdemu człowiekowi pośrodku, i można tego użyć do uwierzytelnienia że żadna odpowiedź ani atak MITM nie może zobaczyć zawartości komunikatora.

Więc zaproś Alice Sftp do swojego pudełka i pobierz plik.

Peter Gerdes
źródło
9
W jaki sposób używanie openssl do toczenia własnego krypto?
cmc
Na przykład użycie RSA do szyfrowania ciągu 1024 znaków zakończy się niepowodzeniem z powodu rozmiaru wiadomości. Aby rozwiązać ten problem, implementator znajduje się w niepewnej sytuacji, zwłaszcza jeśli komunikaty są powtarzane. Bezpieczniej jest używać RSA do szyfrowania nowego symetrycznego klucza szyfrującego i wektora inicjalizacji, którego powtórzenie byłoby mało prawdopodobne, więc wygeneruj unikalny tekst zaszyfrowany dla każdej wysłanej wiadomości i uzyskaj prędkość symetrycznego szyfru oraz zmniejsz ilość szyfru i zwykłego tekstu za pomocą klucza RSA. Mam nadzieję, że to ma sens. :)
Sam
Ta metoda wymaga od Boba zaufania Alice lub zablokowania bobserver.com, aby Alice nie mogła zrobić nic złego.
mwfearnley,
Toczą się same w tym sensie, że Alicja musi rzucić wiele niezwykłych operacji, aby je odszyfrować, nie w sensie, że podstawowa matematyka jest twoją własną. Gdy zapytano o to raczej narzędzia wiersza poleceń niż API lub perspektywę teoretyczną, zakładano, że dana osoba rzeczywiście chciała przekazać pewne konkretne informacje, a nie piggyback, nowy protokół na ssh. Jako że praktycznie sftp wydawał się o wiele łatwiejszy i tak, wymaga spojrzenia w dół na serwer, zaufania Alice lub późniejszego wyczyszczenia serwera.
Peter Gerdes,
Wydaje mi się, że w powyższym przypadku jest on podatny na atak kogoś, kto przechwytuje wiadomość e-mail, w której wyjaśnisz alice dokładnie, w jaki sposób może ona odszyfrować tę niezwykłą wiadomość i przekazać jej sekwencję poleceń, które zamiast tego bezpiecznie odszyfrowują wiadomość MITM Charliego (polecenia opensl są jak magia inkantacje do większości), podczas gdy idea serwera unika tego wszystkiego na korzyść standardowych poleceń, z których wielu jest zaznajomionych, a jeśli bob uruchamia go z komputera, szyfruje go, i tak mu ufa. Oczywiście najlepsza odpowiedź zależy od modelu zagrożenia, ale z kontekstu q prawdopodobnie lepiej by im to służyło.
Peter Gerdes,