Asymmetric-Key Encryption Nedir ve Nerelerde Kullanılır?

Bu flood’da size Asymmetric-Key Encryption ve bazı kullanım alanlarını anlatacağım.

Asimetrik anahtar şifrelemesi bugün popüler olarak kullandığımız birçok servisin (HTTPS, dijital imza, dijital sertifika, blockchain, vb) işlerlik kazanması için gerekli kriptolojik altyapıyı sağlamaktadır.

Simetrik anahtar şifrelemesinde (AES, DES, DES3, vb) veri gizli bir anahtar tarafından şifrelenerek saklanır veya bir başkasına iletilir. Şifrelenmiş veri gizli anahtar kullanılarak deşifre edilir ve kullanılır. Bu sisteme simetrik denmesinin sebebi verinin aynı anahtar kullanılarak hem şifrelenmesi hem de deşifre edilebilmesidir. Veriyi güvenli saklama için etkili bir şekilde kullanılabilen simetrik şifrelemenin en önemli dezavantajı veri iletimi senaryolarında gizli anahtarın paylaşılma problemidir. Gizli anahtarın veri iletiminin iki tarafına dağıtılma problemi, anahtarın kendisinin de güvenlik sebebiyle sık sık değiştirilmesi gerektiği için çok daha büyük bir problem haline gelmiştir.

Asimetrik anahtar şifrelemesinin çözdüğü en önemli problem tahmin edebileceğiniz gibi simetrik anahtar şifrelemesinin çözemediği anahtar dağıtımı problemdir, simetrik şifrelemenin aksine iki farklı anahtar (Public/Private Key) kullanılır.

Public Key ile şifrelenen veri Private Key ile, Private Key ile şifrelenen veri ise Public Key ile deşifre edilebilir. Adlarından da anlaşılacağı gibi Private Key kişiye özel gizli bir anahtar, Public Key ise herkese açık bir anahtardır. İletişime geçilmek istenen kişinin Public Key’i ile şifrelenen veri sadece ilgili kişinin Private Key’i ile deşifre edilebileceği için güvenli bir şekilde ilgili kişiye iletilebilir.

Herkese açık olan Public Key’lerin dağıtımı, PKI (Public Key Infrastructure) adı verilen ilerleyen flood’larda değineceğimiz makanizma ile dijital sertifikalar aracılığıyla yapılır. Public Key’ler önceki flood’da bahsedilen CA (Certificate Authority)’ler tarafından imzalanmış dijital sertifikalar içerisine konulurlar. İletişimin ilk adımında bu sertifika karşı tarafa gönderilerek Public Key dağıtılmış olur. Aşağıda Garanti Bankası’nın sertifikasındaki Public Key verilmiştir.

Asimetrik anahtar şifrelemenin belki en önemli kullanım alanı SSL/TLS ile HTTP dahil birçok başka protokolü (SMTP, SNMP, NTP, FTP, vb) güvenli hale getirmesidir. Sonraki flood’da SSL/TLS’in nasıl çalıştığını HTTPS üzerinden inceleyeceğiz.

İkinci kullanım alanı olarak dijital imza verilebilir. Dijital imza’da imzalanacak dokümanın Hash’i (SHA1, SHA256, vb) alınır sonra bu Hash imzalayacak kişinin Private Key’i ile şifrelenir, bu veriye imza denir. Dijital imza, doküman ile birlikte karşı tarafa iletilir. Doküman ve imzayı alan kişi dokümanın ilgili kişi tarafından imzalanıp imzalanmadığını anlamak için bir yandan dokümanın Hash’ini alır, diğer yandan da imzayı, dokümanı imzalayan kişinin Public Key’i ile deşifre eder. Deşifre edilen veri dokümanın Hash’i ile aynı ise dokümanın ilgili kişi tarafından imzalandığına emin olunur. Kişinin Private Key’i kendisi dışında başka kimse tarafından bilinmediği için doküman güvenle imzalanabilir.

Yukarıda anlatılan dijital imza adımları aşağıdaki görselleştirilmiştir.

Dikkat ettiyseniz dijital imzada dokümanın kendisi yerine Hash’i şifrelenerek imza olarak tutuldu. Bunun bir sebebi asimetrik anahtar şifrelemesinin büyük verileri performanslı bir şekilde şifreleyememesidir.

Bir başka kullanım alanı da uzak sunuculara şifre girilmeden SSH yapılması ve Git’te uzak sunuculara Push edilebilmesidir. Her iki senaryo da benzer çalıştığı için SSH üzerinden devam edebiliriz. Bir sunucuya SSH yapmasını istediğimiz kişinin Public Key’ini sunucudaki authorized_keys dosyasına ekleriz. Sunucuya SSH yapmak istediğimizde sunucu bize rastgele bir mesaj gönderir ve bu mesajı Private Key'imiz ile şifrelememizi ister. Private Key ile şifrelediğimiz mesajı sunucuya gönderdiğimizde sunucu bunu alır ve bizim Public Key'imizle deşifre etmeye çalışır. Eğer deşifre sonucunda ortaya çıkan mesaj bize gönderdiği mesaj ise bağlantıya izin verir. Böylece şifre girmeden sunucuya bağlanmış oluruz.

Yukarıda anlatılan SSH bağlantı adımları aşağıda görselleştirilmiştir.