Devlet Şifreli Mesajlarınızı Nasıl Okur? – Kaan Dişli

//
434 Okunma
Okunma süresi: 13 Dakika

Son dönemde gündemde olan Narin Güran davası ve Türkiye hükümetinin, Meta şirketinden silinen WhatsApp kayıtlarının talep etmesi üzerine[1] şifreleme, gizlilik ve kimin mesajlarınıza erişip erişemeyeceğine dair birçok soru merak uyandırdı. Bu konularda  fazla Türkçe kaynak göremediğim için bir yazı hazırlamaya karar verdim.

Bugün size bir hükümetin nasıl toplu gözetleme amacıyla, şifreleme standartlarına karşı savaş açtığını anlatacağım. Bazılarınız gözetleme konusundan haberdar olsanız da teknik olarak tam nasıl becerdiğinin farkında olmayabilirsiniz. Umuyorum ki yazının sonunda bu sistemlerin nasıl çalıştığına dair daha net bir fikre sahip olacaksınız. Amacım gizliliğinizin hakkında bir paranoya yaratmaktan ziyade hangi şartlar altında ve kimler tarafından gizliliğinizin ihlal edilebileceği hakkında bilgi vermektir. Uyarı: Bol matematik içeren bir yazı olacaktır.

Şifreleme Nedir?

Şifreleme, okunabilir bir veriyi veya mesajı gizlilik ve güvenlik sebebiyle okunamaz hale getirmektir. İsteğimiz sadece deşifreleme anahtarına sahip olan kişilerin bu veriyi okuyabilmesidir. Mesaj şifrelenirken  bir şifreleme algoritması seçilir, bu algoritma mesaja seçilen bir şifreleme anahtarıyla uygulanır. Şifrelenmiş mesaj okunmak isteniyor ise deşifreleme anahtarı ve seçilen algoritmanın tersi uygulanır ve mesajın kendisi elde edilir.

Bu konsepti daha anlaşılır kılmak için basit bir örnek üzerinden gidelim:

Diyelim ki Ali’nin şifrelemek istediği mesaj “YARIN DOKUZDA  ARKA KAPIYA GEL” olsun ve bu mesajı sadece arkadaşı Berk’in okuyabilmesini istesin ve bunun için Sezar şifrelemesi algoritmasıyla gizlesin.

Sezar şifrelemesinde, her harf , alfabedeki pozisyonunun n adım ilerisine kaydırılır. Ali n’in 1 olduğunu Berk’in kulağına fısıldıyor ve Berk’e üzerinde “ZBSİO EÖLÜAEB BSLB LBRİZB ĞFM“ yazan bir kağıt veriyor. Berk de n sayısını kullanarak aldığı mesajdaki her harfi 1 adım geriye kaydırarak esas mesajı okuyabiliyor. Bu senaryoda şifreleme ve deşifreleme anahtarımız 1 oluyor.

Tahmin edebilirsiniz ki internetin üzerinden bu algoritmayla şifrelenmiş bir mesaj yollamak büyük sıkıntılara yol açacaktır ve mesajı çözmek çok uzun sürmeyecektir. Eğer mesaj konuşmalara kulak kabartan Cansu’nun eline geçerse, en basitinden n’in değeri için 29 olasılığı (alfabe 29 harften oluştuğu ve Z’den sonra başa geri döndüğümüz için 29 olasılık vardır) teker teker deneyip mesajı okumayı başarabilecektir. İkinci bir problem ise deşifreleme anahtarının iletilmesidir. Ali eğer bu mesajı Berk’e internet üzerinden yollayacaksa aynı zamanda Berk’in mesajı çözebilmesi için deşifreleme anahtarını da yollaması gerekir. Bu da sizinle aynı ağda bulunan veya ağ trafiğinizi dinleyen üçüncü bir partinin de anahtarınızı duymasına yol açar.

İki parti arasında güvenli iletişimin sağlanabilmesi için daha karmaşık şifreleme yöntemlerinden faydalanmamız gerekir.

1978’de bulunan RSA algoritması bu iki problemi de çözüyor.

Bu çözümü açıklamadan önce kısaca modülo ya da kısaca mod işleminin ne anlama geldiğini belirteyim: Modülo bir bölme işlemindeki kalanı belirtir yani 7 / 3  işleminin kalanı 1 olduğu için bunu 1 =  7 mod 3 şeklinde ifade edebiliriz.

Tahmin edeceğiniz üzere bir bölme işlemindeki kalan hiçbir zaman bölenden büyük olamayacağı için, herhangi bir a ve n sayıları için a mod n işleminin sonucu n’den büyük bir sayı olamaz dolayısıyla çözüm kümemizin belirli sınırları vardır: {0…n-1}.

Ali, Berke mesaj yollamak istediği zaman önce bu isteğini belirten bir talep yollar. Bu talebi alan Berk iletişimin güvenli olması için RSA şifreleme yöntemini şu şekilde kullanır:

Berk iki tane çok büyük asal (ve gizli) p ve q sayıları seçer. Bu sayıların çarpımına n diyebiliriz yani,

p*q = n

Bunun üzerine şifreleme anahtarımız olacak herkese açık bir e değeri seçer (Genelde 65537 olur ve φ(n) ile aralarında asal olması gerekir ama buna birazdan değineceğiz).

Bu işlemde n ve e açık anahtarlardır ve değerlerinin herkes tarafından bilinmesinde bir sakınca yoktur.

Ali tarafından mesaj yollanacağı zaman, Ali mesajını sayısal bir formata, m’ye çevirir (örneğin her karakterin ASCII değerini[2] yazar) ve şu işlemi uygulayarak sonucunu Berk’e atar:

c = me mod n 

Örneğin:

p= 61, q=53 olsun. Bu durumda p*q = n = 3233. e değerini 17 seçelim ve gönderecğimiz mesajın da sayısal değeri 65 olsun. Elde ettiğimiz denklem şudur:

c = 6517 mod 3233 

Hesap makinesini kullanarak  c = 2790 olduğunu bulabiliriz.

m mesajın orijinal (sayısal) değeri, c ise şifrelenmiş halidir ve internet üzerinden yollanan değer budur. Bu yüzden iletilen veriyi yakalayan Cansu sadece c’yi görür. Peki c’yi alan Berk nasıl mesajı orijinal haliyle okuyabilir? Deşifrelemek için sadece kendisinde bulunabilecek bir gizli anahtara, d’ye ihtiyacı vardır.

Berk tarafından φ(n) yani,

φ(n) = (p-1) * (q-1) hesaplanır.

Bu garip değerin hesaplanmasının sebebi gizli anahtarımızı üretmek için Euler’ın teoreminden faydalanmamızdır.

Euler’in teoremine göre, eğer a ile n aralarında asallarsa (bunun olmama ihtimali n iki asal sayının çarpımı ve çok büyük bir sayı olduğu için çok düşüktür) yani ebob(a, n) = 1 ise,

aφ(n) = 1 mod n ifadesi doğrudur. Bu önkabulle denklemimize geri dönersek, bizim gizli anahtarımız yani d’nin:

1 = e*d mod φ(n) denklemini sağlaması yeterlidir. Bu denklemi sağlayan sayı uzatılmış öklid algortimasıyla bulunur, nasıl hesaplandığına deyinmeyeceğim fakat bilmeniz gerek tek şey hesaplaması zor olmayan bir değer olduğudur. Artık tüm değişkenleri hesapladığımza göre d’yi kullanarak c’yi deşifreleyebiliriz:

cd   mod n

c yerine ilk denklemimizi koyarsak:

(me)d mod n

= me*d mod n

e*d mod φ(n) = 1 denklemi sayesinde (modüler işlemin de bölümden kalanı ifade ettiğini hatırlarsak), k herhangi bir katsayı olacak şekilde: e*d = k*φ(n) + 1 diyebiliriz.

Bu durumda:

mk*φ(n) + 1 mod n

= (mφ(n))* m mod n

Son olarak Euler teoremini denklemimize yerleştirirsek,

(1)k * m mod n                     

= m mod n

Ve sonunda orijinal mesaj olan m’ye ulaştık demektir.

Daha önce verdiğimiz sayısal örneği devam ettirirsek,

φ(n) =  60 * 52 = 3120

1 =  d * 17  mod 3120

d = 2753  (uzatılmış öklid algortimasıyla bulduk)

27902753 mod 3233 

= 65

Bu algoritma, n’nin asal çarpanları olan p ve q sayılarının yeterince büyük değerlerde bulunmasının matematiksel zorluğu üzerine kuruludur ve buna çarpanlara ayırma problemi denir. p ve q’yu bilen biri aynı zamanda gizli anahtar d’yi de hesaplayabilir. O zaman önemli bir soru p ve q’nun nasıl seçildiğidir, eğer bu sayılar belirli bir paterne göre seçiliyorlarsa ve rastgele değillerse bu paterni çözen biri gelecekte belirlenecek p ve q değerlerini tahmin edip RSA şifrelemesini işe yaramaz kılabilir.

Bu sayıları oluşturmak için ihtiyacımız olan programlara CSPRNG yani kriptografik psödo-rastgele sayı üreticisi denir.

Yazılımlar deterministik özelliklere sahip olduğu için (aynı program aynı değerlerde hep aynı sonucu verir) “gerçekten” rastgele bir sayı üretmeleri mümkün değildir. Sadece “psödo-rastgele” yani rastgeleyi andıran sonuçlar verebilirler.

CSPRING’ler şöyle çalışır:

İlk olarak programın “iç-durum”’unu temsil eden s değişkeni için bir başlangıç değeri s0 seçilir. Bu değer genellikle yüksek entropili bir kaynaktan sağlanır,  örnek olarak mouse ve klavye tıklamaları arasındaki zamanlamalar veya hard-disk etkinliği kullanılabilir. İç-durumların gizli tutulması şifreleme sisteminin güvenliği için şarttır.

İşlemin geri kalanı için tek yönlü fonksiyonlar gerekir. Tek yönlü fonksiyonlar bir girdi ile çıktının çok kolay hesaplandığı fakat elde edilen çıktı ile kullanılan girdinin hesaplanmasının çok zor olduğu fonksiyonlardır (Ör: Hash fonksiyonları). Bu fonksiyonlara herkes erişebilir.

Rastgele bir sayı elde etmek istediğimiz zaman s0, tek yönlü  bir fonksiyonla modifiye edilir (bu fonksiyona TYF1 diyelim) ve s1 değerinde yeni bir “iç-durum” elde edilir. s1, başka bir tek yönlü bir fonksiyona sokularak (örneğin: bir hash fonksiyonu, buna da TYF2 diyelim) amaçladığımız  rastgele değer elde edilir. Yeni bir rastgele sayı elde etmek istediğimiz zaman bu sefer s1’i  TYF1’e sokarak s2 iç-durumunu elde ederiz, s2’ye TYF2’yi uyguladığımız zaman ikinci bir rastgele sayı elde etmiş oluruz.

Her iki fonksiyonun tek yönlü olması önemli bir detaydır, eğer Rastgele_sayın yı kullanarak onu üreten değişken olan iç durum sn’yi keşfedebilirsek bu sayede gelecek iç-durumları da hesaplayabiliriz[3]. Geçmiş iç durumların hesaplanmasını önlemek için ise, yeni iç-durum üretirken de tek yönlü bir fonksiyonun kullanılması gerekir.

Şimdi asıl mevzuya geldik. RSA’in kriptografi kütüphanesinde kullanılan CSPRING, Dual_EC_DRBG yani Çift Eliptik Eğri Deterministik Rastgele Bit Üreticisiydi ve bütün problem burda başladı.

Dual_EC_DRBG, 2006’dan 2014’te geri çekilene kadar kadar NIST tarafından onaylanan 4 standard CSPIRNG’den biriydi. NIST yani Ulusal Standartlar ve Teknoloji Enstitüsü bilgi sistemlerinin güvenliği için rehberlik ve standart sağlayan bir Amerikan hükümet kurumudur.

Kullandıkları bu standardla ilgili problemi anlayabilmek için önce kriptografide neden eliptik eğrilerin kullanıldığını anlayalım.

Eliptik eğriler yukarıda gördüğünüz şekilde ve denklemi y2 = x3 + ax + b formatında olan eğrilerdir ve tahmin edeceğiniz gibi bu eğri üzerinde olan noktalar x ve y koordinatlarıyla bu denklemi sağlayan noktalardır.

Eliptik eğrilerin kriptografi için kullanışlı yapan özelliği, eğrideki herhangi bir Q ve P noktaları için Q =k*P denklemini sağlayan k değerini bulmanın çok zor olmasıdır. Bunun ne anlama geldiğini açıklayacağım.

Eliptik eğrilerin üzerindeki iki farklı noktanın “toplanması” ilkokuldan beri öğrendiğimiz 2 + 2 = 4 şeklindeki basit aritmetik işlemiye gerçekleştirilmez. Örnek olarak  y2 = x3 + -4x + 1 eliptik eğrisini ele alırsak (0,1) noktası bu denklemi sağladığı için eğrinin üzerinde olan geçerli bir noktadır. Aynısını (2,1) noktası için de söyleyebiliriz fakat bu iki noktanın vektörel toplamı olan (2,2) noktası eğrinin denklemini sağlamaz.

Eliptik eğrilerde “toplama işlemi” dediğimiz işlem aslında seçilmiş iki farklı noktadan geçen bir çizginin eliptik eğriyi kestiği üçüncü noktayı bulmaktır. P + Q = A şu şekilde temsil edilir.

Bir noktayı kendisiyle topladığımız zaman ise noktaya bir teğet çizip, eğriyle kesiştiği ikinci nokta aranır. P + P = A şu şekilde temsil edilir.

P ve Q noktalarının koordinatlarından A noktasının koordinatını elde etmek için kullanılan karmaşık aritmetik formüller var fakat konumuzla pek alakası olmadığı için bu yazıda bahsetmeyeceğim. Burda aklınızda bulunması gereken tek şey P*k=Q (yani P + P işleminin k kere gerçekleştirilmesi demek) denklemini sağlayan Q ve P sayıları, yani orijinal nokta ve sonda elde dilen nokta bilinse bile, toplama işleminin kaç kere yapıldığı yani k’nın değerinin kaç olduğunu bulmanın zor olmasıdır. Buna eliptik eğri ayrık logaritma problemi (ECDLP) denir. Bu sayede eliptik eğrileri bir tek yönlü fonksiyon olarak kullanabiliriz.

Dual_EC_DRBG şöyle çalışır:

İşleme başlamadan önce P ve Q noktaları seçilir.  Yazının başında belirttiğimiz gibi ilk olarak s0’ı belirleyecek bir entropi kaynağı bulunur. Eğri üzerinde s0*P işlemi yapılır (yani s0 kere P+P işlemi gerçekleştirilir) ve r1  noktası elde edilir. r1 noktasının x koordinatını alıp artık “iç-durum” değeri yani s1 olarak kullanabiliriz. Bu bizim TYF1’imizdir, yeni iç-durum değeri üretmek istediğimiz zaman bu sefer s1*P işlemini uygulayıp r1 noktası elde edilir. Rastgele_sayı elde etmek için ise r1 noktasının x koordinatı bu sefer Q noktası ile çarpılır yani s1*Q işlemi yapılır ve ti elde edilir bu da bizim TYF2’mizdir (sonucun ilk 16 biti kale alınmaz) ve hesaplamalarımız burada sona erer.

Burada sormamız gereken önemli bir soru vardır. P ve Q sayılarını neye göre seçtik? NIST standardları yayınladıktan sonra bu sorulara cevap vermedi. Bu şüphe uyandırıcı bir olaydı çünkü 2007’de Microsoft araştırmacıları Dan Shumow ve Niels Ferguson tarafından yapılan bir sunumda P ve Q’yu seçen kişinin şifrelemeyi geçersiz hale getirecek bir arka kapı belirleyebileceği konusunda uyarmıştı[4].

Eğer P ve Q sayıları arasında herhangi bir d sayısı için P=Q*d ilişkisi varsa (bu ilişkinin var olup olmadığını ECDLP yüzünden sadece P ve Q sayılarını belirleyen kişi bilebilir) bu d sayısı bir arka kapı teşkil edecektir.

Elde ettiğimiz t1 sayısını d ile çarptığımızı düşünelim.

t1*d , bunu formülümüz sayesinde t1’in yerine r1 * Q olarak da yazabiliriz.

[r1 * Q]*d = t1*d, çarpma işleminin değişme özelliğinden faydalanırsak,

r1*[Q*d] = t1*d,  ve son olarak [Q*d]’nin yerine olduğundan şüphelendiğimiz ilişkiyi yerleştirirsek,

r1*P = t1*d bu sonuç ise yukarıdaki grafikte de belirtildiği gibi bir sonraki iç-durum olan s2’nin değerini verecektir ve şifrelemenin içine başarılı olarak sızmış olacağız bu da tabiki gelecekte üretilecek bütün rastgele sayıları önceden tahmin edebilmemiz anlamına gelecektir.

Bruce Schneider Kasım 2007’de paylaştığı bir yazıda[5] NIST’in neden rehberlerinde bu standardı önerdiğini anlamlandıramdığını ve  “Bu bir arka kapı olarak mantıklı değil: Hem açık hem de oldukça bariz. Mühendislik açısından da mantıklı değil: Kendi rızasıyla  kimsenin kullanamaycağı kadar yavaş.” olduğunu belirtmişti.

Eylül 2013’te Edward Snowden’ın kamuya sızdırdığı belgelerde, NSA’nın Sinyal istihbaratı toplama projesinin ve “şifrelemeye karşı savaş”’ının bir parçası olarak şifrelem standardlarını zayıflatmaya çalıştığıve arka kapılar eklediği ortaya çıktı[6]. Bu deşifreleme programının adı “Bullrun”idi.

Aralık 2013’te Reuters gazetesi; RSA Security, RSA şifrelemesi için kullandığı BSAFE kütüphanesinde rastgele sayı üretimi için Dual_EC_DRBG kullanması karşılığında NSA’dan 10 milyon dolar aldığını açıkladı.[7]

RSA bu iddiaları:

“RSA’nın ürünlerini zayıflatmak veya ürünlerimize herhangi birinin kullanımına yönelik ‘arka kapılar’ yerleştirmek niyetiyle hiçbir sözleşmeye girmedik ya da herhangi bir projede yer almadık”[8] diyerek reddetse de, eliptik eğri algortimalarını kullanmamaları için müşterilerini uyardı.[9]

NIST araştırmacısı John Kelsey, P ve Q değerlerinin nereden geldiğini sorduğunda rastgele seçilebileciğini fakat NSA’nın bu konuda konuşmaması gerekildiği cevabını almıştı.[10]

2003’ten 2011’deki emekliliğine kadar NSA’nin Bilgi Güvencesi Direktörlüğü’nde Teknik Direktör olan Richard George, Mayıs 2014’te Infiltrate konferansında yaptığı bir konuşmada Dual_EC ile ilgili şu sözleri söyledi[11]: “Eliptik Eğri’yi kullanacaktık. Dedim ki, eğer bunu standartlarınıza koyarsanız, başka hiç kimse kullanmaz çünkü çirkin görünüyor ve gerçekten yavaş. Kimsenin kullanması için mantıklı bir yanı yok. Ama ben kullanabilirim. Böylece onu eklediler, ve ben de dedim ki burada kullandığımız bu parametreler olduğu sürece biz onları kullanabiliriz, diğer herkes istedikleri herhangi bir parametreyi ekleyebilir.”

Peki bu olanların bütünü şifrelemenin işe yaramaz olduğunu mu gösteriyor? Tam sayılmaz. Hatırlarsanız Dual_EC_DRBG 4 CSPRNG standardından sadece biriydi ve bu güvenlik açığı hakkında defalarca uyarılmasına rağmen standard olarak kullanılmaya devam edildi. Bu durumda çıkarılması gerekilen sonuç şifrelemenin artık geçersiz olduğundan ziyade doğru şifreleme tiplerinin kullanımı hakkındaki farkındalıktır.

Son olarak düşmek istediğim önemli br not ise arka kapı yönteminin hükümetler veya şirketler tarafından kullanılan gizlilik ihlali yöntemlerden biri fakat tek yöntemi olmadığıdır.


Kaynakça

  • [1] https://tr.euronews.com/next/2024/09/11/whatsapp-narinin-akrabalarinin-sildigi-mesajlari-hukumete-verebilir-mi
  • [2] https://tr.wikipedia.org/wiki/ASCII
  • [3] Elde edilmiş bir iç-durumdan, gelecek iç-durumlar’ın hesaplanmasına karşı koruma SP800-90A’ya göre CSPRNG’ler için şart değildir.
  • [4] http://rump2007.cr.yp.to/15-shumow.pdf
  • [5] https://www.schneier.com/essays/archives/2007/11/did_nsa_put_a_secret.html
  • [6] https://archive.nytimes.com/www.nytimes.com/interactive/2013/09/05/us/documents-reveal-nsa-campaign-against-encryption.html
  • [7] https://www.reuters.com/article/us-usa-security-rsa-idUSBRE9BJ1C220131220/
  • [8] https://web.archive.org/web/20150321125632/https://blogs.rsa.com/rsa-response/
  • [9] https://web.archive.org/web/20240407020934/https://www.wired.com/2013/09/rsa-advisory-nsa-algorithm/
  • [10] https://blog.cryptographyengineering.com/2015/01/14/hopefully-last-post-ill-ever-write-on/
  • [11] https://www.youtube.com/watch?v=qq-LCyRp6bU

Bir cevap yazın

Your email address will not be published.

Önceki Gönderi

Meşşailik ve Ahlak Felsefesi – Egemen Kurtoğlu & Taner Beyter

Sonraki Gönderi

Viyana Çevresi Tarafından En Önemli Üç Fikir – Luke Dunne

En Güncel Haberler Analitik Felsefe:Tümü