it-swarm-id.com

Apakah menggunakan kunci publik untuk masuk ke SSH lebih baik daripada menyimpan kata sandi?

Menggunakan pasangan kunci publik/pribadi cukup nyaman untuk masuk ke host yang sering dikunjungi, tetapi jika saya menggunakan pasangan kunci tanpa kata sandi, apakah itu lebih aman (atau kurang aman) daripada kata sandi? Keamanan di sekitar file kunci pribadi saya adalah yang terpenting, tetapi katakan file kunci pribadi ajaib saya hanya daftar kata sandi untuk berbagai host, apakah ada perbedaan?

69
Nick T

Jawaban saya adalah menggunakan pasangan kunci publik jauh lebih banyak lebih bijak untuk dilakukan daripada menggunakan kata sandi atau daftar kata sandi. Saya akan fokus pada hal-hal yang tidak banyak diketahui tentang berbagai bentuk otentikasi SSH, dan saya tidak melihat jawaban lain menyebutkannya.

Pertama-tama, Anda harus memahami bahwa otentikasi pengguna adalah proses yang berbeda dan terpisah daripada pembentukan saluran aman . Dalam istilah awam apa artinya ini adalah yang pertama, kunci publik dari server digunakan (jika diterima!) Untuk membangun saluran SSH aman, dengan mengaktifkan negosiasi kunci simetris yang akan digunakan untuk melindungi sesi yang tersisa, memungkinkan saluran kerahasiaan, perlindungan integritas dan otentikasi server.

Setelah saluran berfungsi dan aman, otentikasi pengguna dilakukan. Dua cara yang biasa dilakukan adalah dengan menggunakan kata sandi atau pasangan kunci publik. Otentikasi berbasis kata sandi berfungsi seperti yang Anda bayangkan: Klien mengirimkan kata sandinya melalui saluran aman, server memverifikasi bahwa ini memang kata sandi pengguna tertentu dan memungkinkan akses. Dalam kasus kunci publik, kami memiliki situasi yang sangat berbeda. Dalam hal ini, server memiliki kunci publik dari pengguna yang disimpan. Apa yang terjadi selanjutnya adalah server membuat nilai acak (nonce), mengenkripsinya dengan kunci publik dan mengirimkannya kepada pengguna. Jika pengguna yang seharusnya, ia dapat mendekripsi tantangan dan mengirimkannya kembali ke server, yang kemudian mengkonfirmasi identitas pengguna. Ini adalah klasik model tantangan-respons. (Dalam SSHv2 sesuatu yang sedikit berbeda tetapi secara konseptual dekat sebenarnya digunakan)

Seperti yang dapat Anda bayangkan, pada kasus pertama kata sandi benar-benar dikirim ke server (kecuali SSH akan menggunakan respons tantangan kata sandi), pada detik kunci pribadi Anda tidak pernah meninggalkan klien. Dalam skenario imajiner bahwa seseorang memotong lalu lintas SSL, dan dapat mendekripsi (menggunakan kunci privat server yang dikompromikan, atau jika Anda menerima kunci publik yang salah saat menyambung ke server) atau memiliki akses ke server atau klien, kata sandi Anda akan diketahui - dengan otentikasi kunci publik-pribadi dan model respons tantangan, detail pribadi Anda tidak akan pernah jatuh ke tangan penyerang. Jadi, bahkan jika satu server yang Anda sambungkan terganggu, severs lain yang Anda gunakan dengan kunci yang sama tidak akan!

Ada keuntungan lain dari menggunakan pasangan kunci publik: Kunci pribadi tidak boleh disimpan dalam format teks di PC klien Anda seperti yang Anda sarankan. Ini tentu saja membuat file kunci pribadi terbuka untuk dikompromikan seperti yang dilakukan oleh file kata sandi yang tidak terenkripsi, tetapi lebih mudah untuk mendekripsi (saat login) dan menggunakan kunci pribadi. Itu harus disimpan terenkripsi, dan Anda perlu memberikan frasa sandi yang panjang untuk mendekripsi setiap kali digunakan.

Tentu saja ini berarti bahwa Anda harus memberikan frasa sandi yang panjang setiap kali Anda terhubung ke server, untuk membuka kunci kunci pribadi Anda - Ada beberapa cara untuk melakukannya. Anda dapat meningkatkan kegunaan sistem dengan menggunakan agen otentikasi: Ini adalah perangkat lunak yang membuka kunci Anda untuk sesi saat ini, ketika Anda masuk ke gnome misalnya atau ketika Anda pertama kali ssh ke klien Anda, jadi Anda bisa saja ketik 'ssh remote-system-ip' dan masuk, tanpa memberikan frasa sandi, dan lakukan itu beberapa kali hingga Anda keluar dari sesi Anda.

Jadi, untuk meringkas, menggunakan pasangan kunci publik menawarkan perlindungan yang jauh lebih besar daripada menggunakan kata sandi atau daftar kata sandi yang dapat ditangkap jika klien, the server = atau sesi aman dikompromikan. Dalam hal tidak menggunakan kata sandi (yang seharusnya tidak terjadi), pasangan kunci publik masih menawarkan perlindungan terhadap sesi dan server yang dikompromikan.

84
john

Dibandingkan dengan daftar kata sandi (panjang dan acak) yang disimpan, kunci pribadi SSH yang disimpan menawarkan keamanan yang sama : semuanya aman selama file pribadi Anda tetap pribadi.

Kunci pribadi, bagaimanapun, jauh lebih nyaman , keduanya praktis (sekarang, klien SSH mendukungnya di luar kotak, bertentangan dengan file kata sandi khusus yang harus Anda gunakan dengan copy & paste manual) dan secara teoritis (Anda dapat menggunakan kembali kunci yang sama untuk setiap Host yang ingin Anda sambungkan, sedangkan daftar kata sandi akan tumbuh secara linier dengan jumlah host yang dihubungi, kecuali jika Anda menggunakan kembali kata sandi yang sama untuk beberapa host, yang buruk ).

15
Thomas Pornin

Itu tergantung pada ancaman apa yang Anda pertimbangkan.

Poin utama otentikasi kunci publik/pribadi adalah untuk tidak membiarkan rahasia Anda keluar, bahkan ke pihak yang diautentikasi. Untuk alasan ini, menggunakan kunci lebih baik, karena Anda tidak pernah mengirim keluar rahasia mesin Anda.

Namun, jika ancaman yang Anda anggap bersifat lokal, dan jika Anda tidak melindungi kunci pribadi Anda dengan kata sandi, menyimpan daftar kata sandi secara jelas adalah sama dengan menyimpan kunci pribadi tanpa perlindungan.

Untuk alasan ini, penting untuk melindungi kunci pribadi Anda dengan kata sandi dan menggunakan alat-alat seperti ssh-agent (untuk kenyamanan). Pada OSX, ini juga dapat diintegrasikan dengan KeyChain, sehingga Anda bahkan mungkin tidak perlu membuka kunci privat (pada level aplikasi, hanya pada level daemon keamanan) untuk dapat menggunakannya melalui SSH (pada dasarnya, KeyChain dan daemon keamanan mengurus ssh-agent).

13
Bruno

Perbedaan utama antara menggunakan kunci pribadi tanpa kata sandi dan menggunakan kata sandi teks biasa untuk otorisasi SSH adalah otorisasi dengan sesuatu yang Anda miliki (kunci pribadi Anda) atau dengan sesuatu yang Anda tah (kata sandi Anda yang dihafalkan). Mereka berbeda jenis, tetapi sulit untuk mengatakan bahwa seseorang pada akhirnya lebih baik atau lebih aman.

Otorisasi oleh sesuatu yang Anda miliki biasanya lebih sulit bagi penyerang untuk mereplikasi dengan tiba-tiba - lebih mudah untuk memaksa/menebak kata sandi Anda yang lebih sederhana daripada mereplikasi kunci Anda. Tetapi memiliki kelemahan utama - sekarang menjaga kunci pribadi Anda benar-benar rahasia menjadi yang terpenting. Jika Anda menggunakan sesuatu yang hanya Anda ketahui (kata sandi hafal), itu akan lebih mudah untuk tetap seperti itu (setidaknya secara teoritis). Tetapi jika Anda harus menghafalnya, maka Anda mungkin menggunakan sesuatu yang tidak rumit.

Jadi bagi Anda untuk memutuskan, apa yang lebih mungkin - kunci pribadi Anda yang kuat dicuri atau kata sandi tidak begitu kuat (atau diperoleh dengan cara lain).

Ada satu pengecualian di sini - jika Anda maksud dalam pertanyaan Anda bahwa Anda akan menyimpan kata sandi yang sangat panjang, kompleks dan acak daripada menggunakan kunci pribadi, maka mungkin ada sedikit perbedaan antara keduanya masih ada beberapa perbedaan (saya sudah melewatkan bagian, lihat @ john jawaban untuk tulisan yang bagus tentang ini). Dalam hal ini keduanya adalah sesuatu yang Anda miliki , merahasiakannya jenis, tapi kemudian tanyakan pada diri sendiri - mengapa melakukannya di tempat pertama jika itu yang dirancang untuk kunci pribadi? Anda harus tetap menggunakan kunci pribadi dalam kasus itu.

10
Karol J. Piczak

Makalah yang direferensikan membahas kata sandi yang diketik dalam sesi ssh; Saya pikir itu, dan komentar Richard, layak untuk dipertahankan, tetapi tidak lagi percaya pada jawaban itu sendiri. (Saya masih lebih suka kunci publik.)

Song, Wagner, dan Tian telah menunjukkan bahwa mungkin untuk mempercepat pencarian kata sandi brute-force sekitar 50 kali dengan menggunakan informasi waktu dari ssh sesi . Noack meninjau kembali studi mereka dan menemukan SSH2 juga rentan terhadap analisis waktu.

Serangan itu membuat dua asumsi:

  • Kata sandi hash tersedia untuk brute-force cracking.
  • Seorang penyerang bisa mendapatkan cap waktu yang akurat pada paket yang dikirim antara host, atau mendapatkan informasi waktu.

Kunci publik tidak hanya lebih nyaman, tetapi lebih aman terhadap ancaman tertentu.

8
sarnold

Jika Anda menggunakan kunci "perangkat lunak" (artinya kunci yang disimpan di direktori .ssh atau yang setara), Anda pada dasarnya berada pada level yang sama dengan menyimpan kata sandi.

OpenSSH sekarang memiliki dukungan PKCS # 11 yang hampir layak, yang sama tersedia di KiTTY (garpu Putty) sehingga untuk benar-benar menggunakan otentikasi pubkey, gunakan kartu pintar. Lalu ada perbedaan nyata dari kata sandi. File keyfile perangkat lunak, dilindungi oleh kata sandi, dapat direplikasi dengan cara yang sama seperti kata sandi biasa, sedangkan kartu pintar tidak bisa.

2
martin