Professional Documents
Culture Documents
Bölüm 08 Ders Notu
Bölüm 08 Ders Notu
Bütünlük, verilerin tüm yaşam döngüsü boyunca hiç kimse veya herhangi bir şey tarafından
değiştirilmeden ve güvenilir kalmasını sağlar. Veri bütünlüğü, verileri depolayan, işleyen veya
ileten herhangi bir sistemin tasarımı, uygulaması ve kullanımı için kritik bir bileşendir. Bu
bölüm, karma (hashing) algoritmaları, tuzlama (salting) ve özet tabanlı mesaj doğrulama kodu
(keyed-hash message authentication code - HMAC) gibi kullanılan veri bütünlüğü kontrolü
türlerini incelemektedir. Bir sonraki bölümde, dijital imzalar ve sertifikalar açıklanacak ve son
olarak veritabanı bütünlüğü de dahil olmak üzere bütünlüğü sağlamak için gerekli bileşenler
tartışılmış olacaktır.
Karma, hesaplaması nispeten kolay, ancak tersine çevirmesi çok zor olan tek yönlü bir
matematiksel işlevdir. Kahve öğütmek, tek yönlü işlev için iyi bir örnektir. Kahve çekirdeklerini
öğütmek kolaydır, ancak orijinal çekirdekleri yeniden oluşturmak için tüm küçük parçaları bir
araya getirmek neredeyse imkânsızdır.
Karma işlevleri, bir kullanıcı veya iletişim hatası tarafından verilerin yanlışlıkla
değiştirilmemesini sağlamak için çok kullanışlıdır. Örneğin, bir gönderici, alıcıya giden bir
mesajı kimsenin değiştirmediğinden emin olmak isteyebilir. Gönderici cihaz, mesajı bir karma
algoritmasından geçirir ve sabit uzunluktaki özeti veya parmak izini hesaplar.
2
Basit Karma Algoritması (8-bit Checksum)
8 bitlik checksum, ilk karma algoritmalarından biridir ve bir karma işlevinin en basit biçimidir.
8 bitlik checksum, mesajı ikili (binary) sayılara dönüştürerek ve ardından ikili sayılar dizisini 8
bitlik gruplar halinde düzenleyerek karma değerini hesaplar. Algoritma 8 bitlik değerleri toplar.
Son adım, sonucu 2'nin tümleyeni adı verilen bir işlemi kullanarak dönüştürmektir. 2’nin
tümleyeni, bir ikili sayıyı zıt değerine çevirir ve sonra bir ekler. Bu, sıfırın bire dönüştüğü ve
birin sıfıra dönüştüğü anlamına gelir. Son adım, 8 bitlik bir karma değeri ile sonuçlanan 1
eklemektir.
1. Şekil 8.2'de gösterildiği gibi ASCII kodu kullanılarak “BOB” kelimesi ikili sayılara (binary)
dönüştürülür.
2. İkili sayılar Şekil 8.3'te gösterildiği gibi onaltılı sayıya (hexadecimal) dönüştürülür.
3. Onaltılık sayılar toplanır (42 + 4F + 42 = D3 ).
3
4. Toplama işlemi sonucu elde edilen onaltılı sayı tekrar ikili sayıya dönüştürülür ve sonra
2’ye tümleyeni alınır (2C).
5. En son olarak +1 değeri eklenerek elde edilen sayı, karma değeridir (2D).
KARMA DEĞERİ = 3A
KARMA DEĞERİ = FB
Günümüzde yaygın olarak kullanılan birçok modern karma algoritması vardır. En popüler iki
tanesi MD5 ve SHA'dır.
4
Message Digest 5 (MD5) Algoritması
MD5 karma algoritması, Ron Rivest tarafından geliştirilmiştir ve bugün birçok İnternet
uygulaması bu algoritmayı kullanmaktadır. MD5, verilen bir giriş verisinden, bir karma değerini
kolaylıkla hesaplar. Ancak tek yönlü bir işlev olduğu için bu işlemi tersine çevirmek çok zordur.
MD5, 128 bitlik bir karma değeri üretir. Kötü amaçlı bir yazılım olan Flame, 2012'de MD5'in
güvenliğini tehlikeye atmıştı. Flame’in yazarları, sahte bir Windows kod imzalama sertifikası
oluşturmak için MD5 çarpışmasını (collision) kullanmışlardı. Flame çarpışma saldırısının detaylı
bir açıklamasını okumak için burayı tıklayınız.
National Institute of Standards and Technology (NIST), Secure Hash Standard (SHS) ile
belirlenen SHA algoritmasını geliştirmiştir. NIST, 1994'te SHA-1'i yayınladı. Daha sonra SHA-1,
yerini SHA-2’ye bıraktı. SHA-2, dört farklı karma işlevi kullanarak SHA ailesi olarak adlandırılan
dört farklı SHA algoritması sunmaktadır:
SHA-2 daha güçlü bir algoritmadır ve MD5'in yerini almaktadır. SHA-256, SHA-384 ve SHA-512,
yeni nesil algoritmalardır.
Bütünlük, veri ve bilgilerin edinildiği anda eksiksiz ve değiştirilmemiş olmasını sağlar. Bu, bir
kullanıcının internetten bir dosya indirdiğinde veya bir adli tıp denetçisinin dijital ortamda
kanıt aradığında önemlidir.
Cisco, tüm IOS imaj dosyalarının bütünlüğünü doğrulamak için, web sitesinde MD5 ve SHA
checksum’ları sunar. Kullanıcı, Şekil 8.4’te gösterildiği gibi, bu MD5 özetini, bir aygıta
yüklenmiş işletim sistemi görüntü dosyasının MD5 özetiyle karşılaştırabilir. Kullanıcı artık
5
işletim sistemi görüntü dosyasını kimsenin kurcalamadığından veya değiştirmediğinden emin
olabilir.
Dijital adli tıp alanı, dosyaları barındıran tüm dijital medyayı doğrulamak için karma kullanır.
Örneğin, adli tıp uzmanı, dijital bir klon oluşturmak için dosyaları barındıran medyanın bit bit
(bire-bir) kopyasını ve bir karma değerini oluşturur. İncelemeyi yapan uzman, orijinal
medyanın karma değerini kopya ile karşılaştırır. İki değer eşleşirse, kopyalar aynıdır. Burada,
kararlılığı ve değişmezliği sağlayan, orijinal ve kopyanın her bitinin aynı olmasıdır. Kararlılık,
bazı soruların yanıtlanmasında yardımcı olabilir:
Bundan sonra adli tıp uzmanı, orijinali sabit bırakarak, herhangi bir dijital kanıt bulmak için
kopyayı inceleyebilir.
6
8.1.1.6. Karma Parolaları
Karma algoritmaları, herhangi bir miktardaki veriyi sabit uzunlukta bir parmak izine veya dijital
karma değerine dönüştürür. Bir suçlu, orijinal veriyi elde etmek için dijital bir karma değerini
tersine çeviremez. Verinin tek biti bile değişirse, farklı bir karma değeri ile sonuçlanır. Bu,
parolaları korumak için kullanılır. Bir sistem, parolayı korunan bir biçimde saklamalıdır ve aynı
zamanda kullanıcının parolasının doğru olduğunu da doğrulayabilmelidir. Böyle bir sistem,
parolayı sabit sürücüde asla depolamaz, yalnızca dijital karma değerini depolar.
8.1.1.7. Uygulamalar
• IP Security (IPsec) veya yönlendirme protokolü kimlik doğrulaması gibi simetrik bir
gizli kimlik doğrulama anahtarı ile kullanıldığında orijinallik kanıtı sağlamak için,
• Kimlik doğrulama protokollerindeki zorluklara tek seferlik ve tek yönlü yanıtlar
üreterek kimlik doğrulaması sağlamak için,
• Dijital olarak imzalanmış sözleşmelerde olduğu gibi mesaj bütünlüğü kontrol kanıtı
sağlamak için,
• Bir tarayıcı ile güvenli bir siteye erişirken onay verilen açık anahtar altyapısı (PKI)
sertifikaları sağlamak için.
Bir karma algoritması seçerken, SHA-256 veya daha üst versiyonunu kullanınız. Güvenlik
açıklarının keşfedilmiş olması nedeniyle SHA-1 ve MD5'ten kaçınınız.
Karma yanlışlıkla yapılan değişiklikleri tespit edebilirken, kasıtlı değişikliklere karşı koruma
sağlayamaz. Karma prosedüründe, göndericinin sağladığı benzersiz bir tanımlama bilgisi
yoktur. Bu, doğru karma işlevini kullandıkları sürece, herhangi bir veri için herkesin bir karma
hesaplayabileceği anlamına gelir. Örneğin, bir mesaj ağdan geçtiğinde, potansiyel bir saldırgan
mesajı yakalayabilir, değiştirebilir, karmayı yeniden hesaplayabilir ve onu mesaja ekleyebilir.
Alıcı cihaz, yalnızca eklenen karma değerine göre doğrulama yapacaktır. Bu nedenle, karma,
ortadaki adam saldırılarına karşı savunmasızdır ve iletilen veriler için güvenlik sağlamaz.
7
8.1.1.8. Karmayı Kırmak
Bir karmayı kırmak için, saldırganın parolayı tahmin etmesi gerekir. Parolaları tahmin etmek
için kullanılan en önemli iki saldırı sözlük (dictionary) ve kaba-kuvvet (brute-force) saldırılarıdır.
Sözlük saldırısı, yaygın olarak kullanılan sözcükleri, cümleleri ve parolaları içeren bir dosya
kullanır. Dosyada, hesaplanmış karma değerleri vardır. Sözlük saldırısı, bir parolanın karma
değerini dosyadaki karma değerleri ile karşılaştırır. Eşleşen bir karma varsa, saldırgan parolayı
öğrenmiş olur.
Kaba kuvvet saldırısı, belirli bir uzunluğa kadar tüm olası karakter kombinasyonlarını dener. Bu
saldırılar, çok fazla işlemci zamanı alır, ancak parolanın bulunması an meselesidir. Bir kaba
kuvvet saldırısını caydırmak için parolaların yeterince uzun olması gerekir. Karma parolalar,
suçlunun bu parolaları elde etmesini daha da zorlaştırır.
Tuzlama, parolalar için karma değeri oluşturmayı daha güvenli hale getirir. İki kullanıcı aynı
parolaya sahipse, parola karma değerleri de aynı olacaktır. Tuz, karma işleminden önce
parolaya eklenen rastgele bir karakter dizisidir. Bu, Şekil 8.5’te gösterildiği gibi iki parola için
farklı bir karma sonucu oluşturur. Bir veritabanı, hem karma hem de tuz değerini depolar.
8
Şekilde, aynı parolalar için farklı karma değerleri oluşturuluyor çünkü her durumdaki tuz
farklıdır. Tuz, rastgele bir sayı olduğu için gizli olması da gerekmez.
Tuzlama, bir saldırganın parolaları tahmin etmek için sözlük saldırısı kullanmasını engeller.
Tuzlama ayrıca bir karmayı kırmak için lookup (arama) ve rainbow (gökkuşağı) tablolarının
kullanılmasını imkânsız kılar.
Lookup Tabloları
Bir lookup tablosu, önceden hesaplanmış parola karmalarını, karşılık gelen parolayla birlikte
bir parola sözlüğünde depolar. Saniyede yüzlerce karma araması yapabilen bir veri yapısı
vardır.
Bu saldırı, siber suçlunun önceden hesaplanmış lookup tablosu olmadan birçok karma
üzerinde sözlük veya kaba kuvvet saldırısı başlatmasına olanak tanır. Siber suçlu, ihlal edilen
veritabanındaki her bir parola karmasını bir kullanıcı listesine yazan bir lookup tablosu
oluşturur. Siber suçlu, bir parola tahmininde bulunur ve onun karma değerini hesaplar. Sonra
da Şekil 8.6’da gösterildiği gibi, parolası bu tahminle eşleşen kullanıcıların bir listesini almak
için lookup tablosunu kullanır. Birçok kullanıcı aynı parolayı kullandığı için saldırı genellikle iyi
sonuç verir.
9
Rainbow Tabloları
Rainbow tabloları, lookup tablolarını daha da küçültmek için karma kırma hızından ödün verir.
Daha küçük bir tablo ile aynı miktardaki alanda daha fazla karma depolanabilir.
Kriptografik Olarak Güvenli Sözde Rastgele Sayı Üreticisi (CSPRNG), tuz oluşturmak için en iyi
seçimdir. CSPRNG'ler, öngörülemeyen rastgele bir sayı üretir, bu nedenle kriptografik olarak
güvenlidir.
Anahtar yayma (key stretching) adı verilen bir tekniğin kullanılması da saldırılara karşı
korunmaya yardımcı olacaktır. Anahtar yayma, karma işlevini çok yavaş hale getirir. Bu,
saniyede milyarlarca karmayı hesaplayabilen üst düzey donanımları önler.
Bir veritabanı uygulamasının gizli bir parolayı saklamak ve doğrulamak için kullandığı adımlar
aşağıdaki tabloda gösterilmektedir.
10
8.1.3. HMAC
Bir siber suçlunun bir karma üzerinde sözlük veya kaba kuvvet saldırısı başlatmasını önlemek
için bir sonraki adım, karmaya gizli bir anahtar (secret key) eklemektir. Yalnızca karmayı bilen
kişi bir parolayı doğrulayabilir. Bunu yapmanın bir yolu, Anahtarlı Karma Mesaj Doğrulama
Kodu (keyed-Hash Message Authentication Code - HMAC) adı verilen bir karma algoritmasını
kullanarak, karmaya gizli bir anahtar eklemektir. HMAC, karma işlevine girdi olarak ek bir gizli
anahtar kullanır. HMAC kullanımı, kimlik doğrulama (authentication) özelliği de ekleyerek
bütünlüğü güvence altına almada bir adım daha ileri gider. Bir HMAC, Şekil 8.7’de gösterildiği
gibi, kriptografik karma işlevi ile gizli anahtarı birleştiren özel bir algoritma kullanır.
Yalnızca gönderici ve alıcı gizli anahtarı bilir. Karma işlevinin çıktısı artık giriş verilerine ve gizli
anahtara bağlıdır. Yalnızca bu gizli anahtara erişimi olan taraflar, HMAC işlevinin özetini
hesaplayabilir. Bu özellik, ortadaki adam saldırılarını engeller ve veri kaynağının
doğrulanmasını sağlar.
11
8.1.3.2. HMAC Operasyonu
Bir göndericinin, bir mesajın geçiş sırasında değişmeden kalmasını ve alıcının mesajın
orijinalliğini doğrulayabileceği bir yol sağlamak istediğini varsayalım.
Şekil 8.8'de gösterildiği gibi, gönderici cihaz verileri karma algoritmasına girer ve sabit
uzunluklu HMAC özetini veya parmak izini hesaplar. Alıcı, iletiye eklenen kimliği doğrulanmış
parmak izini alır.
Şekil 8.9'da gösterildiği gibi, alıcı cihaz öncelikle parmak izini mesajdan kaldırır ve düz metin
mesajı gizli anahtarıyla birlikte aynı karma işlevine girdi olarak kullanır. Alıcı cihaz, gönderilen
parmak izine eşit bir parmak izi hesaplarsa, mesaj kendisine değişmeden gelmiş demektir.
Ayrıca alıcı, yalnızca göndericinin gizli anahtarın bir kopyasına sahip olduğunu bildiği için
mesajın kaynağını da bilir. HMAC işlevi, bu şekilde mesajın doğruluğunu kanıtlar.
12
Şekil 5.9. HMAC değerinin doğrulanması
HMAC bir web kullanıcısının kimliğini de doğrulayabilir. Birçok web hizmeti, iletim sırasında
kullanıcı adını ve parolayı şifrelemeyen basit kimlik doğrulamayı kullanır. HMAC kullanarak,
kullanıcı özel bir anahtar (private key) tanımlayıcı ve bir HMAC gönderir. Sunucu, kullanıcının
özel anahtarını araştırır ve bir HMAC oluşturur. Kullanıcının HMAC'i sunucu tarafından
hesaplananla eşleşmelidir.
IPsec kullanan VPN'ler, her paketin kaynağını doğrulamak ve veri bütünlüğü denetimi
sağlamak için HMAC işlevlerine güvenir.
Cisco ürünleri, kimlik doğrulama, veri bütünlüğü ve veri doğrulama amaçları için HMAC
kullanır. Cisco yönlendiriciler, yönlendirme protokolü güncellemelerine kimlik doğrulama
bilgilerini eklemek için gizli anahtarlar kullanarak HMAC benzeri bir karma kullanır. IPsec ağ
geçitleri ve istemcileri, paket bütünlüğünü ve özgünlüğü sağlamak için MD5 ve SHA-1 gibi
karma algoritmalarını HMAC modunda kullanır.
13
Bölüm Özeti
Bu bölümde, bütünlük ile, verilerin, tüm yaşam döngüsü boyunca herhangi bir kişi veya
herhangi bir şey tarafından değişmeden kalmasının nasıl sağlandığı incelenmektedir. Bu
bölüm, veri bütünlüğü denetimlerinin türlerini tartışarak başlar. Karma algoritmaları, parola
tuzlama ve HMAC, siber güvenlik uzmanlarının mesajların ve belgelerin gerçekliğini
doğrulaması için bir yöntem sağlar.
14