Bagaimana cara kerja enkripsi SSH?


34

Saya telah membaca tentang membuat 2 kunci (privat dan publik) pada host klien dan menyalin kunci publik ke host server.

Seperti yang saya pahami, (perbaiki saya jika saya salah): Server mengenkripsi data dengan kunci publik dan mengirimkannya ke klien, klien mendekripsi dengan kunci privat.

Tetapi jika saya perlu mengenkripsi data pada klien untuk dikirim ke server, bagaimana itu terjadi?

Kunci publik mengenkripsi data pada klien? Tetapi bagaimana server dapat mendekripsi, jika hanya memiliki kunci publik?

Bagaimana cara kerja enkripsi SSH?

Jawaban:


35

Hal pertama setelah membuat koneksi TCP, kedua sistem sepakat pada kunci sesi , menggunakan protokol seperti pertukaran kunci DH , ECDH atau GSSAPI. Kunci ini simetris dan sementara - kedua belah pihak menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi data menggunakan algoritma seperti AES atau RC4 .

Keypair klien tidak pernah digunakan untuk mengenkripsi data, hanya untuk otentikasi - "publickey" adalah salah satu dari beberapa metode yang tersedia, di mana klien menyajikan kunci publiknya sendiri bersama dengan bukti kepemilikan kunci pribadi. Demikian pula, keypair server hanya digunakan untuk mengotentikasi server selama pertukaran kunci DH atau ECDH; tidak ada data yang dienkripsi menggunakannya.

Protokol SSH2 didokumentasikan dalam beberapa RFC , termasuk:

  • RFC 4253 - Protokol Lapisan Transport Secure Shell (SSH)
  • RFC 4419 - Pertukaran Kelompok Diffie-Hellman
  • RFC 4432 - Pertukaran Kunci RSA
  • RFC 4462 - Otentikasi & Pertukaran Kunci GSSAPI

13

Hal pertama yang saya pikir perlu Anda pahami adalah bahwa sementara banyak protokol enkripsi seperti SSH dan SSL menggunakan PKI untuk keperluan otentikasi, hampir tidak satu pun dari sistem ini akan menggunakan PKI untuk benar-benar mentransmisikan muatan.

PKI terlalu intensif CPU untuk digunakan untuk mentransmisikan data payload aktual. Apa yang terjadi adalah bahwa PKI digunakan untuk menegosiasikan kunci yang dibuat secara acak, untuk digunakan dengan protokol enkripsi simetris. Protokol yang akan digunakan juga dinegosiasikan, dan harus menjadi protokol terkuat yang dapat disepakati kedua sistem. Jadi begitu jabat tangan awal dan negosiasi selesai, hampir semuanya hanya kriptografi simetris standar.


2
Untuk bacaan lebih lanjut, itu pada dasarnya dijelaskan dalam RFC4253 , halaman 15.
slhck

12

Berikut adalah beberapa contoh praktis, Asumsikan Kunci A dirahasiakan dan karenanya kunci pribadi dan Kunci B dipasang di tempat yang dapat diakses publik dan karenanya adalah kunci publik.

Jadi, jika Anda ingin mengirim pesan ke semua orang dan Anda ingin mereka memverifikasi bahwa pesan itu datang dari Anda dan tidak diubah saat sedang dikirim, Anda akan mengirim pesan Anda dan memasukkan hash dari pesan yang dienkripsi dengan Kunci A. Lalu siapa pun yang memiliki Kunci B yang dapat mendekripsi hash, membandingkannya dengan pesan yang mereka terima, dan memverifikasi bahwa pesan tersebut berasal dari Anda (karena fakta bahwa hanya orang dengan Kunci A yang dapat menghasilkan muatan terenkripsi yang berhasil mendekripsi hash, dan karena Anda adalah satu-satunya orang dengan Kunci A yang hanya bisa berasal dari Anda). Ini disebut Penandatanganan .

Sekarang katakanlah seseorang ingin mengirimi Anda pesan rahasia tetapi tidak ingin mengungkapkan siapa mereka. Mereka dapat mengenkripsi pesan mereka dengan kunci simetris (seperti yang disebutkan Zoredache simetris jauh lebih murah untuk dilakukan) kemudian mengambil kunci itu dan mengenkripsinya dengan Kunci B dan mengirimkannya kepada Anda. Karena hanya Kunci A yang dapat mendekripsi sesuatu yang dienkripsi dengan Kunci B tidak ada orang lain yang dapat melihat apa yang ada dalam pesan yang dikirimkan kepada Anda. Ini adalah cara kerja enkripsi normal dan cara SSH bertukar data.


3

Berikut ini adalah deskripsi matematika yang relatif mudah dipahami di balik cara kerja enkripsi kunci privat-publik.

Deskripsi yang lebih mendasar dari BBC ada di sini .


Saya menambahkan tautan baru ke BBC yang menjelaskan proses ini dan sebagian sejarahnya.
Chogg

1

Anda menulis

"Kunci publik mengenkripsi data pada klien? Tetapi bagaimana server dapat mendekripsi, jika hanya memiliki kunci publik?"

Saya tidak tahu banyak tentang itu tetapi saya pikir saya bisa menjawabnya dengan sangat jelas.

Jika A ingin mengirim pesan ke B, A menggunakan kunci publik B. Itulah sebabnya B kemudian dapat mendekripsi itu.

Jika A menggunakan kunci publiknya sendiri untuk mengenkripsi pesan, maka memang, B tidak akan dapat mendekripsi itu.

Itu dijelaskan di sini

http://www.comodo.com/resources/small-business/digital-certificates2.php

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.