Transport Layer Security

Taşıma Katmanı Güvenliği (TLS) ve onun öncülü/selefi olan Güvenli Soket Katmanı (SSL), bilgisayar ağı üzerinden güvenli haberleşmeyi sağlamak için tasarlanmış kriptolama protokolleridir. X.509 sertifikalarını kullanırlar ve bundan dolayı karşı tarafla iletişime geçeceklerin kimlik doğrulaması asimetrik şifreleme ile yapılır ve bir simetrik anahtar üzerinde anlaşılır. Bu oturum anahtarı daha sonra taraflar arasındaki veri akışını şifrelemek için kullanılır. Bu, mesaj/veri gizliliğine ve mesaj kimlik doğrulama kodları için mesaj bütünlüğüne izin verir. Protokollerin birçok versiyonu ağ tarama, elektronik mail, İnternet üzerinden faks, anlık mesajlaşma ve İnternet üzerinden sesli iletişim gibi uygulamalarda yaygın olarak kullanılmaktadır. Bu durumda/içerikte/bağlamda en önemli özellik iletme gizliliğidir. Bundan dolayı kısa süreli oturum anahtarı, uzun süreli gizli simetrik anahtardan türetilememelidir.
X.509 sertifikalarının seçimi sonucunda, sertifika yöneticileri ve açık anahtar altyapısı, sertifika ve sahibi arasındaki ilişkinin doğrulanmasının yanı sıra oluşturulması, imzalanması ve sertifikaların geçerliliğinin yönetilmesi için gereklidir. Bu, güvenilirlik ağı yoluyla kimlik doğrulamasından daha faydalı olduğu halde, 2013'teki küresel izleme ifşası sertifika yöneticilerinin ortadaki adam saldırısına(man-in-the-middle attack) izin verdiğini bundan dolayı güvenlik bakımından zayıf bir nokta olduğunu bilinir hale getirdi.
İnternet protokol takımında, SSL ve TLS uygulama katmanında ağ bağlantıları verisini şifreler. OSI modelde eşdeğer olarak, TLS/SSL 5. katmanda (oturum katmanı) başlatılır ve 6. katmanda (sunum katmanı) çalıştırılır. Oturum katmanı asimetrik şifrelemenin kullanıldığı bir el sıkışma işlemine sahiptir. Buradaki amaç, oturum için bir paylaşılan anahtar ve şifreleme ayarlarını oluşturmaktır. Sunum katmanı ise simetrik şifreleme ve oturum anahtarını kullanarak haberleşmenin geri kalanını şifreler. Bu iki modelde TLS ve SSL, bölütleri şifreli verileri iletmekte olan taşıma katmanı adına çalışmaktadır.
TLS, İnternet Mühendisliği Görev Gücü (IETF) standartlar yolu protokolüdür. İlk olarak 1999 yılında tanımlanmıştır ve RFC 5246(Ağustos 2008) ve RFC 6176(Mart 2011)da güncellenmiştir. Önceki SSL spesifikasyonları (1994, 1995, 1996) esas alınarak Netscape İletişim tarafından geliştirilmiştir.
Netscape tarafından 1994 yılında geliştirilenSecure Sockets Layer (Güvenli Soket Katmanı) protokolü, internet üzerinden güvenli veri iletişimi sağlayan bir protokoldür. SSL 2.0 1995 yılında ve SSL'in günümüzde kullanılan versiyonu olan SSL 3.0 da 1996 yılında RFC 6101 koduyla piyasaya sürülmüştür.
Daha sonra IETF, SSL'in bir standart haline gelebilmesi için bir girişimde bulundu ve SSL 3.0'ı temel alan yeni bir protokol üzerinde çalışmaya başladı. IETF, Ocak 1999'da bu yeni protokolü TLS 1.0 (Transport Layer Security) adıyla ve RFC 2246 koduyla piyasaya sürdü. TLS 1.1 Nisan 2006'da RFC 4346 koduyla, TLS 1.2 Ağustos 2008'de RFC 5246, TLS 1.3 Ağustos 2018'de RFC 8446 koduyla yayınlanmıştır.
Yerini yavaş yavaş TLS 1.3'e bırakmış olsa da SSL 3.0 günümüzde tüm internet tarayıcıları tarafından desteklenmektedir.
İnternet tarayıcıların herhangi bir yerinde görülen asma kilit resmi, o siteye yapılan bağlantının SSL/TLS ile şifreli bir şekilde yapıldığını göstermektedir. Bazı tarayıcılarda bu asma kilit ikonuna tıklanarak SSL sertifikasının kimden alındığı, sitenin açık anahtar değeri, geçerlilik süresi, özet algoritması ve versiyon bilgisi gibi bilgiler görüntülenebilir.
SSL/TLS Çalışma Prensibi
SSL 3.0'ın çalışma prensibi açık anahtarlı şifrelemeye dayanmaktadır. SSL kısaca şu şekilde çalışmaktadır:
Kullanıcı, internet sunucusundan güvenli bir bağlantı isteğinde bulunur,
İnternet sunucusu, kullanıcıya sertifikasıyla birlikte açık anahtarını (public key) gönderir,
Kullanıcının kullandığı internet tarayıcısı, sunucunun göndermiş olduğu bu sertifikanın güvenilir bir sertifika otoritesinden gelip gelmediğini ve sertifikanın geçerli olup olmadığını kontrol eder,
Kullanıcının kullandığı internet tarayıcısı rastgele bir simetrik şifreleme anahtarı üretir. Daha sonra internet sunucusunun açık anahtarını (public key) kullanarak bu simetrik şifreleme anahtarını şifreler ve bağlanmaya çalıştığı internet sunucusuna gönderir,
İnternet sunucusu, kendi açık anahtarıyla (public key) şifrelenmiş olan bu mesajı kendi özel anahtarıyla (private key) çözerek simetrik anahtarı elde eder,
İnternet sunucusu bundan sonra kullanıcıya göndereceği verileri elde etmiş olduğu bu simetrik anahtarı kullanarak gönderir,
Kullanıcı aynı simetrik anahtarla internet sunucusundan gelen verileri çözerek internet sayfasını güvenli bir şekilde görüntüler.
Protokoller TLS ile ya da TLS olmaksızın işlem gördüğünden beri, istemcinin sunucuya TLS bağlantısının kurulmasını isteyip istemediğini belirtmesi gerekmektedir. Bunu gerçekleştirmenin başlıca iki yolu vardır; ilk seçenek TLS bağlantıları için farklı bir port numarası kullanılmasıdır (örneğin HTTPS için 443. port). Diğer seçenekte ise normal bir port numarası kullanılır ve istemci TLS protokolün özelleştirilmiş mekanizmasını kullanarak (örneğin mail ya da haber protokolleri için STARTTLS) sunucunun bağlantıyı TLS protokolüne yönlendirmesi için istekte bulunur.
İstemci ve sunucu TLS protokolü kullanmayı kararlaştırdıktan sonra, el sıkışma süreci kullanarak kararlı bir bağlantı kurarlar. Bu el sıkışma esnasında, istemci ve sunucu bağlantının güvenliğini sağlamak için çeşitli parametreler kullanmayı kararlaştırır:
İstemci kendi SSL sürüm numarasını, şifre ayarlarını, oturuma özgü veriyi, ve sunucunun istemciyle iletişime geçmek için ihtiyaç duyduğu diğer bilgileri sunucuya gönderir.
Sunucu kendi SSL sürüm numarasını, şifre ayarlarını, oturuma özgü veriyi, ve istemcinin sunucuyla iletişime geçmek için ihtiyaç duyduğu diğer bilgileri istemciye gönderir. Sunucu aynı zamanda kendi sertifikasını da istemciye gönderir. Eğer istemci sunucunun kimlik doğrulama gerektiren bir kaynağına ulaşmak isterse, sunucu istemcinin sertifikasını talep eder.
İstemci sunucunun gönderdiği bilgileri kullanarak sunucuyu doğrular. Eğer sunucu doğrulanmazsa, kullanıcı hata uyarısı alır, şifrelemenin ve doğrulamanın sağlanamadığı hakkında bilgilendirilir. Eğer sunucu doğrulama başarılı olursa, istemci bir sonraki adıma geçer.
İstemci oturum için bir ikincil paylaşılan gizli veri (sunucu işbirliğiyle ve şifreleme algoritmasına göre değişen) oluşturur, bunu sunucunun açık anahtarını kullanarak şifreler (2. adımda sunucunun sertifikasını elde etmişti) ve bu şifrelenmiş ikincil paylaşılan gizli veriyi sunucuya gönderir.
Eğer sunucu istemciden kimlik kanıtlaması isterse (el sıkışmada isteğe bağlı bir adımdır) istemci aynı zamanda yeni bir veri imzalar. Bu veri el sıkışma için eşsiz olmalı ve hem istemci hem de sunucu tarafından bilinmeli. Bu durumda, istemci imzalanmış veriyi, kendi sertifikasını, şifrelenmiş ikincil paylaşılan gizli verinin yanında sunucuya yollar.
Eğer sunucu istemciden kimlik kanıtlamasını istediyse, sunucu istemciyi doğrulamayı dener. Eğer istemci doğrulanmazsa, oturum sonra erer. Eğer istemci başarıyla doğrulanırsa, sunucu kendi gizli anahtarını kullanarak ikincil paylaşılan gizli veriyi deşifreler, ve daha sonra bir dizi adımlar takip ederek esas paylaşılan gizli veriyi oluşturur (istemci de ikincil paylaşılan gizli veriden başlayarak aynı adımları izler).
İstemci ve sunucu elde ettikleri esas paylaşılan gizli veriyi kullanarak oturum anahtarları oluşturur, ki bu anahtarlar simetrik olup SSL oturumu boyunca şifreleme ve deşifreleme bilgilerinin değişiminde ve verilerin bütünlüğünün kontrol edilmesinde kullanılır (bu da, SSL bağlantı süresi boyunca verinin gönderilme saati ile alınma saati arasında herhangi bir değişikliğin olup olmadığı saptanarak yapılır).
İstemci sunucuya bundan sonra kendisinden gelecek mesajların oturum anahtarıyla şifreleneceği bilgisini içeren bir mesaj gönderir. Ardından istemci farklı bir (şifrelenmiş) mesaj göndererek el sıkışmanın kendisine ait kısmının bittiğini belirtir.
Sunucu istemciye bundan sonra kendisinden gelecek mesajların oturum anahtarıyla şifreleneceği bilgisini içeren bir mesaj gönderir. Ardından sunucu farklı bir (şifrelenmiş) mesaj göndererek el sıkışmanın kendisine ait kısmının bittiğini belirtir.
SSL el sıkışması artık sonra ermiş ve oturum açılmıştır. İstemci ve sunucu birbirlerine gönderdikleri verileri şifrelemek, deşifrelemek ve bütünlüğünü tasdik etmek için oturum anahtarlarını kullanırlar.
Bu güvenli kanalın normal işleyiş durumudur. Herhangi bir zamanda içeriden veya dışarıdan bir uyarı alınırsa, taraflardan biri bağlantının yeniden kurulmasını talep edebilir ve böylece süreç kendisini tekrarlar.
Eğer yukarıdaki adımlardan birisi başarısız olursa, TLS el sıkışması başarısız olur ve bağlantı oluşturulamaz.
Tanımlama
TLS protokolü gizli dinlemeyi ve onaysız değişiklik yapmayı önleyerek, ağ üzerinden istemci-sunucu uygulamalarının haberleşmesine izin verir.
Protokoller TLS ile ya da TLS olmaksızın işlem gördüğünden beri, istemcinin sunucuya TLS bağlantısının kurulmasını isteyip istemediğini belirtmesi gerekmektedir. Bunu gerçekleştirmenin başlıca iki yolu vardır; ilk seçenek TLS bağlantıları için farklı bir port numarası kullanılmasıdır (örneğin HTTPS için 443. port). Diğer seçenekte ise normal bir port numarası kullanılır ve istemci TLS protokolün özelleştirilmiş mekanizmasını kullanarak (örneğin mail ya da haber protokolleri için STARTTLS) sunucunun bağlantıyı TLS protokolüne yönlendirmesi için istekte bulunur.
İstemci ve sunucu TLS protokolü kullanmayı kararlaştırdıktan sonra, el sıkışma süreci kullanarak kararlı bir bağlantı kurarlar. Bu el sıkışma esnasında, istemci ve sunucu bağlantının güvenliğini sağlamak için çeşitli parametreler kullanmayı kararlaştırır:
İstemci etkin olan sunucudan güvenli bir bağlantı isteğinde bulunduğunda el sıkışma işlemi başlar. Desteklediği şifreleme takımını(şifreleme ve özet fonksiyonu) liste halinde sunucuya bildirir,
Sunucu ise listeden şifreleme ve özet fonksiyonu bilgilerini alır ve istemcinin kararını destekler ve bildirir,
Sunucu genellikle kimliğini bir sayısal sertifika ile gönderir. Sertifika, sunucunun ismini, güvenilir sertifika yöneticisini ve sunucunun açık şifreleme anahtarını içerir,
İstemci, sunucunun göndermiş olduğu bu sertifikanın güvenilir bir sertifika otoritesinden gelip gelmediğini ve sertifikanın geçerli olup olmadığını kontrol eder,
Güvenli bağlantıda kullanılacak oturum anahtarını üretmek amacıyla, istemci bir rastgele sayıyı sunucunun açık anahtarını (public key) kullanarak şifreler ve elde edilen şifrelenmiş mesajı sunucuya gönderir. Bu şifreli mesajı, sadece sunucu özel anahtarını(private key) kullanarak çözebilmektedir.
İki tarafta rastgele sayıdan bir esas anahtar(master key) oluşturur ve daha sonra şifreleme ve şifre çözme için bir oturum anahtarı üzerinde anlaşırlar.
El sıkışması artık sonra ermiş ve güvenli bağlantı açılmıştır. İstemci ve sunucu birbirlerine gönderdikleri verileri şifrelemek, şifreli verileri çözmek ve bütünlüğünü tasdik etmek için oturum anahtarlarını kullanırlar.
Eğer yukarıdaki adımlardan birisi başarısız olursa, TLS el sıkışması başarısız olur ve bağlantı oluşturulamaz.
Tarihçesi ve Gelişimi
SSL 1.0, 2.0 ve 3.0
Özgün SSL protokolü Netscape tarafından geliştirilmiştir. Versiyon 1.0, ciddi güvenlik kusurlarından dolayı hiçbir zaman piyasaya sürülmemiştir. Versiyon 2.0 ise Şubat 1995'te piyasaya sürülmüştür. SSL 3.0, protokolün yeniden tasarımını temsil etmektedir. Paul Kocher ve Netscape mühendislerinden Phil Karlton ve Alan Freier tarafından 1996 yılında yayınlanmıştır. SSL protokolünün yeni versiyonlarında, SSL 3.0 temel alınmıştır. 1996 yılında IETF tarafından SSL 3.0 tasarısı yayınlanmıştır.
1995 ve 1998 yılları arasında Netscape İletişimde başmühendis olan Dr. Taher Elgamal, "SSL'in babası (father of SSL)" olarak tanınmıştır.
SSL'deki tüm blok şifrelemelerini etkileyen POODLE saldırısına açık olduğu için, SSL 3.0 versiyonunun 2014 yılından itibaren güvensiz olduğu anlaşılmıştır. SSL 3.0 tarafından blok olmayan şifreleme algoritmalarından yalnızca RC4 desteklenmektedir. Ancak muhtemel bir şekilde bu algoritmada kırılabilmektedir.
TLS 1.0
TLS 1.0, ilk olarak Ocak 1999'da RFC 2246'da tanımlanmıştır ve SSL 3.0 versiyonunun geliştirilmiş halidir.
TLS 1.1
TLS 1.1, Nisan 2006'da RFC 4346'da tanımlanmıştır. TLS 1.0 versiyonunun güncellenmiş halidir. Bu versiyonlar arasındaki önemli değişiklikler şu şekildedir:
Şifreli blok zincirlemesi (CBC) saldırılarına karşı koruma eklenmiştir.
Gizli tutulan başlangıç vektörü (IV) açık bir şekilde tutulur.
Padding hatalarını düzeltmede değişiklikler olmuştur.
TLS 1.2
TLS 1.2, Ağustos 2008'de RFC 5246'da tanımlanmıştır. TLS 1.1 spesifikasyonları esas alınmıştır. Başlıca farklılıklar şu şekildedir:
Sözde rastgele fonksiyonundaki MD5-SHA1 kombinasyonu SHA-256 ile değiştirilmiştir.
Tamamlanmış mesaj özetindeki MD5-SHA1 kombinasyonu SHA-256 ile değiştirilmiştir. Bununla birlikte tamamlanmış mesaj uzunluğu hala 96 bit olarak kesilmiştir.
Dijital olarak imzalanmış elemanda MD5-SHA1 kombinasyonu el sıkışması boyunca SHA1 ile değiştirilmiştir.
İstemci ve sunucu hangi özet ve imzalama algoritmasını kullanacağına karar verebilmektedir.
TLS uzantılarının tanımları ve Gelişmiş Şifreleme Standardının(AES) şifreleme parçaları eklenmiştir.
Tüm TLS versiyonları, Mart 2011'de RFC 6176'da düzeltilmiştir. SSL ile geçmişe yönelik uyumluluk özelliği kaldırılmıştır. Öyle ki, TLS oturumları hiçbir zaman SSL 2.0 versiyon kullanımını kabul etmeyecektir.
TLS 1.3
TLS 1.3, Ağustos 2018'de RFC 8446'da tanımlanmıştır. Önceki TLS 1.1 ve TLS 1.2 spesifikasyonları esas alınmıştır. TLS 1.2'den başlıca farkları şu şekildedir:
Cipher suite'lerden anahtar anlaşması ve kimlik doğrulama algoritmaları ayrılmıştır.
Zayıf ve daha az kullanılan eliptik eğrilere olan destek kaldırılmıştır.
MD5 ve SHA-224 kriptografik hash fonksiyonlarına olan destek kaldırılmıştır.
Önceki yapılandırma kullanılmış olsa bile dijital imzalar gerekli kılınmıştır.
1-RTT el sıkışması desteği ve 0-RTT için ilk destek.
Birçok güvenli olmayan ve eskimiş özelliklere olan destek kaldırılmıştır. Bunlar; sıkıştırma, anlaşma tekrarı, AEAD olmayan şifrelemeler, PFS olmayan anahtar değişimi (statik RSA ve statik DH anahtar değişimi), özel DHE grupları, karşılama mesajındaki UNIX zamanı.
Oturum hash'i kullanımı entegre edilmiştir.
Geriye dönük uyumluluk için SSL veya RC4 anlaşmasının engellenmesi.
Geriye dönük uyumluluk için katman versiyon numarası kaydının kullanımdan kaldırılması ve numaranın dondurulması.
Bazı yeni dijital imza algoritmaları eklendi.
Açık anahtar sertifikaları
Açık anahtar sertifikası, açık anahtar sahipliğini onaylar ve bu, diğerlerinin onaylanmış açık anahtara karşılık gelen özel anahtar ile yapılan imzalara veya bildirimlere güvenmesini sağlamaktadır.
Sertifika otoriteleri
Güven ilişkisinin bu modelinde, sertifika otoritesi güvenilir üçüncü şahıstır (Trusted Third Party). Sertifika sahipleri ve sertifika kullanıcıları tarafından güvenilir.
Algoritma
Anahtar değişimi ve anahtar anlaşması
İstemci ve sunucu TLS tarafından korunan bilgilerin değişimine başlamadan önce, verileri şifreleme için kullanılacak şifreleme algoritması ve şifreleme anahtarı üzerinde anlaşmaları gerekmektedir. Anahtar değişimi için kullanılan metotlar şu şekildedir: açık ve gizli anahtarlar RSA(TLS el sıkışma protokolünde TLS_RSA olarak ifade edilir), Diffie-Hellman(TLS_DH), ephemeral Diffie-Hellman(TLS_DHE), Eliptik Eğri Diffie-Hellman(Elliptic Curve Diffie-Hellman / TLS_ECDH), ephemeral Elliptic Curve Diffie-Hellman(TLS_ECDHE), isimsiz Diffie-Hellman(anonymous Diffie-Hellman / TLS_DH_anon), önceden paylaştırılan anahtar (TLS_PSK) ve Secure Remote Password(TLS_SRP) ile oluşturulur.
TLS_DH_anon ve TLS_ECDH_anon anahtar değişim metotları sunucu veya kullanıcının kimliğini doğrulamaz. Aynı zamanda, ortadaki adam (MitM) saldırısına açık olduğu için nadiren kullanılmaktadır. Sadece TLS_DHE ve TLS_ECDHE iletme gizliliği sağlar.
Açık anahtar sertifikaları değişim boyunca kullanılır ve aynı zamanda değişim boyunca kullanılan açık ve gizli anahtarların boyutuna göre çeşitlilik gösterir. Bundan dolayı güvenliğin dayanıklılığı sağlanmış olur. Temmuz 2013 yılında, Google artık 1024 bitlik açık anahtarları kullanmak yerine 2048 bit anahtarlara geçerek kullanıcılarına sunduğu TLS şifreleme güvenliğini artırdığını duyurmuştur.
Şifreleme