Tag Archives: sha-1

Amerika’nın Günümüz Kriptografi Standartları Üzerindeki Etkisi

Kriptografi’ye girişin ikinci bölümünde Amerika’nın günümüzde sık kullanılan kriptografi standartları üzerinde nasıl bir etkisi var bunu inceleyeceğiz.

NSA skandallarından sonra kriptografinin ne kadar önemli olduğu, bir insan hakkı olan gizliliği yıllarca ne kadar küçümsediğimiz ve tüm bu gözetim ve izlemelere ne kadar hazırlıksız olduğumuz ortaya çıktı. Bununla birlikte, mesaj içeriğinin şifrelenerek araya girmeler olsa dahi iletişimin sadece gönderen ve alıcı arasında anlaşılır olmasını sağlamak için yıllardır algoritmalar oluşturulmaktadır. Ayrıca, kriptografide sık kullanılan algoritmalar kimler tarafından oluşturuldu, bunların bir standartı var mıdır ve algoritmalar üzerinde kimlerin etkisi vardır görmek iletişimin gizliliği açısından son derece önemlidir. Bu yüzden ilk olarak belli başlı bazı terimlerin neler olduğunu inceleyeceğiz.

1-NIST nedir?

Açılımı; National Institute of Standards and Technology. Adından da anlaşıldığı gibi bir standart kurumudur. Türkiye’de benzer (ne kadar benzer iş yapıyorlar, tartışılır) olarak TSE gösterilebilir. Bununla birlikte, 1901 yılında kurulmuş, Amerika’nın en eski fizik laboratuvarlarından da biridir. Genel olarak endüstriyel rekabetçiliğin olumsuzluğunu gidermek için ölçüm standartlarıyla ilgilenmektedirler. Nano düzeyde araçlardan insan yapımı olan en büyük ve karmaşık araçlara kadar ölçüm standartlarını desteklemektedirler.

2-FIPS (Federal Information Processing Standard) nedir?

FIPS; Türkçesi Federal Bilgi İşleme Standart’ı olan Amerika Birleşik Devletleri tarafından askeri olmayan devlet kurumları ve devletle iş yapan diğer kurumlar tarafından bilgisayar sistemlerinde kullanılması için geliştirilmiş bir standartlar bütünüdür. FIPS’in amacı tüm federal hükûmetler ve kurumların güvenlik ve iletişimde kullanacakları ortak bir standartın sağlanmasıdır.

3-Açık-Anahtar Algoritması (Public-key Algorithm) nedir?

Açık-anahtar algoritması daha çok asimetrik kriptografi olarak bilinen ve iki farklı anahtar olan açık ve gizli anahtarlardan oluştan bir algoritmadır. Anahtarlar farklı olmalarına rağmen matematiksel olarak birbirleriyle bağlantılıdırlar. Açık anahtar bir mesajın içeriğini şifrelemede veya dijital imzaları doğrulamada kullanılırken gizli anahtar ise şifreli mesajı açar veya dijital anahtarlar oluşturur. Günümüzde sık rastladığımız TSL, GPG, Diffie-Hellman, RSA ve PGP açık-anahtar algoritmasına örnek olarak gösterilebilirler.

Bu terimleri kavradıktan sonra ikinci olarak sık kullanılan algoritmaların neler olduğu, bunların kimler tarafından ne zaman oluşturuldukları ve üzerinde kimlerin veya hangi kurumların etkilerinin olduğuna bakalım.

AES – The Advanced Encryption Standart

Bilindiği üzere AES (Rijndael), simetrik şifre bloğu olup Joan Daemen ve Vincent Rijmen tarafından tasarlanmıştır. DES (Data Encryption Standart)‘in 56 bitlik küçük bir şifre bloğu olması ve giderek brute force saldırılarına karşı savunmasız kalması yeni bir standartın gerekli olduğunu gösteriyordu. AES ilk 1998 yılında duyrulup yayımlanmış, ardından 2001 yılıda (Rijndael) NIST tarafından Advanced Encryption Standart olarak seçilmiştir. Bu seçim süreci birçok farklı tasarımın elenmesinin ardından gerçekleşmiştir. NSA yarışmaya katılan tasarımların hepsini detaylı bir şekilde inceleyip NIST’e son seçimin en güvenli tasarım olması konusunda teknik destek verse de NIST NSA’den bağımsız olarak kendi kararını vermiş ve seçimini de AES’ten yana yapmıştır. Bu yüzden NSA’in AES’e ne bir katkısı ne de üzerinde bir etkisi mevcuttur denilebilir.

RSA – The Rivest, Shamil, Adleman Public Key Algorithm

RSA algoritması 1977 yılında MIT‘de kriptografi hocaları olan Ron Rivest, Adi Shamir ve Leonard Adleman tarafından tasarlanmıştır. Açık ve gizli anahtar şeklinde ikiye ayrılmatadır. Daha önceside, 1973 yılında bir matematikçi ve İngiliz istihbarat servisi GCHQ çalışanı olan Clifford Cocks, benzer bir algoritma tasarlamış ve belgelerinin yüksek derecede gizlilikleri yüzünden 1998 yılında keşfedilmiştir. Clifford Cocks uygulanması için dönemin pahalı bilgisayarlarına ihtiyacın olduğu, çoğunluk meraktan tasarladığı ve uygulanmadığını belirtmiştir. RSA hem akademik çevreler hem de NSA tarafından detaylı bir şekilde analiz edilmiştir. Bununla birlikte, NSA’in RSA’nın tasarlanmasında veya geliştirilmesinde herhangi bir katkısı yoktur.

Diffie/Hellman/Elliptic-Curve Diffie-Hellman/The Diffie-Hellman Key Exchange Algorithm

Diffie-Hellman algoritması 1976 yılında Stanford Üniversitesi’nde kriptografi hocaları olan Withfield Diffie ve Martin Hellman tarafından tasarlanmıştır. GCHQ çalışanları olan Malcolm Williamson, Clifford Cocks ve James Ellis tarafından birkaç yıl önce bulunmuş fakat yayımlanmamıştır. Diffie-Hellman’ın eliptik eğri sürümü ise bağımsız olarak 1985 yılında Amerikalı kriptologlar Victor Miller ve Neal Koblitz tarafından bulunmuştur. 2002 yılında Hellman, açık-anahtar kriptografisinin bulunmasında büyük katkısı olan Ralph Merkle‘nin de tanınması için algoritma adını Diffie-Hellman-Merkle olarak değiştirmiştir. NSA, potansiyel olarak zayıf olan eliptik eğri parametrelerinin NIST standartları içerisinde yer almamasını sağlamıştır.

DSA/ECDSA – The Digital Signature Algorithm/Elliptic Curve DSA

DSA algoritması dijital imzalar için bir FIPS standartıdır. 1991 yılında NIST tarafından dijital imza standarlarında (DSS) kullanılması için teklifte bulunulmuş ve 1993 yılında kullanılmaya başlanmıştır. Bununla birlikte, DSA 1991 yılında eski bir NSA çalışanı olan David Kravitz tarafından tasarlanmıştır. Ayrıca NSA, Eliptik Eğri DSA ya da ECDSA olarak bilinen diğer bir sürümünü de tasarlamıştır. DSA, akademik çevreler tarafından analiz edilmiştir.

SHA-1/The Secure Hash Algorithm 1

Ron Rivest tarafından tasarlanan MD5 algoritmasının uzun bir benzeri ve SHA-0 algoritmasının düzeltilmiş hali olan SHA-1, NSA tarafından tasarlanmıştır. SHA-0 ise 1993 yılında bir standart haline gelen NSA tasarımıdır. Fakat, 1994 yılında NSA kriptologları SHA-o tasarımında güvenliği azaltan bir sorunla karşılaştıklarında, bu açığı hızlıca kapatmak için bir NIST standartı olan SHA-1’le yer değiştirmişlerdir. Ayrıca, SHA-1 akademik çevreler tarafından analiz edilmiştir. Öte yandan, uzun yıllardır hem NIST hem de NSA SHA-2’nin kullanılmasını tavsiye etmektedir.

SHA-2/The Secure Hash Algorithm 2

NSA, dört farklı uzunluktan oluşan (224, 256, 384 ve 512 bit) hash algoritmarları içeren SHA-2‘yi tasarlamış ve NIST tarafından yayımlanmıştır. SHA-2 daha uzun hashlere sahip olduğu için SHA-1’e göre daha iyi bir güvenlik sağlamaktadır. Ayrıca, SHA-1’in tasarımdan kaynaklanan bazı algoritma açıklarına karşı daha iyi bir savunma oluşturur. Bu algoritmanın bir FIPS standart olması ise 2002 yılında gerçekleşmiştir. SHA-2 de akademik çevreler tarafından analiz edilmiştir.

Görüldüğü üzere, bizlerin kriptografide kullandığı bazı algoritmalar tasarlandıktan sonra yayımlanmış ve bilim adamları, matematikçiler, mühendisler vd. tarafından analiz edilmiştir. Ayrıca, bu algoritmalar için belirli standartlar oluşturulmuş ve güvenilirliği için onay verilmiştir. Öte yandan, günümüzde sık kullanılan bu algoritmalar üzerinde NSA ve GCHQ gibi istihbarat kurumlarının etkisi net olarak görülmekte,  bu algoritmalara benzer algoritmalar oluşturdukları ve yayımlamadıkları da bilinmektedir. Bilim etiği, planlı ve sistemli olarak toplanan verilerin analiz edilmesi, yorumlanması, değerlendirilmesi ve başkalarının da geliştirmesini içerse de gizliliğin istihbarat kurumlarının tekeline bırakılmaması gerektiğinin önemi bir kez daha gözler önüne sermektedir. Çünkü, iletişimin gizliliğini sağlamak amacıyla kullanılan birçok kriptografi algoritmasında istihbarat kurumlarının etkisi veya katkısından ziyade bireylerin daha açık ve daha özgür olarak tasarlanmış, analiz edilmiş ve geliştirilmiş algoritmalara ihtiyacı vardır. Bu, hem iletişimin gizliliğine olan güveni artıracak hem de asıl amacı gizliliği ortadan kaldırmak olan NSA ve GCHQ gibi kurumların küresel gözetim ve izlemesinden daha iyi bir şekilde korunmayı sağlayacaktır.

Tagged , , , , , , , , , , , , , , , , , , , , , , , , , ,

Şifreler, Şifreler Ve Şifreler

Basit ve etkili bir şifrelemeden bahsettim fakat bir şifrenin nerede saklandığı, nasıl saklandığı, bu şifrelerin nasıl kırıldığında dair bir yazım yoktu. En azından temel kriptografi bilgisi ve basit bir Hashcat örneği ile bu eksikliği giderebilirim. Yazının eksik kaldığı noktalar elbette vardır ve herhangi bir grubu tatmin etme amacı yoktur. Bu yazı bunun ve bunun derlenmiş halidir.

  • Şifreler nerede saklanıyor?

Veritabanlarında. İlk bakışta dalga geçiyorum gibi gelecek ama durum bu. Unix ve Unix benzeri işletim sistemlerinde şifreler tek bir metin dosyasında, Windows’ta ise binary dosyasında saklanmaktalar. Elbette şifrelerin kriptosuz hallerini herhangi bir metin dosyasında bulundurmak mantıklı değildir. Bu dosyayı eline geçiren bir saldırgan şifrelerinize de sahip olacaktır. Bu nedenden dolayı bütün işletim sistemleri şifreleri bir hash algoritması ile çalıştırır, sonuç olarak veritabanlarında kriptografik hash olarak saklarlar. Bu ise şunu sağlar; eğer bir saldırgan bu veritabanını bir şekilde eline geçirirse, hash olarak saklanmış şifreleri bakarak çözemeyecektir.

Örneğin, GNU/Linux’ta kullanıcı için bir şifre oluşturduğunuz zaman bu şifre sha-512 algoritması ile hashlenerek /etc/shadow dosyası içinde yerini alır (AES ve Rijndael şifrelemesini de ekleyelim). Bu dosyaya baktığımız zaman;

kame:$6$7gNvdbpz$c6fb024a22c4db9101ea1d20596034../:15758:0:99999:7:::

$6 = Sha-512 hash algoritması.
$7gNvdbpz = Salt değeri.
$6fb024a22c4db9101ea1d20596034.. = Şifre.
:15758= Son şifre değişikliği tarihi (gün sayısıdır, başlangıç tarihi 1 Ocak 1970).
:0 = Şifre değişiklikleri arasındaki minimum süre.
:99999 = Şifrenin maksimum geçerlilik süresi (gün sayısıdır).
:7 = Hesap kapatıldıktan sonra şifrenin dolma süresi.

  • Peki hash nedir?

Hash, bir hashing algoritmasının (md5, sha-1, sha-2 vs.) kriptografik çıktısıdır. Bir hashing algoritması açık metin ile şifrelenmiş metin arasında tek yönlü bir dönüşüm sağlar. Bu şu demektir; eğer ben herhangi bir açık metni bir hashing algoritması ile şifrelenmiş metne dönüştürmüşsem, hashing algoritmasını tekrar kullanarak şifrelenmiş metinden açık metne ulaşamayacağım. Herhangi bir hashing algoritması tarafından boyutu standart olmayan bir girdinin şifrelenmiş çıktısı hashing algoritmasına göre eşit uzunluktadır. Diğer bir deyişle, bir e-kitabın boyutu ya da bir filmin boyutu ya da bir metnin boyutu ne olursa olsun, çıktının uzunluğu algoritmaya göre sabittir. Bunun kriptografide önemli olmasının sebebi, eğer bütün algoritmalar kendi türleri içinde aynı uzunlukta çıktıyı verirse, girdinin boyutunu ya da türünü belirlemek mümkün olamaz.

  • Salting, biz buna tuzlama mı desek?

Salting‘in türkçeye nasıl çevrildiğini ya da ne denildiğini bilmiyorum. Nedir noktasına gelirsek eğer, Salt rastgele verilen bir değer olup gizli değildir ve rastgele oluşturulur, şifre hashi ile birlikte saklanır. Büyük boyutlardaki salt değeri önceden hesaplanmış saldırılarını, mesela rainbow tablousu, her şifreyi eşsiz olarak hashleyerek engeller. Yani Ali ile Ayşe, aynı veritabanında saklanan tıpatıp aynı şifrelere sahip olsa bile, salt değerleri ile birbirinden farklı hash değerlerine sahip olacaklar ve bir saldırgan veritabanına erişse bile bu iki kişinin şifresinin aynı olduğunu bilemeyecektir.

Saldırganın başarılı olabilmesi için her salt değerini de ayrı ayrı hesaba katması gerekmektedir. Salting’in kullanılmasının nedeni şifrelerdeki entropi düzeyini arttırmaktır. Bir diğer deyişle, bizlere fazladan koruma sağlar.

Kripto fonksiyonunda iki girdi vardır. Bunlar $salt ve $key’dir, crypt($salt, $anahtar). Eğer salt değerimizin “0Z” ve şifremizin “kame” olduğunu varsayarsak $salt + $şifre;

0Zkame

Artık bu hashlenecek ve şifre veritabanında saklanacaktır. Bu şifrenin eğer bir kullanıcı şifresi olduğunu varsayarsak, /etc/shadow altında hash ile birlikte saklandığını görebiliriz. Örneğin, sisteme giriş yapmak istediğimizde, doğrulama yapmamız gerekecektir. Doğrulama, kullanıcı adı ve şifresi girildiğinde önce salt değerini alacak ve girilen şifre ile birlikte kripto fonksiyonunu çalıştıracaktır. Ardından, eğer şifreniz doğru ise hashler birbirini tutacak ve sisteme girebileceksiniz.

  • Birkaç örnek

En popüler hashing algoritmalarından biri (bugünlerde zayıf olduğu sıkça tekrarlansa da) MD5‘tir. MD5 hashing algoritması 128 bit yani 16 byte’tır. Çıktısı 32 haneli, onaltılı (0,…,9, a,…,f) (hex) sayıdan oluşur. Yani, 2 hex = 1 byte, 16 byte = 128-bit.

kame” dizisini MD5’e dönüştürürsek;

kame ~ % echo -n 'kame' | md5sum | cut -f 1 -d " "
366b18ce0695e44bfc30423b9eb8a793

İçinde sadece “test” yazan “test.txt” dosyasını MD5’e dönüştürürsek;

kame ~ % md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

MD5’e göre daha güçlü ve NSA tarafından tasarlanan bir diğer hashing algoritması ise SHA-2‘dir. SHA-2, 224, 256, 386 ve 512 gibi çeşitli bit uzunluklarında 4 farklı seçenek sunar.

kame ~ % echo -n 'kame' | sha256sum | cut -f 1 -d " "
be45d72f76fc702161620f5d5462443cb038fffd5b839d28d5c85dcf3b46cac5

kame ~ % sha256sum test.txt
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  test.txt

256/128 = 2 > 32 x 2 = 64! Yani, algoritma, 64 hex haneli hash üretir.

Hashing algoritmaları ayrıca bir veriyi doğrulamak için de kullanılmaktadır. Örneğin, Internet üzerinden indirmek istediğiniz herhangi bir dosya için yayınlayan kişi bu dosyaya ait bir hash bilgisi de vermektedir. Böylece indirdiğiniz dosya ile Internette verilen hashleri karşılaştırıp doğrulama yapabilirsiniz.

Hashlere saldırılar ikiye ayrılmaktadır. Birincisi çevrimiçi saldırılar, yani elinizde kırmak isteyeceğiniz bir hash listesi yoktur, Internet üzerinden bulunan bir uygulama ya da servise, veritabanlarında bulunan hashlerle karşılaştırması için çoklu şifre tahminlerinde bulunursunuz. İkincisi ise çevrimdışı olan saldırılardır. Bunlarda ise elinizde bulunan veya bir yerlerden elde ettiğiniz hash listesini çeşitli saldırı türleri ile kırmaya çalışırsınız. Bu saldırı türlerinden en bilinenleri, bruteforce, rainbow tablosu ve sözlük saldırılarıdır.

  • Bruteforce

Varolan bütün kombinasyonların denenmesi anlamına gelmektedir. Kullanılan karakterlere göre değişmektedir. Örneğin sadece a,z aralığı ya da a,z ve A,Z aralıkları veya A,Z,0,9 aralığı gibi çok çeşitli kombinasyonlar oluşturabilirsiniz. En yavaş yöntem olabilir fakat sadece kombinasyon oluşturmaz. Ayrıca her kombinasyon için hash de oluşturur ve bunları karşılaştırır.

Elbette 4 hanelik bir şifrenin hash’ini kırmak çok uzun sürmez fakat hanesi sayısı artarsa, bunu kırmak için geçecek süre de artacaktır.

  • Rainbow Tablosu

Bir Rainbow (gökkuşağı) tablosu, daha önceden hesaplanmış hash’leri içermektedir. Yani, diğer bir deyişle, hash’ler hazır ve karşılaştırılmayı beklemektedir. En önemli artısı, işlemci yükünü azaltarak küçük boyutlu işlerde çok etkili sonuç verir. Sözlük saldırılarında, önce hash oluşturup ardından bunu kırmak istediğimiz hash ile karşılaştırırız. Gökkuşağı’nda ise hashlere zaten sahibiz ve tek yapmamız gereken bunları karşılaştırmak. İyi bir gökkuşağı tablosu oluşturmak vakit alacak bir iştir fakat etrafta çok büyüt boyutlu ve işe yarar tablolar da dolanmaktadır.

Gökkuşağı tablosunun etkisini azaltmak için yukarıda bahsettiğim salt yöntemi etkili bir yöntemdir.

  • Sözlük

Sözlük, kelimelerden, karakterlerden ve bunların kombinasyonlarından oluşan basit bir metin dosyasıdır. Sağda solda gördüğünüz “wordlist” ya da kelime listeleri de aynı anlama gelmektedirler. Sözlük, genel olarak kullanıcının basit şifreler kullanması fikrine dayanır. Bu yüzden herhangi bir sözlük metin dosyasına baktığınız zaman “12345678”, “qwerty” gibi ya da “home”, “pass” gibi dizilerden oluştuğunu görebilirsiniz.

Sözlük saldırıları şu şekilde olur; kırmak istediğiniz hash’e karşılık sözlükteki her dizinin bir hash karşılığı oluşturulur ve bununla karşılaştırılır. Eğer iki hash de birbirini tutarse, kırılmış demektir. Günümüzde artık CPU’lar epey güçlü olduğu için 1-2 dakika içerisinde 14 milyon girdi test edilebilir.

Bu saldırıları gerçekleştirebileceğimiz çevrimdışı bir uygulama arıyorsak eğer Hashcat bu iş için biçilmiş kaftan.

  • Hashcat

Hashcat, çok hızlı ve çok yönlü hash kırıcısı (cracker)’dır. Dağıtımlarınızın repolarında muhtemelen vardır, kurarsanız altta vereceğim örnek üzerinde nasıl çalıştığını daha iyi anlayabilirsiniz.

kame
dizisinin MD5 çıktısı “366b18ce0695e44bfc30423b9eb8a793” olduğunu yukarıda söylemiştik. Bunu bir metin dosyası içine, örneğin test.txt, yapıştırın ve kaydedin. Bu örneğimiz için bize bir sözlük lazım;

1ANORMUSWL
RockYou

İstediğinizi indirebilirsiniz. Bu örnekte 1ANORMUSWL dosyasını kullanacağım.

kame ~ % hashcat -m 0 -a 0 -o /home/kame/hashcat/sonuc.txt /home/kame/hashcat/test.txt /home/kame/hashcat/pass/1aNormusWL.txt
Initializing hashcat v0.46 by atom with 8 threads and 32mb segment-size...

Added hashes from file /home/kame/hashcat/test.txt: 1 (1 salts)
Activating quick-digest mode for single-hash


NOTE: press enter for status-screen

366b18ce0695e44bfc30423b9eb8a793:kame

All hashes have been recovered

Input.Mode: Dict (/home/kame/hashcat/pass/1aNormusWL.txt)
Index.....: 1/5 (segment), 3498468 (words), 33550338 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, 33.39M words
Progress..: 3428536/3498468 (98.00%)
Running...: --:--:--:--
Estimated.: --:--:--:--

Started: Tue Oct 29 20:49:48 2013
Stopped: Tue Oct 29 20:49:49 2013

Görüldüğü üzere “-m“, seçtiğim hash algoritmam, 0, yani MD5, “-a” ise saldırı türüm , 0, yani doğrudan (burada sözlüğe bakıp her dizi için hash karşılaştırması yapıyor).

Herhangi bir sözlük kullanmadan bu saldırıyı yapmak istersek;

kame ~ % hashcat -m 0 -a 3 -o /home/kame/hashcat/sonuc.txt /home/kame/hashcat/test.txt ?l?l?l?l

Terminal çıktısı çok uzun olduğu için onu koymadım. Burada, farklı olarak saldırı türünü 3, yani bruteforce olarak belirledik ve sözlük yerine “?l” parametresini, yani sadece küçük harfleri (a,…,z) kullanmasını söyledik. 4 tane koymamın nedeni 4 haneden (kame) oluşması. Hangi şifrenin kaç haneden oluştuğunu, hangi karakterleri içerebileceğini bilemeyeceğimiz için saldırı modellerini kendiniz geliştirmeniz gerekmektedir.

Hashcat, çok başaralı ve hızlı bir hash kırıcısıdır. Burada çok temel bir örnek vererek anlatmam, sizlerin sağda solda denk getirdiğiniz herhangi bir hash algoritmasını oturup kırsın diye değildir. Daha fazla ayrıntılı bilgi almak isterseniz Hashcat’in wikisi, özellikle mask saldırısı ya da RTFM ve internette bulabileceğiniz sayısız döküman var.

Tagged , , , , , , , , , , , , , , , , , , , , , , ,