Siber Güvenlik
Şifreleme Bilimi ve Yöntemleri
Geçen günlerde öğretmen bir arkadaşımla konuşuyordum, bana şöyle dedi. “Sınıfın yarısı matematikten korkuyor”. Siber güvenlik alanında çalışmaya başladığım ilk yıllarda, fark ettim ki, ben dahil herkes şifreleme metodlarından kaçınıyordu. Hepimizdeki bu matematik korkusu belki de önemli ve basit kavramlardan uzaklaştırıyor. Önemli kavramların basit bir dille anlatılmadığında onlardan kaçınmaya yol açtığını düşünüyorum.
Matematiği sevmeyenler için şifreleme bilimi ve yöntemleri
Öncelikle matematik dediğimizde çoğunlukla aklımıza formüller mi geliyor… Hep ezberlemeye alıştığımız ve korktuğumuz için böyle düşünüyoruz. Aslında matematik deyince sistematik bir durumun aktarılması gibi düşünmemiz gerekiyor. Bu konuda korkuyu sevgiye dönüştürmek için Sinan Canan’ın kaos ile ilgili yazılarını okumanızı öneririm. Matematiğin de basit bir dille anlatıldığında çoğu insanı etkilediğini görüyoruz. ( hatta Sinan Canan da geçmişte matematikten korkan birisi imiş)
Peki nedir bu şifre?
Dediğimiz zaman karşımıza neler çıkıyor: “kökeni sıfır’a dayanıyor”…
Ama şu anda biz günlük dilde “şifreyi unuttun mu” derken, tabii ki kullanıcı doğrulaması yaparken kullandığımız şifreden bahsediyoruz.
Turk Dil Kurumu'na göre şifre kelimesi Türkçeye Fransızca chiffre kelimesinden girmiş.
İngilizcedeki "cipher" kelimesinin kökeni eski Fransızca ciffre kelimesi.
Ciffre kelimesinin kökeni ise arapça şifr kelimesi.
Şifr kelimesi de aslında hepimiz bildiği Sıfır. (1)
TDK
(şi'fre), Fransızca chiffre
1. isim Gizli haberleşmeye yarayan işaretlerin tümü; kod:
"İstanbul mümessilliği şifresiyle Mustafa Kemal Paşa'ya, bekledikleri malumatı iletmiştim." - Yakup Kadri Karaosmanoğlu
2. isim Gizliliği olan kasa, kapı, çanta vb. şeylerin açılması için gereken rakam. (2)
Şifreleme diye türkçe bir kavram kullanıyoruz, ancak burada yapılan mesajı gizlemek için yapılan hareketi tam anlatmadığını düşünüyorum. Bu kelime yi kullandığımızda, kriptoloji kavramlarını sadece Türkçe’den okuyan kişiler için bir hayli karışık gelebilir. Bu da teknik konuları gittikçe karıştırır.
Bir önceki yazımızda şifreleme algoritmalarının nasıl çalıştığını anlatmıştık. (3) Burada da aslında mesajı şifrelemek yerine kilitleme dememiz konuyu anla(t)mamız için gerekiyor.
kilitlemek
1. Anahtarla kilidi kapamak:
"Kapıyorum zannıyla kilitlemişim, diyordu." - Mithat Cemal Kuntay (4)
“Evin kapısını kilitledim”… bu hareketi yapmak için neye ihtiyacımız var: bir kilit sistemi ve anahtar. İşte gizlilik(confidentiality) sağlayan algoritmalar da bu şekilde çalışıyor: bir kilit(algoritma) ve anahtar(key).
“Google’a girerken https siteden giriyorum, kendimi güvende hissediyorum” diyor bir arkadaş. Burada hangi kilit sistemi kullanılıyor, hangi algoritmaları hangi anahtar ile kullanılıyor.
İlgili web sitesinin detayına girdiğimizde anahtar ve algoritma detayını da görüyoruz:
Bir anahtarımız var (Public Key) + bir de algoritmamız var(Elliptic Curve).
Bu anahtar ve algoritma ile mesajlarımızı KİLİTleyip google’a gönderiyoruz. Bu kadar basit (mi acaba? 🙂 )
Şifre Bilimi;
Kriptoloji diyince, Google’da nasıl bir tanım karşımıza çıkıyor:
“Kriptoloji, şifre bilimidir. Haberleşme ve iletişim alanında iletilerin, mesajların, yazıların güvenli şekilde alıcısına ulaşması için çalışmalar yapan, yöntemler geliştiren bilim dalıdır.”
Yani amacımız mesajlarımızın güvenli bir şekilde ulaşması ancak biz güvenli dediğimiz noktada kafamızda sadece gizlilik(confidentiality) beliriyor. Aslında kriptolojide bir çok farklı tipte matematiksel araçlar kullanıyoruz ve şifre bilimi demek sizce doğru mu?
Hash fonksiyonları nasıl çalışır?
Haberleşme ve iletişimde bir de verinin değişmediğine de emin olmamız gerekiyor.
Yoksa banka transferi yaparken gönderdiğim para gizli(confidential, kilitli) olabilir ama başka biri bu veriyi değiştirirse, benim için zarar (veya şans eseri fayda) olacaktır. O zaman benim bir de verimin bütünlüğünü de koruyor olmam gerek.
İşte burada da matematik devreye giriyor. Örneğin bir mesajından içindeki “ismimMehmet, TCKN:123113” verisinin bütünlüğünü nasıl kontrol edebilirim…
Çok önemli olmayan bir veri olsaydı, mesaj açık ve kısa bir şekilde geldiğinde de, bazı kısımlarını kontrol edip değişmediğini kontrol edebilirdik. Ancak önemli veriler olduğunda bu bu mesaj için farklı önlemler alıyoruz, yani basit bir matematikle kontrol edebiliyoruz.
Annem beni biliyor ki, makarnayı kıymasız yiyemem… “Oğlum git bir kilo kıyma al gel…” Eti alan kasap kıyma makinasının girişine götürdü, çıkışta bir baktım küçük parçalara bölünmüş… Kasap arkadaşa dedim ki, “vazgeçsem kıymadan, onu tekrarda ete dönüştürsek… “. Yok dedi olmaz öyle, bu veri geri dönmez…
hash (v.)
1650s, "to hack, chop into small pieces," from French hacher "chop up" (14c.),
Bir veriyi küçük bir parçaya çevirdik ve bunu da matematiksel bir fonksiyon (hash) kullanarak yaptık. Sonrasında da tek gereken, mesajı alan kişinin de veriyi aynı makinaya sokup aynı kıymayı alması. Sonra da diyecek, evet benim gönderdiğim mesajın özeti de buydu…Bu kadar basit (mi acaba? 🙂 )
İşte bir çok verimizin bütünlüğünü için kullandığımız SHA, MD5 gibi fonksiyon(algoritmalar) da temelde bu şekilde çalışıyor. Peki burada matematiği nasıl kullanıyoruz? Kullandığımız tüm mesajların dijital dünyada 1 ve 0’lara denk geldiğini biliyoruz.
Mesajımızı en basit bir şekilde HASH’lemek için bir XOR fonksiyonu kullanabiliriz. XOR fonksiyonu ne yapar? İki girdi arasındaki matematiksel olarak fark varsa, 1 sonucunu verir. (Aynı ise 0 döner) Dolayısıyla mesajımızı öyle bir duruma getirir ki, o mesajı inceleyen kişi verimizi anlayamasın.
O veri, benim verim
“O mektup benim, yemin ederim bak…” bu mesaj eskiden verinin bizim olduğunu kanıtlardı ama şu an değil.
“Bak bu kağıdın şurasına imza da atmışım…” Bu mesaj eskiden verimizin bizim olduğunu kanıtlardı ama şu an değil.
“Bak bu mesajımı dijital imzalayarak gönderiyorum…” bu veri kesin benim verim, Evet (mi acaba? 🙂 )
Dolayısıyla o verinin benim verim olduğunu (dijital) imzalamalarla kanıtlıyoruz, evet imzalatıyoruz…
Dijital imzalama için ne gerekiyor?
Yine bir kilit ve anahtar. Kilit yine matematiksel fonksiyonlar-algoritmalar olarak düşünürsek, peki elimizdeki anahtar ile kilitleyince onun benim verim olduğunu nasıl anlıyorlar? Çünkü aynı kilitten başkalarında da olabilirdi… O anahtara/kaşeye eğer güven varsa veya o anahtar dünyada bir tek sizde varsa…bu sefer işler değişiyor. Karşı taraf da diyor ki evet, bu mesaj Mehmet Ali’nin… (mi acaba? 🙂 )
İşte bu yüzden önemli olan neydi, anahtarı kaybetmemek/düşürmemek… Düşürürsek, eve giremeyiz, işe gidemeyiz… Sonra da ne olur, (internette) gezinemeyiz. Güvensiz hissettiğimiz yerlerde oluruz. Ama bunun çözümü basit, anahtarı yanımızdan ayırmayız, onu saklarız veya üstünü sararız.
Peki bu anahtarlar hep bizde mi durur, eve giren başka kişi de olmaz mı?
Anahtar Yönetim süreçleri (Key Management)
İstanbul’da eve yeni taşındık, annem dedi: “Ben ayın 15’inde gelecegim, sen evde olmasan bile ben de eve girebileyim”.
Nasıl olacak bu iş (anne)? Tek anahtarımız var ve ben de ayın 15’inde Ankara’ya gidecektim. Düşündüm, sonra dedim ki bu anahtarı ben kopyalatayım, bir tanesini de anneme göndereyim.
Çilingir abimize gittim, o kopyaladı. Anahtarı kargoya verdim, çalındı. Şimdi ne olacak?
Onu öyle bir forma sokup göndermeliyim ki, kargocu paketimi alsa bile anahtarımı çalamasın. (Sayısal) anahtarıma bir güzel paket yapacağım.
Hem de büyük bir gösteriş olacak. (Big number exponent) .
paketimin içine 5 koyuyorum, mesajım bu oldu.
5’i n üssüne (mod 2027) alarak kilitliyorum,
Bu matematik operasyonu sayesinde karşı taraf mesajımı 1470 olarak alıyor.
Buradaki matematik şurada devreye giriyor:
- Biz bir sayının üssünü almayı biliyoruz, 5^2 = 25 diyebiliyoruz,
- Aynı şekilde bir sayının bir bölene karşılık kalanı da bulabiliyoruz, yani modunu alabiliyoruz.
25 (mod 17) ) = 8 , 25/17 böldüğümüzde kalan 8’dir. - Peki burada ifadedeki x’i bulmamız kolay olur mu?
5^x = 5 mod 17
Evet burada sorunu çözmek için logarithm devreye giriyor. Aslında kavram kafamızı karıştırmasın, çünkü logarithm bize buradaki üstteki x sayısını bulmamıza yardımcı olur. Her iki tarafı da logarithm içine alırsak, log5 bazında x kolay bir şekilde bulabiliyoruz.
x=log5 (5 (mod 17)) dönüşüyor, bu da x’in 1 eşit oldugunu buluyoruz.
diğer bir örnekte ise küçük sayılarda hemen kafamızdan bile logartihm alıp n=3 diyebiliyoruz:
Peki diyelim ki buradaki sayıyı büyük rakamlara çevirsek, buradaki n bulmak imkansız hale gelebiliyor.
Tabii ki bu olayı matematikçiler keşfediyor ve anahtarlarımızın dağıtımında kullanıyorlar.
Diffie-Hellman Key exchange protokolü:
Şimdi işleri kargocular ve hırsızlar için biraz daha zorlaştıralım, büyük rakamlar ve asal sayıları denklemlerimize sokacağız
Logarithm Discrete Problem:
İşte matematikçiler(aşagıda ilgili protokolü ismin geldiği Diffie ve Hellman’ın fotoğrafları da var) demiş ki, kolaysa bunu çözsünler(kargocular, hırsızlar vb.)...
Şimdi diyelim ki 2 diye bir mesajımız var ama karşı tarafa 9 olarak ulaştırıyoruz.
(Aradaki kargocu abimiz de bu mesajı üssel sayı ile süslediğimizi ve hangi sayıya böldüğümüzü ( modulo operasyonu) biliyor.
Buradaki kargocu abi, kargoyu nasıl kilitlediğimizi kolay bir şekilde buluyor.
Önce n=1 dener, sonra 2,3.. derken 6 olarak bulabilir.
n’i bulunduğunda, artık anahtarı kargocuya vermiş durumdayız.
Ne demiştik? “İşte bu yüzden önemli olan neydi, anahtarı kaybetmemek/düşürmemek… “
Artık mesajlarında gönderici hangi özel anahtar ile mesajını kitlediğini bulup, sinsi bir şekilde bu mesajları çözebiliriz.
Ama sayılar büyüdükçe buradaki matematiksel problem, çok zorlaşıyor. Dolayısıyla da kilitli veriyi gören kişi de çözemiyor.
Paket çözülmeyince, biz de rahat rahat anahtarlarımızın dağıtımını yapıyoruz, hem de bedava…
Ama kargocular ya kötü niyetli ise.. kargoyu açmayı denemek yerine şunu da yapabilir. Aldığı kargo paketini kendi özel hazırladıkları paket ile değiştiriyorsa…
O zaman bir de gelin, doğrulama önlemine bakalım.
Kimlik doğrulama (Authentication) nedir?
Kimlik doğrulama. Pasaport kuyruğuna girdim, elimde pasaportum var. Görevli bir bana bakıyor, bir de pasaportuma… Yüzüme bakıp, bir de pasaport fotoğrafıma bakıyor… Önemli bir fark görmezse geç diyor… Kimliğim doğrulandı.
İşte internette de böyle yapıyoruz: En basit kimliğimiz ne: Kullanıcı adımız, ID’lerimiz vb.
En basit doğrulama yöntemimiz ne: Parolalarımız...
Dolayısıyla matematik çok basit, doğru parolayı girsem, sistem de bu benim girdiğim parola ile karşılaştırıyor. Formüle gerek yok.
Tabii ki, çoğu durumda kimliğimizi doğrulamamız için sadece parolamız yetmiyor. Ek bir doğrulama olarak da bir kerelik oluşturulan “password” ekliyoruz.
İkinci faktör (Multi Factor Authentication) ile doğrulama nedir?
Hiç bir sistem %100 güvenli değildir, ama tek faktörlü doğrulama sistemlerinin zayıf bir koruma sağladığını biliyoruz. O zaman ikinci bir faktörü devreye sokuyoruz. Diyelim ki OTP doğrulaması da gerekiyor.
Bu sefer sistem ne yapıyor, parolanız ile birlikte ürettiği OTP’yi, sizin girdiğiniz verilerle karşılaştırıyor.
Kullanıcı: Mehmet Parola: Mehmeteor OTP: 124367
Verisi ile sistemdeki veri karşılaşıyor. (Tabii en basit haliyle bu şekilde anlatabiliriz)
Burada nerede matematik var?
Diyebiliriz, öyle bir matematik yapmalıyız ki, tahmin edilemeyecek şekilde rastgele 6 rakam versin. Burayı matematik ile nasıl üretildiğini de size bırakıyorum…
Dolayısıyla bir matematik bilimi nelere kadirmiş, matematik sayesinde de daha güvendeyiz, en azından sanal dünyada… matematiği biraz daha sevdirin, yayalım bu bilgiyi…ve bu detaylar ile kafamız karışmadan konu bizde kalsın… Güvenli internet gezinmeleri…
https://tr.linkedin.com/pulse/%C5%9Fifre-kelimesinin-nereden-geldi%C4%9Fini-biliyor-musunuz-buyukkahraman
https://sozluk.gov.tr/
https://gelecegiyazanlar.turkcell.com.tr/blog/simetrik-ve-asimetrik-sifreleme-algoritmalari
https://sozluk.gov.tr/
https://www.sciencedirect.com/topics/computer-science/asymmetric-cryptography