Genel/özel bir anahtar çifti kullanmak, sık kullanılan ana bilgisayarlara giriş yapmak için oldukça uygundur, ancak parolasız bir anahtar çifti kullanıyorsanız, bir paroladan daha güvenli (veya daha az güvenli) mi? Özel anahtar dosyamın etrafındaki güvenlik çok önemli, ama büyülü özel anahtar dosyamın çeşitli ana bilgisayarlara sadece bir şifre listesi olduğunu söyleyin, bir fark var mı?
Cevabım, ortak anahtar çiftlerini kullanmanın parolaları veya parola listelerini kullanmaktan çok akıllıca bir şey olmasıdır. SSH kimlik doğrulamasının farklı formları hakkında yaygın olarak bilinmeyen şeylere odaklanacağım ve bunlardan bahseden başka cevap göremiyorum.
Her şeyden önce, kullanıcı kimlik doğrulamasının güvenli kanal oluşturulmasından farklı ve ayrı bir süreç olduğunu anlamalısınız. Laymans açısından bunun anlamı, ilk olarak, sunucunun ortak anahtarının (kabul edilirse!), Kalan oturumu korumak için kullanılacak simetrik bir anahtarın anlaşmasını sağlayarak, kanalı etkinleştirmek için kullanılmasıdır (kabul edilirse!). gizlilik, bütünlük koruması ve sunucu kimlik doğrulaması.
sonra kanal işlevsel ve güvenlidir, kullanıcının kimlik doğrulaması yapılır. Bunu yapmanın iki genel yolu bir şifre veya ortak anahtar çifti kullanmaktır. Parola tabanlı kimlik doğrulaması hayal edebileceğiniz gibi çalışır: İstemci parolasını güvenli kanal üzerinden gönderir, sunucu bunun gerçekten kullanıcının parolası olduğunu doğrular ve erişime izin verir. Açık anahtar durumunda, çok farklı bir durumumuz var. Bu durumda, sunucu depolanan kullanıcının ortak anahtarına sahiptir. Bundan sonra, sunucunun rasgele bir değer (nonce) oluşturması, onu ortak anahtarla şifrelemesi ve kullanıcıya göndermesidir. Kullanıcı olması gereken kişiyse, zorluğun şifresini çözebilir ve sunucuya geri gönderebilir, daha sonra kullanıcının kimliğini doğrular. Klasik meydan okuma-yanıt modeli. (SSHv2'de aslında biraz farklı ama kavramsal olarak yakın bir şey kullanılır)
Tahmin edebileceğiniz gibi, ilk durumda parola sunucuya gönderilir (SSH parola sorma yanıtı kullanmazsa), ikincisinde özel anahtarınız istemciden ayrılmaz. Birisinin SSL trafiğini engellediği ve şifresinin çözülebildiği (güvenliği ihlal edilmiş bir sunucu özel anahtarı kullanarak veya sunucuya bağlanırken yanlış bir genel anahtarı kabul ediyorsanız) veya sunucuya veya istemciye erişimi olan hayali senaryoda, parolanız bilinecektir - genel-özel anahtar kimlik doğrulaması ve meydan okuma modeli ile özel bilgileriniz asla saldırganın eline geçmeyecektir. Bu nedenle, bağlandığınız bir sunucunun güvenliği ihlal edilmiş olsa bile, aynı anahtarı kullandığınız diğer sunucular olmaz!
Ortak anahtar çifti kullanmanın başka avantajları da vardır: Özel anahtar, önerdiğiniz gibi istemci bilgisayarınızda açık metin olarak saklanmamalıdır. Bu, elbette, şifrelenmemiş bir şifre dosyasının yaptığı gibi özel anahtar dosyasını tehlikeye atmaya açık bırakır, ancak şifresini çözmek (girişte) ve özel anahtarı kullanmak daha kolaydır. Saklanmalıdır şifreli ve her kullanıldığında şifresini çözmek için genellikle uzun bir parola sağlamanız gerekir.
Tabii ki bu, bir sunucuya her bağlandığınızda, özel anahtarınızın kilidini açmak için uzun parolayı girmeniz gerektiği anlamına gelir - Bunun için yollar var. Bir kimlik doğrulama aracısı kullanarak sistemin kullanılabilirliğini artırabilirsiniz: Bu, geçerli oturum için anahtarlarınızın kilidini açan, örneğin gnome'da oturum açtığınızda veya istemcinize ilk ssh yaptığınızda bir yazılım parçasıdır, böylece 'ssh remote-system-ip' yazın ve parola girmeden oturum açın ve oturumunuzdan çıkana kadar bunu birkaç kez yapın.
Özetlemek gerekirse, ortak anahtar çiftlerini kullanmakclient, server = veya güvenli oturum tehlikeye girmiştir. Parola kullanılmaması durumunda (bu olmamalıdır), yine de ortak anahtar çiftleri güvenliği ihlal edilmiş oturumlara ve sunuculara karşı koruma sağlar.
Saklanan (uzun ve rastgele) parola listesiyle karşılaştırıldığında, saklanan bir SSH özel anahtarı aynı güvenlik: özel dosyanız gizli kaldığı sürece güvenli olur.
Bununla birlikte, özel anahtar çok daha ygun, her ikisi de pratik olarak (şu anda, SSH istemcileri, bazılarıyla kullanmanız gereken özel bir şifre dosyasının aksine, kutudan çıkar çıkmaz destekliyor manuel kopyala & yapıştır) ve teorik olarak (bağlanmak istediğiniz her Ana Bilgisayar için aynı anahtarı yeniden kullanabilirsiniz; oysa, aynı şifreyi birden fazla ana bilgisayar için tekrar kullanmadığınız sürece, bir şifre listesi temas edilen ana bilgisayarların sayısı ile doğrusal olarak artacaktır. kötü).
Hangi tehditleri dikkate aldığınıza bağlıdır.
Genel/özel anahtar kimlik doğrulamasının ana noktası, kimlik doğrulaması yaptığınız taraf için bile sırrınızı dışarı atmamaktır. Bu nedenle, sırlarınızı makinenize asla göndermediğiniz için anahtarları kullanmak daha iyidir.
Ancak, düşündüğünüz tehdit yerelse ve özel anahtarlarınızı bir parola ile korumıyorsanız, parola listesini açık bir şekilde saklamak, özel anahtarları koruma olmadan saklamakla aynıdır.
Bu nedenle, özel anahtarlarınızı bir parola ile korumak ve ssh-agent (kolaylık sağlamak için) gibi araçlar kullanmak yararlıdır. OSX'te, bu KeyChain ile de entegre edilebilir, böylece SSH (esas olarak KeyChain ile) kullanabilmek için özel anahtarın (uygulama düzeyinde, sadece güvenlik arka plan düzeyinde) kilidini açmanız bile gerekmeyebilir ve güvenlik arka plan programı ssh-agent ile ilgilenir).
SSH yetkilendirmesi için şifresiz özel anahtar ve düz metin parolası kullanma arasındaki temel fark sahip olduğunuz bir şeyle yetkilendirme (özel anahtarınız) veya bildiğiniz bir şey (ezberlenmiş şifreniz) ile. Farklı cinsler, ancak sonuçta daha iyi veya daha güvenli olduğunu söylemek zor.
sahip olduğunuz bir şey ile yetkilendirmek normalde saldırganın maviden çoğalması daha zordur - daha basit şifrenizi zorla/tahmin etmek, anahtarınızı çoğaltmaktan daha kolaydır. Ama büyük bir dezavantajı var - şimdi özel anahtarınızı gerçekten gizli tutmak her şeyden önemlidir. yalnızca bildiğiniz bir şey (ezberlenmiş parola) kullanırsanız, bu şekilde tutmanız daha kolay olmalıdır (en azından teorik olarak). Ama ezberlemek zorunda kalırsanız, muhtemelen o kadar karmaşık olmayan bir şey kullanırsınız.
Bu yüzden, daha olası olana karar vermeniz gerekir - güçlü özel anahtarınızın çalınması veya çok güçlü bir parolanın tahmin edilmemesi (veya başka bir şekilde edinilmesi).
Burada bir istisna var - sorunuzda özel bir anahtar kullanmak yerine gizli dosyanızda gerçekten uzun, karmaşık ve rastgele şifreler saklayacağınızı kastediyorsanız, muhtemelen
ikisi arasındaki küçük fark yine de bazı farklar (kısmı kaçırdım, bkz. @ john bu konuda güzel bir yazı için cevap). Bu durumda her ikisi de sahip olduğunuz bir şeydir , gizli tut türleri, fakat o zaman kendinize sorun - neden özel anahtarlar için tasarlanmışsa neden ilk etapta? bu durumda özel anahtarlarla kalmalısınız.
Atıfta bulunulan makale bir ssh oturumunda yazılan şifreleri tartışıyor; Bence ve Richard'ın yorumları etrafta dolaşmaya değer, ancak artık cevabın kendisine inanmıyor. (Hala ortak anahtarları tercih ediyorum.)
Song, Wagner ve Tian kaba kuvvetli şifre aramalarını
ssh 'den zamanlama bilgilerini kullanarak yaklaşık 50 kez hızlandırmanın mümkün olduğunu göstermiştir. oturumlar . Noack çalışmalarına tekrar baktı ve SSH2'yi de zamanlama analizine karşı savunmasız buldu.
Saldırıda iki varsayım var: Ortak anahtarlar yalnızca daha kullanışlı olmakla kalmaz, aynı zamanda belirli tehditlere karşı daha güvenlidir.
"Yazılım" anahtarları (.ssh dizininizde veya eşdeğerinde depolanan anahtarlar anlamına gelir) kullanıyorsanız, temel olarak şifreleri saklama düzeyindesiniz.
OpenSSH artık neredeyse iyi PKCS # 11 desteğine sahip, aynı KiTTY'de (bir PuTTY çatalı) mevcuttur, bu nedenle pubkey kimlik doğrulamasını gerçekten kullanmak için akıllı bir kart alın. Sonra şifreler arasında gerçek bir fark var. Bir parola ile korunan bir yazılım anahtar dosyası, düz bir parola ile aynı şekilde çoğaltılabilirken, akıllı kart kullanılamaz.