Come usare la chiave pubblica ssh-rsa per crittografare un testo?


55

Quindi, lo scenario è: dato che sono Bob, voglio crittografare un messaggio per Alice. L'unica chiave pubblica che ho è il suo ssh-rsaid_rsa.pub in questo modo:

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

Quindi, c'è un modo per crittografare una stringa usando questa chiave pubblica in modo che possa usare la sua chiave privata da id_rsa(generata da ssh-keygen) per decrittografare il messaggio?

(So ​​che è possibile immediatamente se stai usando .pemun file di coppie di chiavi. Se puoi mostrarmi come convertirlo nel formato che opensslsupporta, sarebbe fantastico!)

Grazie!


5
Tu e Alice dovreste davvero indagare su gpg ... gnupg.org ; D
tink

4
Hahaha, davvero! Tuttavia, lo scenario che ho qui è che ho già accesso alla loro ssh-rsachiave pubblica e non voglio aggiungere un altro livello di complessità (come chiedere al destinatario di andare a installare gpg, ecc.)
sikachu

Risposte:


71

È possibile convertire la chiave pubblica ssh in formato PEM (che 'openssl rsautl' può leggere):

Esempio:

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

Supponendo che "myMessage.txt" sia il tuo messaggio che dovrebbe essere crittografato a chiave pubblica.

Quindi crittografa il tuo messaggio con openssl rsautl e la chiave pubblica PEM convertita come faresti normalmente:

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

Il risultato è il tuo messaggio crittografato in "myEncryptedMessage.txt"

Per testare il tuo lavoro per decrittografare la chiave privata di Alice:

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

5
L'ho inserito in uno script che estrae la chiave pubblica degli utenti da GitHub. github.com/twe4ked/catacomb
twe4ked

Questo non funziona per me. Il mio ssh-keygennon ha -mun'opzione. (Non riesco a capire come chiedere a ssh-keygen la sua versione.) Sostituendo -mcon -tworks, ma poi opensslmi dice "impossibile caricare la chiave pubblica". Vedi stackoverflow.com/questions/18285294/… .
Jason Gross,

1
Lo stesso problema di Jason su MaxOS Mavericks. Sostituito -m con -t per la generazione delle chiavi abilitata per keygen.
Robert Christian,

8
Nota che funziona solo se il file è abbastanza piccolo. ad es. 200 byte. Vedere stackoverflow.com/questions/7143514/...
H__

1
Facendo eco a ciò che ha detto @hyh, questo funziona solo se il file di input è piccolo (la linea è da qualche parte intorno a 254 byte, altrimenti fornirà "routine rsa: RSA_padding_add_SSLv23: dati troppo grandi per la dimensione della chiave: /SourceCache/OpenSSL098/OpenSSL098-52.20. 2 / src / crypto / rsa / rsa_ssl.c: errore 73 ".
Devy

1

Prova a ssh-vault utilizza le chiavi pubbliche ssh-rsa per crittografare "crea un vault" e la chiave privata ssh-rsa per decrittografare "visualizza il contenuto del vault"


-3

Perché non farlo nel modo super ovvio che non richiede il rollup della tua criptovaluta.

Alice sftps su alice@bobserver.com che è configurato per consentire solo l'autenticazione con chiave pubblica per l'account alice. Le proprietà di ssh assicurano che solo alice possa authemticate. Persino un uomo in attacco medio fallisce poiché (supponendo che disabiliti ssh1 e insista sulle giuste impostazioni) la comunicazione iniziale usando DH crea un valore noto sia ad Alice che a Bob ma non a nessun uomo nel mezzo e questo può essere usato per autenticare che nessuna risposta o attacco MITM può vedere il contenuto del communicatino.

Quindi avere alice sftp nella tua scatola e scaricare il file.


9
In che modo l'utilizzo di openssl esegue il rollup della tua crittografia?
cmc,

Ad esempio, l'utilizzo di RSA per crittografare una stringa di 1024 caratteri non riuscirebbe a causa delle dimensioni del messaggio. Per ovviare a questo problema, l'implementatore si trova in una situazione precaria, soprattutto se i messaggi vengono ripetuti. È più sicuro utilizzare RSA per crittografare una nuova chiave di cifratura simmetrica e un vettore di inizializzazione che difficilmente si ripeteranno, quindi genera un testo di cifratura univoco per ogni messaggio inviato e ottieni la velocità di cifratura simmetrica e riduci la quantità di cifratura e testo semplice per attaccare la chiave RSA con. Spero che abbia un senso. :)
Sam,

Questo metodo richiede a Bob di fidarsi di Alice o di bloccare bobserver.com in modo che Alice non possa fare nulla di malevolo.
mwfearnley,

Sta rotolando su di te, nel senso che Alice deve lanciare una notevole quantità di operazioni insolite per decifrare non nel senso che la matematica di base è la tua. Dato che questo è stato chiesto in termini di utilità della riga di comando piuttosto che di un'API o di una prospettiva teorica, si è ipotizzato che l'individuo volesse effettivamente trasferire alcune informazioni concrete senza trasferire un nuovo protocollo su ssh. In quanto tale praticamente sftp sembrava molto più semplice e sì, richiede di guardare nel server, fidarsi di Alice o cancellare il server in seguito.
Peter Gerdes,

Mi sembra che in quello sopra sia effettivamente vulnerabile a qualcuno che intercetta l'e-mail in cui spieghi ad Alice esattamente come può decifrare questo insolito messaggio e dandole una sequenza di comandi che invece decifrano in sicurezza il messaggio MITM di Charlie (i comandi openssl sono come per magia incantesimi per la maggior parte) mentre l'idea del server evita tutto ciò a favore dei comandi standard a cui molti hanno familiarità e se Bob lo esegue dal computer su cui sta crittografando, si fida comunque. Ovviamente la risposta migliore dipende dal modello di minaccia, ma dal contesto q questo probabilmente li servirebbe meglio.
Peter Gerdes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.