it-swarm-tr.com

TLS'de hangi anahtar değişim mekanizması kullanılmalıdır?

TLS'de kullanılabilecek birçok anahtar değişim mekanizması vardır. Bunlar arasında RSA, ECDH_ECDSA, ECDHE_ECDSA, ECDH_RSA, ECDHE_RSA ve diğerleri bulunur. Bunlardan hangileri daha kriptografik olarak daha güvenlidir ve web sitesi ile bağlantıyı güvence altına almak için kullanılabilir?

31
Andrei Botalov

Bir anahtar değişimini (şifre paketinin bir parçası olarak) yalnızca sunucu anahtarı türü ve sertifikası eşleştiğinde kullanabilirsiniz. Bunu ayrıntılı olarak görmek için TLS 1.2 spesifikasyonu 'da tanımlanan şifre paketlerine bakalım. Her şifre takımı anahtar değişim algoritmasını ve daha sonra kullanılan simetrik şifreleme ve bütünlük kontrol algoritmalarını tanımlar; burada kilit değişim bölümüne odaklanıyoruz.

  • RSA: anahtar değişimi, sunucu ortak anahtarıyla şifreleme rastgele bir değer (istemci tarafından seçilir) ile çalışır. Bu, sunucu ortak anahtarının sunucu sertifikasının şifrelemeyi yasaklamaması için bir RSA anahtarı, ve olmasını gerektirir (esas olarak "Anahtar Kullanımı" sertifika uzantısı aracılığıyla: bu uzantı varsa, "keyAgreement" bayrağı).

  • DH_RSA: anahtar değişimi bir statik Diffie-Hellman: sunucu ortak anahtarı bir Diffie-Hellman anahtarı olmalıdır; ayrıca, bu sertifikanın kendisi bir RSA anahtarı kullanan bir Sertifika Yetkilisi tarafından verilmiş olmalıdır (CA anahtarı, sunucu sertifikasını imzalamak için kullanılan anahtardır).

  • DH_DSS: CA'nın bir DSA anahtarı kullanması dışında DH_RSA gibi.

  • DHE_RSA: anahtar değişimi bir geçici Diffie-Hellman: sunucu dinamik olarak bir DH ortak anahtarı oluşturur ve istemciye gönderir; sunucu ayrıca işaretler ne gönderdiğini. DHE_RSA için, sunucu ortak anahtarı RSA türünde olmalı ve sertifikasının imzalar (varsa Anahtar Kullanım uzantısı, digitalSignature bayrağını içermelidir) olmalıdır.

  • DHE_DSS: sunucu anahtarının DSA türü olması dışında DHE_RSA gibi.

  • DH_anon: sunucu sertifikası yok. Sunucu, dinamik olarak oluşturmuş olabileceği bir Diffie-Hellman anahtarı kullanır. "Anon" şifre paketleri, herhangi bir sunucu kimlik doğrulamasından yoksun oldukları için, kimliğe bürünme saldırılarına ( "Ortadaki Adam" ) dahil ancak bunlarla sınırlı değildir. Genel olarak, bir "anon" şifre takımı kullanamazsınız.

Eliptik eğri şifreleme kullanan anahtar değişim algoritmaları başka bir RFC içinde belirtilir ve aşağıdakileri önerir:

  • ECDH_ECDSA: DH_DSA gibi, ancak eliptik eğrilerle: sunucu ortak anahtarı, ECDSA ortak anahtarı kullanan bir CA tarafından verilen bir sertifikada bir ECDH anahtarı olmalıdır.

  • ECDH_RSA: ECDH_ECDSA gibi, ancak veren CA'nın bir RSA anahtarı vardır.

  • ECDHE_ECDSA: sunucu dinamik olarak oluşturulmuş bir EC Diffie-Hellman anahtarı gönderir ve ECDSA türünde olması gereken kendi anahtarıyla imzalar. Bu DHE_DSS'ye eşdeğerdir, ancak hem Diffie-Hellman kısmı hem de imza kısmı için eliptik eğrilerle.

  • ECDHE_RSA: ECDHE_ECDSA gibi, ancak sunucu ortak anahtarı, geçici eliptik eğri Diffie-Hellman anahtarını imzalamak için kullanılan bir RSA anahtarıdır.

  • ECDH_anon: dinamik eliptik eğri Diffie-Hellman ile bir "anon" şifre takımı.


Peki, bir Web sitesi için ne seçmelisiniz? Temel kısıtlamalarınız:

  • Çoğu istemci tarafından desteklenen bir şifre takımı istiyorsunuz; pratikte, bu, eliptik eğri şifrelemesini (eliptik eğriler kudretli, ancak henüz sahada iyi desteklenmemektedir) - Eylül 2011 itibariyle gs.statcounter , İstemci sistemlerin% 40'ı hala Windows XP ve neredeyse% 5'i IE 7.0) kullanmaktadır.

  • Sunucu anahtarı türünüz ve sertifikanızla uyumlu bir şifre takımı istiyorsunuz. Bu da CA'nın neyi kabul ettiğine bağlıdır (size sertifikayı satan CA). Zamanın% 99,9'u RSA demektir. Herkes RSA yapar. Sertifikalardaki Diffie-Hellman anahtarları ve DSA imzaları, RSA'da bir patent olduğu için NIST (bu tür konularla ilgilenen ABD federal ajansı) tarafından tanıtıldı; ancak bu patent 2000 yılında sona ermiştir. Diffie-Hellman (sertifikaların bir parçası olarak) ANSI X9.42 , özgür olmayan bir standart olarak belirtilmiştir (yani açık kaynak kodlu serbest zaman geliştiricileri uygulamak için isteksiz) ve bunların hepsi de net değil. Yani hiç kimse sertifikalarda Diffie-Hellman'ı gerçekten kullanmıyor. DSA daha yaygın olarak desteklenmektedir ( tanımlayıcı standart RSA ile karşılaştırıldığında anekdotik olmama noktasına kadar değil.

  • Etkin saldırganlara karşı güvensiz olduğu için bir "anon" paketi kullanmak istemezsiniz ve çoğu istemci tarayıcısında "anon" paketleri varsayılan olarak devre dışıdır.

Yani seçim temel olarak "RSA" ile "DHE_RSA" arasındadır. İkincisi biraz daha yüksek bir hesaplama maliyetine sahip olabilir, ancak aslında bir farkı görmek için saniyede en az birkaç yüz yeni bağlantıya sahip olmanız gerekir ("yeni" konusunda ısrar ediyorum: TLS, önceki bağlantının anahtar değişimi, asimetrik kriptografi ile gerçek anahtar değişimi son dakikada yeni istemci tarayıcısı başına yalnızca bir kez gerçekleşir). Dolayısıyla, pratikte, RSA ve DHE_RSA arasındaki CPU yükünde ölçülebilir bir fark yoktur.

DHE_RSA, aşağıdaki özellik için görkemli bir ad olan Mükemmel İletme Gizliliği olarak bilinen bir şey sunar: sunucunuz tamamen saldırıya uğradıysa, saldırganın sunucu özel anahtarının bir kopyasını aldığı noktaya kadar , aynı zamanda bu oturumlar RSA kullanıyorsa geçmiş TLS oturumlarının şifresini çözebilecek, bu oturumlar DHE_RSA kullanıyorsa bunu yapamayacaktır. Uygulamada, saldırgan özel anahtarınızı çalabiliyorsa, büyük olasılıkla site veritabanınızdaki 10000 kredi kartı numarasını okuyabilir, bu nedenle önceki oturumları kaydetmeyi ve şifresini çözmeyi bile rahatsız etmesinin çok az nedeni vardır, çünkü bu sadece bir düzine fazladan gelir sayılar vb. PFS matematiksel olarak zariftir, ancak çok fazladır. Hala şık bir kısaltma ve iyi düşünülmüş bir halkla ilişkiler kampanyasının bir parçası olarak zayıf fikirli üzerinde büyük bir etki yaratabilirse.


Özet: DHE_RSA kullanın.

62
Thomas Pornin