Dijital İmza Sistemi Tam Olarak Nasıl Çalışıyor?

dijital imza, dijital belgeleri kriptografik olarak imzalama teknolojisinin ismi. türkiye'de elektronik imza kanununda güvenli elektronik imza olarak geçen teknoloji budur.
açık anahtar şifrelemesi (public key cryptography) denen yöntemin bir kullanım alanıdır özünde. açık anahtar şifrelemesi basitçe size iki parçalı bir sayısal anahtar verir. bu anahtarın bir parçası açık, herkes tarafından bilinen, öbür parçası ise gizli, kimseye göstermemeniz gereken kısmını oluşturur.
açık anahtar şifrelemesinin güzel yanı gizli anahtarla şifrelenen içeriğin şifresinin sadece açık anahtarla çözülebilmesi, açık anahtarla şifrelenenin ise sadece gizli anahtarla çözülebilmesidir.
dijital imza da bu mantığı kullanır. bir dijital içerikten üretilen kriptografik tek yönlü hash değerini alır. bu hash değerinin özelliği sabit ve kısa uzunlukta olması ve içeriği tek bir bit bile değiştirseniz değerin de tamamen değişiyor olmasıdır (bkz: hashing/@ssg). sonra bu hash değerini özel anahtarla şifreler. güzel yanı herkes bu şifrelenmiş veriyi geri sizin açık anahtarınızla açabilir ve içinden hash değerini çıkarabilir. ancak kimse özel anahtarınızı bilmediğinden aynı şifrelemeyi yapamaz. bu sayede herhangi biri açık anahtarla hash değerini açıp sonra elindeki içerikten kendi çıkardığı hash değeriyle kıyaslayarak içeriğin sizin imzaladığınız içerik olup olmadığını teyit edebilir.
örnekle anlatayım
mesela elinizde ahmet.txt dosyası var ve içinde "ahmet süper bir insandır" yazıyor. buse de dijital olarak bunun altına imzasını atacak. napıyor buse? önce ahmet.txt'nin hash'ini çıkarıyor:
13ef65990147716eab883e13d47ce84fabd3b38eb009e203fb560ebb6b003a63
bu hash değerinin özelliği boyunun hep sabit olması. yani 7gb'lık video dosyası da olsa yukardaki gibi 64 karakter uzunluğunda bi değer elde edecektik. ve o 7gb'lık videonun içinde bir karakteri hatta tek bir biti değiştirsek bile tüm hash değeri değişecekti. kriptografinin güzellikleri işte.
neyse sonuçta yukardaki hash değerini sadece "ahmet süper bir insandır" yazısına karşılık olarak elde edebiliyoruz.
buse de bu hash'i imzalayacak, nasıl bakalım. buse'nin dijital anahtar çifti şöyle olsun:
gizli anahtar: snh8aq4yh9yehg6y1wcxwtzxe7av9qssyc65towqxttq
açık anahtar: bgaceeumxhdpngjlbqyfsaqhc45wvuojywjzya6pxysk
buse "bgaceeumxhdpngjlbqyfsaqhc45wvuojywjzya6pxysk" anahtarını herkesle paylaşıyor (çünkü açık anahtar). "bu benim açık anahtarım, benimle ilgili bişey teyit edecekseniz, şifrelediğim bişey çözecekseniz, ya da bana şifreli bişey yollayacaksanız bunu kullanın" diyor.
buse bu hash değerini gizli anahtarıyla şifreliyor. oluyor sana hash şöyle bişi:
[hjd/5fckngkyypg1g3s01vkejcyxlqzxdaz211/w0gt44gxysko8vrh9krbpeljezglbssy6c9zr hpal4trduestklly6n1ze2n+uqsay4oheefdmw9homdpkcıi1c5/]
buse bunu ahmet.txt'nin yanına iliştiriyor ya da imzanın teyit edilmesi gereken herhangi bir yere koyuyor.
bu text dosyasının buse tarafından gerçekten imzalandığını ise mesela melis şöyle teyit ediyor:
melis buse'nin açık anahtarıyla şifreli hash değerinin şifresini çözüyor:
13ef65990147716eab883e13d47ce84fabd3b38eb009e203fb560ebb6b003a63
sonra ahmet.txt'nin hash'ini çıkarıyor:
13ef65990147716eab883e13d47ce84fabd3b38eb009e203fb560ebb6b003a63
aha ikisi de aynı. demek ki buse gerçekten bunu imzalamış! o zaman melis ahmet'e güvenebileceğini biliyor. evi arabayı ahmet'in üstüne yapıyor.
eğer ahmet.txt'nin içeriği değişseydi hash de değişeceğinden imza geçersiz olacaktı. eğer dokümanı buse dışında biri imzalamış olsaydı da şifreleme anahtarı değişeceğinden buse'nin açık anahtarı o imzayı açamayacaktı.
mük mük.
bu uygulama için seçilen açık anahtar algoritması ve hash algoritmasına göre sözkonusu imzalama algoritmasının da adı değişir. mesela secp256r1 eliptik eğrisi ve sha-256 hash algoritması ile çalışan dsa algoritmasının adı es256'dır.