Birkaç üçüncü taraf sitesinde hesabım var - Bitbucket, Bluehost, vb.
Topladığım kadarıyla, tüm [id_rsa, id_rsa.pub] için bir anahtar çifti kullanmak yaygın bir uygulamadır, ancak yalnızca ortak anahtarı vermek için
Bu doğru kullanım mı, yoksa her site için yeni bir çift oluşturmak daha mı iyi?
Bana bunun güvensiz olduğu anlaşılıyor - hain niyetle güvendiğim (veya hacklenmiş) herhangi bir site, ilk kez bağlandığımda özel anahtarımı alabilir ve diğer sitelere gitmek için kullanabilir.
SSH'yi anlayan biri, her yerde bir anahtar çifti kullanmanın güvenli olduğunu doğrulayabilir ve eğer öyleyse, belki nedenini açıklayabilir mi?
Ayrıca, iki ev bilgisayarım varsa, her birinden farklı anahtar çiftleri kullanmanın bir nedeni var mı?
Hepinize teşekkürler.
Özel anahtarınız asla diğer siteye gönderilmez, bu nedenle ortak anahtarı yeniden kullanmak tamamen güvenlidir. Aynı anahtarı yerel bilgisayarlarınızda yeniden kullanmak da uygundur. Ancak, birisi anahtarı çalarsa, hepsine erişebileceğini unutmayın. Bu bir endişe kaynağı olabilir veya olmayabilir.
SSH'de birkaç anahtar çifti vardır. Bahsettiğiniz kişi istemci anahtar çiftidir. İstemci (yani masanızda, fiziksel kontrolünüz altında olan makine) özel anahtarı saklar - ve özel anahtar asla sunucuya gönderilmez. genel anahtarı sunucuda depolanır (genellikle
$HOME/.ssh/authorized_keys dosya).
İstemci sunucuya bağlandığında, istemci sunucuya özel anahtarı denetlediğini göstermek için özel anahtarı kullanır ve onunla hesaplamalar yapabilir (yani dijital imza ). Sunucu, ortak anahtar sayesinde imzayı doğrular. Ortak anahtar bilgisi yeni imzalar oluşturma yetkisi vermez, bu yüzden buna "ortak" anahtar denir: halka açık hale getirilebilir , hiçbir etkisi yok. Özellikle, genel anahtarınızı herhangi bir sayıda sunucuya kopyalamak, dürüst veya bir saldırgan tarafından tamamen kontrol edilen bu sunuculardan herhangi birine diğer sunucular üzerinde güç vermez.
@Artbristol'un işaret ettiği gibi, bu önemli olan özel anahtardır. Genel anahtarınızı on sunucuya kopyalarsanız ve biri özel anahtarını çalarsa (muhtemelen masaüstü sisteminize hackleyerek veya fiziksel olarak çevreleyen), birinin bir seferde on sunucuya anında erişebilmesi. Özel anahtarlar değerlidir .
Bana bunun güvensiz olduğu anlaşılıyor - hain niyetle güvendiğim herhangi bir site [veya saldırıya uğradı] ilk kez bağlandığımda özel anahtarımı alabilir ve diğer sitelere gitmek için kullanabilir.
SSH'yi anlayan biri, her yerde bir anahtar çifti kullanmanın güvenli olduğunu doğrulayabilir ve eğer öyleyse, belki nedenini açıklayabilir mi?
Ortak anahtarlar, meydan okuma kimlik doğrulamasına dayalı olarak çalışır. Temel olarak, birkaç siteye ortak anahtarınızı verirsiniz, böylece her site size bir sorun çıkarabilir. Bu zorluk her seferinde benzersizdir ve sadece özel anahtarı olan bir kişi tarafından cevaplanabilir.
Basitleştirilmiş bir örnek, sunucu genel anahtarınızı alıp "19 Aralık 16: 30: 03.351213 tarihinde X kullanıcısı için oturum anahtarı UTC XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc'dir" gibi bir iletiyi şifrelemesi olabilir. İstemci bilgisayarınız şifrelenmiş iletiyi alır, özel anahtarınızla şifresini çözer ve daha sonra şifresi çözülmüş oturum anahtarını sunucuya geri göndererek, sunucunuzda kimliğinizi doğruladığınız özel anahtarın bulunduğunu doğrular. (Uygulamada genellikle sunucuyla daha karmaşık olan genel/özel Ana Bilgisayar anahtarları vardır, böylece iletilerinizi sunucuya şifreleyebilir ve sunucunun söylediği kişi olduğunu doğrulayabilirsiniz).
Ortak anahtarınızın olması, özel anahtarınızı yeniden oluşturmak için genel anahtarınızdaki modülü etkilemeye çalışmak dışında, kötü amaçlı bir sunucuya ek saldırı yöntemleri vermez. Bu yalnızca anahtarınız çok küçükse, yani 512 bit anahtarlar on yıl önce kırılmışsa, 768 bit RSA anahtarlarının kırık olduğu bildirilmiştir geçen yıl (yaklaşık 10 ^ 20 işlemle; veya 2000 modern bir işlemcinin tek bir çekirdeğinde yıllar); 1024-bit anahtarlar hala güvenlidir ve ssh varsayılanı 2048-bit anahtarlardır.
Bu belge , ortak anahtar kimlik doğrulamasının SSH'de nasıl çalıştığı ile ilgili tüm ayrıntılara sahiptir. Aşağıda özetledim.
İstemci aşağıdaki paketi gönderir:
veri türü açıklaması/değeri
byte SSH_MSG_USERAUTH_REQUEST string kullanıcı adı string service string "publickey" boolean TRUE string genel anahtar algoritması adı kimlik doğrulama için kullanılacak string genel anahtarı string signature
where imza, aşağıdaki veriler üzerinde özel anahtarı kullanan bir imzadır:
string oturum tanımlayıcısı byte SSH_MSG_USERAUTH_REQUEST string kullanıcı adı string service string "publickey" boole TRUE dize ortak anahtar algoritması adı kimlik doğrulaması için kullanılacak dize ortak anahtarı
Sunucu daha sonra, belirtilen ortak anahtarın verilen genel anahtar için yetkilendirilip yetkilendirilmediğine bakar (@ThomasPornin bunun cevabında nasıl yapıldığını tartışır). Sunucu daha sonra imzanın doğru olup olmadığını kontrol eder (bu, ortak anahtar kullanılarak yapılır). Bu başarılı olursa, kimlik doğrulama başarılı olur.
Gördüğünüz gibi (ve @ artbristol'un cevabında belirtildiği gibi), özel anahtar asla sunucuya iletilmez. Özel anahtarı bildiğinizi ancak dijital imzayı göndererek kanıtlamanız gerekir.