Apa sebenarnya yang ssh kirim saat melakukan negosiasi kunci?

10

Ketika secara eksplisit menentukan file identitas ke ssh:

ssh -i ./id_rsa ...

Saya memiliki baris ini di jejak debug ssh:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

Apakah itu berarti ssh-dihasilkan id_rsamengandung RSA publik eksponen juga? id_rsaformat tampaknya agak eksplisit bahwa itu berisi kunci pribadi dengan blok "MULAI PRIVATE KEY", jadi "menawarkan kunci publik" harus berarti sesuatu selain "mengirimkan kunci publik ke server".

EDIT:

Untuk memperjelas, saya ingin tahu apa yang sebenarnya terjadi di balik garis "menawarkan kunci publik". Jika klien memegang beberapa kunci, semuanya akan ditawarkan ke server satu per satu.

Alex B
sumber
Untuk menambah masalah itu ada metode untuk server untuk memeriksa apakah kami mendapat kunci yang baik sebelum tantangan. Karena saya sudah punya server menolak kunci kami sebelum saya bahkan tidak mengenkripsi. Kesalahan dimana ada karena namanya tidak ditentukan dengan baik.
Gopoi

Jawaban:

12

untuk terhubung ke server SSH dan mengautentikasi dengan kunci publik / pribadi Anda, Anda harus terlebih dahulu membagikan kunci publik Anda dengan server.

ini dilakukan dengan menyalin kunci publik untuk kunci pribadi Anda ke server, dan menambahkannya ~/ssh/authorized_keysdengan menyalin / menempel, menyalin id_rsa.pubke ~/.ssh/authorized_keysserver atau dengan cat id_rsa.pub >> ~/.ssh/authorized_keys, menambahkannya ke daftar.

ketika Anda terhubung, server menggunakan kunci publik Anda untuk menandatangani tantangan, dan klien Anda menggunakan kunci pribadi Anda id_rsauntuk mendekripsi tantangan, mengenkripsi ulang dengan publik server host keydan mengirimkannya kembali.

host memverifikasi bahwa Anda mendekripsi tantangan dengan benar, dengan mendekripsi respons Anda dengan kunci privatnya, dan klien / host membuat koneksi terenkripsi, berdasarkan data yang dibagikan, bukan pada kunci publik / pribadi Anda.

di NO POINT dalam pertukaran adalah kunci pribadi Anda, atau kunci pribadi tuan rumah dipertukarkan atau diungkapkan satu sama lain. kunci publik Anda tersimpan di server, tapi itu sebabnya kunci PUBLIC.

cpbills
sumber
Ya, itu semua baik dan baik, tetapi ini semua terjadi sebelum server mengidentifikasi kunci publik untuk mengenkripsi tantangan. Saya punya beberapa kunci dan semuanya "ditawarkan" ke server satu per satu. Apa sebenarnya yang disyaratkannya? Dan ya, saya menyadari kunci pribadi tidak benar-benar dikirim, saya mungkin harus menghapus garis itu dari pertanyaan sama sekali. : P
Alex B
ketika Anda menentukan ssh -i keynamebahwa Anda memberi tahu klien ssh Anda persis dengan kunci WHICH yang akan Anda gunakan untuk terhubung ke server. jika Anda memiliki selusin kunci di ~/.ssh/klien Anda TIDAK akan beralih melalui setiap kunci. itu akan mencari ~/.ssh/id_rsa, ~/.ssh/id_dsaberpotensi beberapa nama file lain yang dikodekan ke klien, atau kunci apa yang ditentukan untuk host itu di ~/.ssh/config... panjang cerita pendek; klien Anda bukan / menawarkan / kunci apa pun ke server.
cpbills
ketika Anda terhubung, / klien / mendekripsi tantangan dari server, dan kemudian jatuh ke daftar kunci pribadi lokal standar untuk mengenkripsi tantangan, untuk mengirim respons. JIKA respons tantangan gagal, maka / mungkin / pindah ke nama kunci hard-kode berikutnya, mengenkripsi ulang dengan / itu / kunci pribadi, dan coba lagi. sekali lagi, kunci Anda, publik dan pribadi tidak / dibagi / dengan server saat otentikasi masuk.
cpbills
1
oh, saya membaca kembali komentar Anda; host: mengenkripsi tantangan dengan kunci host, klien: mendekripsi tantangan dengan kunci pub pub, klien: mengenkripsi tantangan dengan kunci pribadi, host: upaya untuk mendekripsi tantangan dengan semua kunci publik yang terdaftar di ~/.ssh/authorized_keyshost tahu apa tantangannya, dan apa yang dicari untuk, jadi setelah kunci publik membuka kunci, ia tahu untuk menggunakan kunci itu.
cpbills
@ cpbills, maaf saya lupa menyebutkan bahwa saya memiliki beberapa kunci dari agen yang diteruskan, maka beberapa kunci ditawarkan (-vvv log memang menunjukkan semuanya ditawarkan, meskipun saya menentukan file identitas).
Alex B
1

Kriptografi Kunci Publik / Pribadi didasarkan pada sistem yang sangat sederhana:

Anda memiliki kunci publik yang mampu melakukan enkripsi satu arah, dan sebuah kunci pribadi yang mampu de cryption. Kunci publik kemudian dapat diberikan kepada semua orang di dunia, dan tidak seorang pun akan dapat mendekripsi data terenkripsi Anda, meskipun mereka AKAN dapat mengenkripsi data yang Anda dapat mendekripsi dengan kunci pribadi Anda.

Jadi jawaban untuk pertanyaan Anda adalah, "Kunci publik Anda."

Satanicpuppy
sumber
Ya, terima kasih, saya tahu secara detail bagaimana crypto kunci publik berfungsi, tetapi saya ingin tahu secara spesifik protokol SSH, dan format kunci. Saya tertarik mengetahui apakah ia menyimpan eksponen publik dalam file kunci pribadi, atau tidak? Yang saya tahu "menawarkan kunci publik" mungkin juga berarti menandatangani nonce dengan kunci pribadi Anda, sehingga server dapat menemukan kunci publik yang sesuai.
Alex B
Iya. itu ssh-keygen -y akan memberi Anda kunci publik dari kunci pribadi, sebaliknya tidak bekerja
Mâtt Frëëman
1

Saya tidak berpikir itu seharusnya mengirim kunci publik atau pribadi saat ini. Enkripsi harus dilakukan oleh klien menggunakan kunci pribadi pada plaintext yang sudah dikenal ke server. Tuan rumah dapat mendekripsi pesan ini menggunakan kunci publik, mengetahui bahwa satu-satunya yang bisa mengenkripsi itu dengan benar adalah klien yang memegang kunci pribadi terkait, sehingga mengotentikasi klien.

Saya percaya itu mengatakan Offering public key: ./id_rsakarena menggunakan kunci pribadi (disimpan dalam ./id_rsa) untuk melakukan enkripsi pada plaintext yang dikenal oleh server dan kemudian server akan menggunakan kunci publik untuk mendekripsi ciphertext ini dan mengkonfirmasi bahwa itu cocok dengan plaintext. File kunci publik ./id_rsa.pubtidak boleh dibutuhkan oleh klien setelah pembuatan kunci awal. Ini hanya digunakan oleh server untuk dekripsi.

Trey Hunner
sumber
Saya mencurigai sesuatu seperti ini terjadi, tetapi saya ingin beberapa spesifik (yaitu protokol negosiasi kunci SSH yang sebenarnya). Tidak yakin mengapa Anda tidak dipilih.
Alex B
Maaf jawaban saya sangat lamban. Saya tidak terbiasa dengan spesifik negosiasi kunci SSH, hanya negosiasi umum yang diperlukan dalam otentikasi kunci publik. Saya mungkin terpilih untuk jawaban yang tidak spesifik.
Trey Hunner