Mengapa Amazon merilis kunci pribadi alih-alih kunci publik?

20

Otak saya melilit poros pada kunci publik dan pribadi. Ketika Anda membuat server cloud (contoh) pada layanan EC2 Amazon dan kemudian ingin terhubung melalui SSH, Amazon mengharuskan Anda untuk mengunduh kunci pribadi untuk membuat koneksi. Bukankah ide di balik kunci publik / pribadi menyarankan bahwa Amazon harus meminta Anda untuk mengunduh kunci publik?

Lebih lanjut, jika saya menyiapkan server SFTP untuk digunakan oleh pelanggan, haruskah saya menginstal kunci mereka di server atau memberi mereka kunci dari server? Dalam kedua kasus, haruskah itu kunci publik atau pribadi?

Seth
sumber
1
Bagi kita yang kurang terbiasa dengan EC2, apakah Amazon mengharuskan Anda untuk mengunduh kunci pribadi?
Zoredache
2
Ketika Anda mengatur server cloud di Amazon EC2 dan kemudian ingin menyambungkannya melalui SSH, konsol Amazon memungkinkan Anda untuk mengunduh kunci pribadi yang Anda gunakan untuk membuat koneksi. Anda diharuskan untuk melindungi kunci, tentu saja.
Seth
@Zoredache Dalam keadilan, itu opsi. Seseorang yang mencari alat dengan cepat pada kotak Windows mungkin belum pernah menggunakan OpenSSH sebelumnya, jadi ini adalah cara cepat yang bagus.
ceejayoz

Jawaban:

36

Berpikir lebih dalam tentang proses otentikasi, apa yang perlu dirahasiakan? Amazon mengetahui bagian publik dari kunci, dan siapa pun dapat mengetahui bagian publik. Setengah publik dari keypair, ketika dicocokkan dengan setengah privat, menunjukkan bahwa separuh privat digunakan untuk otentikasi.

Anda kunci pribadi yang diberikan kepada Anda ketika Amazon menghasilkan keypair untuk Anda hanya berguna jika Anda satu-satunya yang memilikinya. Jika itu bukan rahasia, maka siapa pun yang mengetahuinya juga dapat mengotentikasi kepada siapa saja yang memegang setengah publik dari keypair.

Siapa pun yang diautentikasi harus memiliki setengah privasi . Tidak apa-apa jika semua orang di dunia dapat mengotentikasi Anda dengan memegang setengah kunci publik, tetapi hanya Anda yang harus mengendalikan setengah privat.

Jeff Ferland
sumber
18

Amazon menyediakan layanan pembuatan kunci karena beberapa sistem operasi (batuk, Windows, batuk) mungkin tidak membuatnya mudah untuk menghasilkan keypairs SSH.

Dengan SSH (dan SFTP), kunci publik dipasang di file otor_keys pengguna saat instance EC2 dijalankan. Kunci pribadi dipegang hanya oleh pengguna dan disajikan untuk mengotentikasi terhadap server.

Dari dokumentasi di:

http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html

nampaknya Amazon menghasilkan keypair pada server mereka dan mengirimkan Anda kunci pribadi melalui HTTPS. Ini mungkin kurang sempurna (idealnya, Anda dan tidak ada orang lain yang memiliki kunci privat), tetapi mungkin tidak begitu, mengingat bahwa ini semua terjadi dalam konteks sesi terotentikasi Anda dan hanya Anda (dan Amazon sementara) yang melihat kunci pribadi. Anda juga dapat selalu menghasilkan dan mengunggah kunci publik Anda sendiri untuk penggunaan EC2, sambil menjaga kunci pribadi sepenuhnya pribadi.

Untuk mengatur pengguna SFTP untuk otentikasi kunci, mereka harus menghasilkan kunci SSH pada mesin mereka. Setelah mereka menghasilkan pasangan kunci, mereka seharusnya hanya mengirim Anda kunci publik untuk menginstal di file berwenang_kunci yang relevan. Kunci pribadi, seperti namanya, adalah pribadi.

cjc
sumber
5
Saya secara teratur menghasilkan pasangan kunci pada mesin windows. Ini tidak sulit, meskipun dilakukan menggunakan perangkat lunak yang diinstal, dan bukan oleh Windows itu sendiri.
Dominic Cronin
2
Setuju dengan Dominic. Ini lebih merupakan fakta bahwa rata-rata pengguna windows ketakutan dan hilang saat melihat CLI, dan bahwa Windows masih tidak memiliki opsi "masuk dengan kunci SSH".
HopelessN00b
Oh ya, setuju. Saya menggunakan Cygwin, dll., Dengan openssh, jadi semuanya berfungsi dengan baik. Saya membayangkan sebagian besar pengguna Windows melakukan ini akan menggunakan Putty dan harus melakukan beberapa konversi kunci. Itu hanya beberapa langkah.
cjc
1
Saya tidak pernah benar-benar menggunakan Amazon, tetapi daripada menyalahkan windows, saya akan berasumsi bahwa alasan Amazon mengirim Anda kunci adalah bahwa jika mereka tidak memberi Anda kunci untuk masuk, bagaimana Anda masuk untuk menginstal publik Anda kunci di tempat pertama?
DerfK
1
@ DerfK Anda dapat mengirimkan kunci publik Anda sendiri, dan memilihnya untuk dipasang dalam instance EC2 baru. Memilih kunci tertentu adalah bagian dari proses pembuatan instance.
cjc
2

Otentikasi kunci publik berfungsi dalam arah sebaliknya dengan cara yang Anda pikirkan. Kunci publik mengenkripsi pesan dan kunci pribadi mendekripsi mereka. Server menyimpan kunci publik pemegang akun dan menggunakannya untuk mengenkripsi pesan. Hanya pemegang kunci pribadi yang dapat mendekripsi pesan itu.

Jika Anda mengirim seseorang rahasia yang dienkripsi dengan kunci publik mereka, jika mereka dapat memberi tahu Anda apa rahasia itu, maka Anda tahu mereka memegang kunci pribadi yang cocok. Pengguna kemudian diautentikasi.

AWS mengharuskan Anda untuk mengunduh dan menyimpan kunci pribadi Anda karena mereka tidak akan menyimpannya, karena alasan keamanan. Karena kunci pribadi tidak disimpan di mana pun di AWS, Anda dapat yakin bahwa instance EC2 Anda aman.

jkim
sumber
1

Di satu sisi, itu tidak masalah. Sepasang kunci pribadi / publik terdiri dari dua bagian, dan mana di antara mereka yang publik yang terserah Anda. Jika ada sesuatu yang dienkripsi dengan satu kunci, Anda perlu yang lain untuk mendekripsi. Jika Anda telah menerbitkan satu kunci secara publik dan bukan yang lain, kunci pribadi adalah yang tidak Anda terbitkan.

Mendapatkan pertanyaan Anda yang sebenarnya: agaknya kunci yang diberikan Amazon kepada Anda adalah memungkinkan Anda untuk mengontrol sumber daya Anda sendiri, jadi itu tidak boleh diberikan kepada orang lain. Dalam konteks ini, Anda harus mempercayai Amazon untuk memiliki kunci pribadi Anda, setidaknya cukup lama untuk disiapkan.

Jika Anda ingin pelanggan Anda masuk dengan cara ini, Anda perlu mereka memberi Anda kunci yang siap mereka bagikan dengan Anda, jadi karena itu kunci publik mereka. Anda menginstal ini di server di otor_keys, yang secara efektif mengatakan "siapa pun yang memiliki kunci pribadi yang cocok dengan publik ini dapat mengakses sumber daya ini".

Dominic Cronin
sumber
1
Uhm, tidak, itu tidak benar. Setidaknya dengan RSA / DH Anda mengenkripsi dengan kunci publik dan mendekripsi dengan kunci privat, itu tidak bekerja sebaliknya. Penandatanganan tidak sama dengan enkripsi / dekripsi.
Zoredache
1
@ErikA Tidak, kunci publik tidak dapat diturunkan dari kunci pribadi. File kunci pribadi sering menyertakan kedua kunci. Jika Anda benar-benar ingin berdiskusi, saya sarankan crypto.stackexchange.com . Orang-orang itu dapat memberi Anda detail batin yang sangat mendalam termasuk perbedaan kunci RSA yang sebenarnya dan mengapa kunci mana yang dianggap publik vs privat bukan hanya sekadar pelontaran koin.
Jeff Ferland
@Zoredache - Saya tidak tahu itu: terima kasih. Apakah Anda memiliki tautan ke referensi yang bagus?
Dominic Cronin
en.wikipedia.org/wiki/Asymmetric_key_algorithm - Satu kunci mengunci atau mengenkripsi plaintext, dan yang lainnya membuka atau mendekripsi ciphertext. Tidak ada tombol yang dapat melakukan kedua fungsi. - en.wikipedia.org/wiki/RSA_(algorithm) - RSA melibatkan kunci publik dan kunci pribadi. The kunci publik dapat diketahui semua orang dan digunakan untuk mengenkripsi pesan . Pesan yang dienkripsi dengan kunci publik hanya dapat didekripsi menggunakan kunci pribadi.
Zoredache
Tak satu pun dari dua referensi itu menyarankan apa yang Anda katakan @Zoredache. Tentu saja , setelah Anda memutuskan kunci mana yang privat dan mana yang publik, itu menentukan cara Anda menggunakannya. Pada titik pembuatan kunci, keputusan ini belum dibuat. Untuk apa nilainya, logika seputar penandatanganan sepenuhnya bergantung pada logika sekitar enkripsi, karena penandatanganan memerlukan enkripsi.
Dominic Cronin