it-swarm-id.com

Bagaimana cara mengenkripsi pesan / teks dengan RSA & OpenSSL?

Saya memiliki kunci publik Alice. Saya ingin mengirim Alice pesan terenkripsi RSA. Bagaimana saya bisa melakukannya dengan menggunakan perintah openssl?

Pesannya adalah:

Hai Alice! Tolong bawakan malacpörkölt untuk makan malam!

29
LanceBaynes

Dalam halaman manual openssl manual (openssl), cari RSA, dan Anda akan melihat bahwa perintah untuk enkripsi RSA adalah rsautl. Kemudian baca halaman manual rsautl untuk melihat sintaksnya.

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

Default skema padding adalah PKCS # 1 v1.5 asli (masih digunakan di banyak procotols); openssl juga mendukung OAEP (sekarang disarankan) dan enkripsi mentah (hanya berguna dalam keadaan khusus).

Perhatikan bahwa menggunakan openssl secara langsung sebagian besar merupakan latihan. Dalam praktiknya, Anda akan menggunakan alat seperti gpg (yang menggunakan RSA, tetapi tidak secara langsung mengenkripsi pesan).

Pertama, jika Anda hanya ingin enkripsi yang baik, Anda harus melihat GnuPG . Tetapi jika Anda bereksperimen dan hanya ingin mempelajari cara kerjanya, Anda perlu memahami apa RSA . RSA tidak dirancang untuk mengenkripsi string sembarang, ini adalah algoritma yang mengenkripsi integer. Secara khusus, bilangan bulat dari 0 hingga n-1 di mana n adalah nilai modulus dari kunci publik. Ketika Anda berbicara tentang kunci RSA yang 1024 bit, itu berarti dibutuhkan 1024 bit untuk menyimpan modulus dalam biner. Ini adalah salah satu alasan, RSA digunakan dalam kombinasi dengan kunci sandi simetris seperti DES atau AES . Anda dapat menghasilkan kunci 256 bit acak untuk AES dan mengenkripsi kunci itu dengan kunci publik RSA 1024 bit. Kemudian siapa pun yang akses ke kunci pribadi dapat mengekstrak kunci simetris dan mendekode pesan dengan AES. Standar lengkap untuk RSA disebut PKCS # 1

Lebih lanjut, DES dan AES adalah cipher blok. Mereka hanya mengenkripsi data dalam blok dengan ukuran tertentu. DES menggunakan blok 64-bit dan AES menggunakan 128-bit) Untuk mengenkripsi lebih dari satu blok, Anda harus menggunakan Mode Operasi seperti CBC atau CTR. Mode ini menentukan cara mengenkripsi aliran bit menggunakan cipher mode blok.

Terakhir, penting untuk memverifikasi data yang Anda terima. Sementara penyerang mungkin tidak dapat membaca data dalam perjalanan, ia mungkin dapat membalik bit tanpa deteksi jika tidak ada integritas atau keaslian yang diterapkan pada aliran data. Seorang penyerang dapat dengan mudah menebak bahwa koneksi SSL ke port 443 mungkin adalah permintaan halaman web yang dimulai dengan GET / dan dia bisa membalik sedikit mengubahnya menjadi PUT / tanpa mengganggu enkripsi lainnya. Pendekatan sederhana untuk integritas adalah menambahkan jumlah MD5 atau SHA-1 pada akhirnya, tetapi itu hanya memberikan integritas data, bukan keaslian data. Siapa pun yang memiliki pengetahuan lengkap tentang aliran data dapat menghasilkan jumlah yang benar, pendekatan yang lebih aman adalah dengan menggunakan hash-keyed seperti HMAC yang membutuhkan pengetahuan tentang kunci rahasia untuk menghasilkan sehingga memberikan keaslian data selain integritas.

25
penguin359

Di bawah ini, perhatikan Anda dapat menentukan algoritma apa pun yang Anda inginkan, baik itu yang terdaftar atau RSA (meskipun saya tidak tahu nama pasti yang digunakan untuk RSA oleh OpenSSL)

gunakan "openssl enc -help" untuk mendapatkan daftar sandi yang didukung pada sistem Anda, dan berikan itu sebagai argumen. mis., "-aes256"

Catatan pada sistem saya, saya tidak memiliki RSA di opsi saya - setidaknya dengan nama itu.


Bagaimana cara mengenkripsi pesan S/MIME?

Katakanlah seseorang mengirimi Anda sertifikat publiknya dan meminta Anda mengenkripsi beberapa pesan kepadanya. Anda telah menyimpan sertifikatnya sebagai sertifikatnya. Anda telah menyimpan balasan Anda sebagai my-message.txt.

Untuk mendapatkan enkripsi RC2-40 default — meskipun cukup lemah, Anda cukup memberi tahu openssl di mana pesan dan sertifikat berada.

openssl smime her-cert.pem -encrypt -in-my-message.txt

Jika Anda cukup yakin koresponden jauh Anda memiliki toolkit SSL yang kuat, Anda dapat menentukan algoritma enkripsi yang lebih kuat seperti triple DES:

openssl smime her-cert.pem -encrypt -des3 -in-my-message.txt

Secara default, pesan terenkripsi, termasuk header surat, dikirim ke output standar. Gunakan opsi -out atau Shell Anda untuk mengarahkannya ke file. Atau, jauh lebih rumit, pipa output langsung ke sendmail.

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My encrypted reply' |\
 sendmail [email protected]

Bagaimana cara saya menandatangani pesan S/MIME?

Jika Anda tidak perlu mengenkripsi seluruh pesan, tetapi Anda ingin menandatanganinya sehingga penerima Anda dapat yakin akan integritas pesan, resepnya mirip dengan enkripsi. Perbedaan utama adalah bahwa Anda harus memiliki kunci dan sertifikat Anda sendiri, karena Anda tidak dapat menandatangani apa pun dengan sertifikat penerima.

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My signed reply' |\
 sendmail [email protected]

(dari http://www.madboa.com/geek/openssl/ )

(er ... semua garis miring terbalik - yang seharusnya lolos dari baris baru. tidak yakin apa yang terjadi, karena akan ditampilkan dengan baik di kotak edit saya di sini!

5
draeath