Bagaimana cara menggunakan kunci publik ssh-rsa untuk mengenkripsi teks?


55

Jadi, skenarionya adalah: Mengingat saya Bob, saya ingin mengenkripsi beberapa pesan untuk Alice. Satu-satunya kunci publik yang saya miliki adalah ssh-rsaid_rsa.pubnya seperti ini:

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

Jadi, apakah ada cara untuk mengenkripsi string menggunakan kunci publik ini sehingga dia dapat menggunakan kunci pribadinya dari id_rsa(dihasilkan dari ssh-keygen) untuk mendekripsi pesan?

(Saya tahu bahwa itu mungkin segera jika Anda menggunakan .pemfile pasangan kunci. Jika Anda dapat menunjukkan kepada saya cara mengonversikan ini ke format yang opensslmendukung, itu juga bagus!)

Terima kasih!


5
Anda dan Alice harus benar-benar menyelidiki gpg ... gnupg.org ; D
tink

4
Hahaha, memang! Namun, skenario yang saya miliki di sini adalah bahwa saya sudah memiliki akses ke ssh-rsakunci publik mereka , dan saya tidak ingin menambahkan lapisan kompleksitas lainnya (seperti, meminta penerima untuk menginstal gpg, dll.)
sikachu

Jawaban:


71

Dimungkinkan untuk mengonversi kunci publik ssh Anda ke format PEM (yang 'dapat dibaca rsautl' dapat membacanya):

Contoh:

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

Dengan asumsi 'myMessage.txt' adalah pesan Anda yang harus dienkripsi dengan kunci publik.

Kemudian, cukup enkripsi pesan Anda dengan openssl rsautl dan kunci publik PEM Anda yang dikonversi seperti biasa:

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

Hasilnya adalah pesan terenkripsi Anda di 'myEncryptedMessage.txt'

Untuk menguji pekerjaan Anda untuk mendekripsi dengan kunci pribadi Alice:

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

5
Saya membungkus ini dalam sebuah skrip yang menarik kunci publik pengguna dari GitHub. github.com/twe4ked/catacomb
twe4ked

Ini tidak bekerja untuk saya. Saya ssh-keygentidak punya -mpilihan. (Saya tidak tahu bagaimana cara menanyakan ssh-keygen untuk versinya.) Mengganti -mdengan -tberfungsi, tetapi kemudian opensslmemberi tahu saya "tidak dapat memuat Kunci Publik". Lihat stackoverflow.com/questions/18285294/… .
Jason Gross

1
Masalah yang sama seperti Jason di MaxOS Mavericks. Diganti -m dengan -t untuk pembuatan kunci yang diaktifkan keygen.
Robert Christian

8
Perhatikan bahwa ini hanya berfungsi jika file tersebut cukup kecil. misalnya 200 byte. Lihat stackoverflow.com/questions/7143514/…
h__

1
Menggemakan apa yang dikatakan @hyh, ini hanya berfungsi jika file inputnya kecil (garisnya sekitar 254 byte, jika tidak maka akan memberikan "rsa rutin: RSA_padding_add_SSLv23: data terlalu besar untuk ukuran kunci: /SourceCache/OpenSSL098/OpenSSL098-52.20. 2 / src / crypto / rsa / rsa_ssl.c: 73 "kesalahan.
Devy

1

Coba ssh-vault menggunakan ssh-rsa kunci publik untuk mengenkripsi "buat vault" dan kunci pribadi ssh-rsa untuk mendekripsi "lihat konten vault"


-3

Mengapa tidak melakukan ini dengan cara yang sangat jelas yang tidak perlu menggulung crypto Anda sendiri.

Alice sftps ke alice@bobserver.com yang disetel hanya mengizinkan otentikasi kunci publik untuk alice akun. Properti ssh dengan baik memastikan bahwa hanya alice yang dapat melakukan authemticate. Bahkan seorang pria dalam serangan tengah gagal karena (dengan asumsi Anda menonaktifkan ssh1 dan bersikeras pada pengaturan yang tepat) komunikasi awal menggunakan DH menciptakan nilai yang dikenal baik oleh alice dan bob tetapi tidak untuk siapa pun di tengah dan ini dapat digunakan untuk mengotentikasi bahwa tidak ada balasan atau serangan MITM dapat melihat konten dari communicatino.

Jadi minta alice sftp ke dalam kotak Anda dan unduh file tersebut.


9
Bagaimana cara menggunakan openssl menggulung crypto Anda sendiri?
cmc

Sebagai contoh, menggunakan RSA untuk mengenkripsi string karakter 1024 akan gagal karena ukuran pesan. Untuk mengatasi masalah ini, pelaksana berada dalam situasi genting, terutama jika pesan diulang. Lebih aman menggunakan RSA untuk mengenkripsi kunci sandi simetris baru dan vektor inisialisasi yang tidak mungkin terulang, jadi buatlah teks sandi unik untuk pesan yang pernah dikirim, dan dapatkan kecepatan sandi simetris, dan kurangi jumlah sandi dan teks polos untuk menyerang kunci RSA dengan. Harapan itu masuk akal. :)
Sam

Metode ini mengharuskan Bob untuk mempercayai Alice, atau untuk mengunci bobserver.com sehingga Alice tidak dapat melakukan sesuatu yang berbahaya.
mwfearnley

Ini bergulir Anda sendiri dalam arti bahwa alice harus membuang sejumlah besar operasi yang tidak biasa untuk mendekripsi tidak dalam arti matematika yang mendasari menggulung Anda sendiri. Karena ini ditanyakan dalam hal utilitas baris perintah daripada API atau perspektif teoretis diasumsikan individu tersebut sebenarnya ingin mentransfer beberapa informasi konkret bukan membonceng protokol baru di atas ssh. Dengan demikian sftp praktis tampak jauh lebih mudah dan ya itu memang memerlukan melihat ke bawah server, mempercayai Alice atau menghapus server sesudahnya.
Peter Gerdes

Tampak bagi saya bahwa dalam yang di atas sebenarnya rentan terhadap seseorang mencegat email di mana Anda menjelaskan kepada Alice bagaimana tepatnya dia dapat mendekripsi pesan yang tidak biasa ini dan memberinya urutan perintah yang bukan dengan aman mendekripsi pesan MITM Charlie (perintah openssl seperti sulap mantra untuk sebagian besar) sementara ide server menghindari semua ini demi perintah standar banyak yang akrab dengan dan jika bob menjalankannya dari komputer dia mengenkripsi pada dia tetap mempercayainya. Jelas jawaban terbaik tergantung pada model ancaman tetapi dari konteks q kemungkinan ini akan melayani mereka dengan lebih baik.
Peter Gerdes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.