OpenSSL ile Hash Oluşturma ve Doğrulama


Hash Nedir? OpenSSL ile Veri Bütünlüğünü Doğrulama

Dijital dünyada verilerin güvenliği yalnızca şifreleme ile sağlanmaz. Bir dosyanın değiştirilip değiştirilmediğinin anlaşılması da en az gizliliği kadar önemlidir. İşte bu noktada hash (özet) fonksiyonları devreye girer.

Bu eğitim makalesinde OpenSSL kullanarak dosyaların hash değerlerinin nasıl oluşturulacağını, farklı algoritmaların nasıl kullanılacağını ve hash değerlerinin nasıl doğrulanacağını ayrıntılı olarak öğreneceksiniz.


Öğrenme Hedefleri

Bu laboratuvar sonunda aşağıdaki konuları uygulamalı olarak öğrenmiş olacaksınız.

  • Hash fonksiyonlarının çalışma mantığını öğrenmek

  • SHA-256, SHA-512 ve MD5 hash üretmek

  • OpenSSL ile dosya hash'lemek

  • Hash değerlerini karşılaştırmak

  • Dosyanın değiştirilip değiştirilmediğini doğrulamak

  • Linux ve Windows ortamlarında hash doğrulaması yapmak

  • Hash algoritmalarının kullanım alanlarını öğrenmek


Ön Bilgiler

Hash fonksiyonları;

  • Sabit uzunlukta çıktı üretir.

  • Geri döndürülemez.

  • Aynı veri her zaman aynı hash'i üretir.

  • Veride tek karakterlik değişiklik bile tamamen farklı hash oluşturur.

Örneğin;

Merhaba Dünya

SHA-256 hash'i:

a591a6d40bf420404a011733cfb7b190...

Sadece bir nokta ekleyelim.

Merhaba Dünya.

Hash tamamen değişir.

61db52f5b6dc...

Bu özelliğe Avalanche Effect (Çığ Etkisi) denir.


Hash Nerelerde Kullanılır?

Hash fonksiyonları birçok alanda kullanılır.

  • Dosya bütünlüğü doğrulama

  • Yazılım indirme doğrulaması

  • Dijital imzalar

  • SSL/TLS sertifikaları

  • Blockchain

  • Git versiyon kontrol sistemi

  • Parola saklama

  • Adli bilişim


Hash Algoritmaları

Algoritma    Çıktı Uzunluğu    Güvenlik
MD5        128 bit    Güvensiz
SHA-1        160 bit    Güvensiz
SHA-224        224 bit    Güvenli
SHA-256        256 bit    Çok Güvenli
SHA-384        384 bit    Çok Güvenli
SHA-512        512 bit    Çok Güvenli
SHA3-256        256 bit    Yeni Nesil
SHA3-512        512 bit    Yeni Nesil
BLAKE2        Değişken    Çok Hızlı

OpenSSL Nedir?

OpenSSL;

  • SSL/TLS

  • Sertifika yönetimi

  • Anahtar üretimi

  • Şifreleme

  • Dijital imza

  • Hash oluşturma

işlemlerini gerçekleştiren açık kaynaklı bir güvenlik aracıdır.

Linux sistemlerinde genellikle hazır gelir.

Kurulum kontrolü:

openssl version

Örnek çıktı:

OpenSSL 3.2.2

Laboratuvar Ortamı

Bu laboratuvar aşağıdaki işletim sistemlerinde uygulanabilir.

  • Ubuntu

  • Debian

  • Pardus

  • Kali Linux

  • Fedora

  • Rocky Linux

  • macOS

  • Windows (OpenSSL kurulu)


Bölüm 1 – OpenSSL ile Bir Metin Dosyasını Hash'lemek

Adım 1: Çalışma Dizini Oluşturma

mkdir HashLab
cd HashLab

Adım 2: Metin Dosyası Oluşturma

Linux

nano mesaj.txt

Dosya içeriği:

Bu dosya hash laboratuvarı için oluşturulmuştur.

Kaydedin.

Alternatif:

echo "Bu dosya hash laboratuvarı için oluşturulmuştur." > mesaj.txt

Adım 3: SHA-256 Hash Oluşturma

openssl dgst -sha256 mesaj.txt

Çıktı:

SHA2-256(mesaj.txt)=
4cb0d23f7d3d6...


İkinci parametre: dgst

Kelime anlamı: Digest (Özet)

Hash algoritmaları aslında "Message Digest" üretir.

Yani:

mesaj.txt
        ↓

SHA-256

        ↓

2cf24dba...

oluşan çıktı bir message digest yani mesaj özetidir.

OpenSSL içerisinde hash hesaplayan alt komut: dgst komutudur.


Adım 4: SHA-512 Hash

openssl dgst -sha512 mesaj.txt

Adım 5: SHA3-256

openssl dgst -sha3-256 mesaj.txt

Adım 6: MD5

openssl dgst -md5 mesaj.txt

Örnek:

MD5(mesaj.txt)=
6d7fce9fee471194aa8b5b6e47267f03

Not: MD5 yalnızca eski sistemlerle uyumluluk için kullanılmalıdır. Güvenlik amacıyla tercih edilmez.


Hash Sonuçlarını Dosyaya Kaydetme

openssl dgst -sha256 mesaj.txt > mesaj.sha256

İçeriği görüntüleme:

cat mesaj.sha256

Hash Değerini Sadece Yazdırma

openssl dgst -sha256 -r mesaj.txt

Çıktı:

4cb0d23f...
mesaj.txt

Binary Formatta Hash

openssl dgst -sha256 -binary mesaj.txt > hash.bin

Hexadecimal Görüntüleme

xxd hash.bin

Bölüm 2 – Hash Değerlerinin Doğrulanması

Dosyayı Değiştirmeden Önce

Hash alın.

openssl dgst -sha256 mesaj.txt

Dosyayı Değiştirme

nano mesaj.txt

Şu satırı ekleyin.

Yeni satır eklendi.

Kaydedin.


Tekrar Hash Oluşturma

openssl dgst -sha256 mesaj.txt

Yeni hash tamamen farklı olacaktır.


Neden Tamamen Değişti?

Hash fonksiyonları Avalanche Effect özelliğine sahiptir.

Bir harf bile değişse;

  • bütün hash değişir

  • eski hash geçersiz olur

  • dosyanın değiştirildiği anlaşılır.


Hash Karşılaştırma

İlk hash

A1F84D...

Yeni hash

D18B66...

Karşılaştırma:

❌ Aynı değil

Sonuç:

Dosya değiştirilmiştir.


Linux'ta Doğrulama

SHA256SUM ile

Hash oluşturma

sha256sum mesaj.txt

Hash kaydetme

sha256sum mesaj.txt > checksum.sha256

Doğrulama

sha256sum -c checksum.sha256

Çıktı

mesaj.txt: OK

Dosya değişirse

FAILED

SHA512SUM

sha512sum mesaj.txt

BLAKE2

b2sum mesaj.txt

Windows PowerShell ile Hash Alma

Get-FileHash .\mesaj.txt

SHA256

Get-FileHash mesaj.txt -Algorithm SHA256

SHA512

Get-FileHash mesaj.txt -Algorithm SHA512

MD5

Get-FileHash mesaj.txt -Algorithm MD5

Windows CMD

certutil -hashfile mesaj.txt SHA256

SHA512

certutil -hashfile mesaj.txt SHA512

Aynı Dosya Aynı Hash

Windows

SHA256
2A7F...

Linux

SHA256
2A7F...

İşletim sistemi değişse bile sonuç aynıdır.


Gerçek Hayatta Kullanım

Örneğin Ubuntu ISO dosyasını indiriyorsunuz.

Web sitesinde şu hash yayınlanıyor.

b8d3ab51...

Siz de indirilen dosyanın hash'ini alıyorsunuz.

sha256sum ubuntu.iso

Sonuç aynıysa

✔ Dosya bozulmamıştır.

✔ İndirme sırasında değişmemiştir.

✔ Güvenle kullanılabilir.


Hash ve Dijital İmza Arasındaki Fark

ÖzellikHashDijital İmza
Veri bütünlüğü
Kimlik doğrulama
İnkâr edememe
Gizlilik
Anahtar kullanır

En İyi Uygulamalar

  • SHA-256 veya SHA-512 kullanın.

  • MD5 ve SHA-1'i güvenlik amacıyla kullanmayın.

  • İndirilen yazılımların hash değerlerini üretici tarafından yayımlanan değerlerle karşılaştırın.

  • Hash dosyalarını güvenilir bir ortamda saklayın.

  • Hash doğrulamasını otomasyon süreçlerine dahil edin.


Laboratuvar Sonunda Kazanılan Beceriler

Bu laboratuvarı tamamladığınızda:

  • OpenSSL ile hash oluşturabilir,

  • SHA-256 ve SHA-512 algoritmalarını kullanabilir,

  • Hash değerlerini dosyaya kaydedebilir,

  • Dosya bütünlüğünü doğrulayabilir,

  • Linux ve Windows üzerinde hash karşılaştırması yapabilir,

  • Gerçek hayatta yazılım doğrulama süreçlerini uygulayabilir,

  • Hash fonksiyonlarının çalışma mantığını ve güvenlikteki rolünü kavrayabilirsiniz.


Sonuç

Hash fonksiyonları, modern bilgi güvenliğinin temel taşlarından biridir. Şifreleme ile karıştırılmaması gereken hash mekanizması, verinin gizliliğini değil, bütünlüğünü korumaya odaklanır. OpenSSL gibi güçlü araçlarla hash üretmek ve doğrulamak; yazılım dağıtımı, dijital imza, sertifika yönetimi, adli bilişim ve sistem güvenliği gibi birçok alanda kritik öneme sahiptir. Bu laboratuvarda edindiğiniz bilgiler, hem Linux hem de Windows ortamlarında veri bütünlüğünü güvenilir şekilde doğrulamanızı sağlayacak temel yetkinlikleri kazandırır.


Bu laboratuvar taslağını, öğrencilerinize veya blog okurlarınıza sunabileceğiniz, teorik altyapıyı pratik adımlarla harmanlayan kapsamlı bir eğitim makalesi haline getirdim. Uygulama adımlarını doğrudan bir Linux terminalinde (örneğin Pardus veya Debian tabanlı herhangi bir sistemde) çalıştırılabilecek şekilde yapılandırdım.

Kriptografinin Temel Taşı: OpenSSL ile Hash İşlemleri ve Veri Bütünlüğü

Siber güvenlik dünyasında "veri bütünlüğü" (data integrity), bir verinin yetkisiz kişilerce değiştirilmediğinden ve bozulmadığından emin olmak anlamına gelir. Peki, gigabaytlarca büyüklüğündeki bir dosyanın aktarım sırasında tek bir baytının bile değişmediğini nasıl kanıtlayabiliriz? İşte bu noktada Hash (Özet) Fonksiyonları devreye girer.

Bu makalede, hash fonksiyonlarının ardındaki temel mantığı inceleyecek ve popüler bir kriptografi aracı olan OpenSSL'i kullanarak kendi hash laboratuvarımızı kuracağız.

Arkaplan: Hash Fonksiyonu Nedir?

Hash fonksiyonları, herhangi bir boyuttaki girdi verisini (bu tek kelimelik bir metin de olabilir, devasa bir işletim sistemi imajı da) alıp matematiksel algoritmalar yardımıyla sabit boyutlu, benzersiz bir karakter dizisine dönüştüren yapılardır.

İyi bir hash fonksiyonunun üç altın kuralı vardır:

  1. Tek Yönlülük (Geri Döndürülemezlik): Hash algoritması hızlı çalışacak şekilde tasarlanmıştır, ancak işlem tek yönlüdür. Elinizdeki hash değerine bakarak orijinal veriyi (girdiyi) elde etmeniz matematiksel olarak imkansıza yakındır.

  2. Benzersizlik (Çakışma Direnci): İki farklı dosyanın aynı hash değerini üretme ihtimali yok denecek kadar az olmalıdır.

  3. Çığ Etkisi (Avalanche Effect): Girdi verisinde yapılan en ufak bir değişiklik (örneğin, bir metin belgesinin sonuna sadece bir nokta koymak), tamamen farklı bir hash değerinin üretilmesine neden olur.

Şimdi bu teorik kavramları, OpenSSL kullanarak laboratuvar ortamında test edelim.

Laboratuvar: Şeyleri Hash'lemek

Bu laboratuvarda, basit bir metin dosyası oluşturacak, bunun hash değerini hesaplayacak ve dosya üzerinde küçük bir değişiklik yaptığımızda hash değerinin nasıl tepki verdiğini gözlemleyeceğiz.

Bölüm 1: OpenSSL ile Bir Metin Dosyasını Hash'leme

Öncelikle üzerinde çalışacağımız veriyi oluşturmalı ve ardından OpenSSL aracını kullanarak bu verinin dijital parmak izini çıkarmalıyız. İşletim sisteminizin terminalini açarak aşağıdaki adımları sırasıyla uygulayın:

1.Çalışma dosyasını oluşturun:

Aşağıdaki komutu kullanarak içine gizli bir mesaj yazdığımız basit bir metin dosyası oluşturun.

Bash

echo "Bu çok gizli bir sistem mesajıdır." > gizli_veri.txt

 

2.Dosyanın içeriğini kontrol edin:

Dosyanın doğru oluşturulduğundan emin olmak için ekrana yazdırın:

Bash

cat gizli_veri.txt

 

3.SHA-256 algoritması ile hash alın:

OpenSSL kullanarak bu dosyanın SHA-256 (Secure Hash Algorithm 256-bit) özetini çıkarın.

Bash

openssl dgst -sha256 gizli_veri.txt

 

Ekranda şuna benzer bir çıktı göreceksiniz: SHA256(gizli_veri.txt)= e3b0c442... Bu uzun karakter dizisi, dosyanızın benzersiz dijital parmak izidir.

Bölüm 2: Hash Değerlerinin Doğrulanması (Çığ Etkisi)

Hash değerlerinin en önemli özelliklerinden biri olan "Çığ Etkisi"ni (Avalanche Effect) doğrulamak için, orijinal dosyamızda çok ufak bir değişiklik yapacağız.

1.Dosya içeriğinde ufak bir değişiklik yapın:

Mevcut dosyanın sonuna sadece tek bir nokta (.) karakteri ekleyelim.

Bash

echo "Bu çok gizli bir sistem mesajıdır.." > gizli_veri.txt

 

2.Değiştirilmiş dosyanın yeni hash değerini hesaplayın:

Aynı OpenSSL komutunu tekrar çalıştırın:

Bash

openssl dgst -sha256 gizli_veri.txt

 

3.Sonuçları karşılaştırın:

Birinci bölümde elde ettiğiniz hash değeri ile yeni elde ettiğiniz hash değerini yan yana koyun.

Dosyaya sadece tek bir nokta eklememize rağmen, elde edilen 64 karakterlik yeni hash değerinin eskisinden tamamen farklı (hiçbir benzerlik göstermeyen) bir dizeye dönüştüğünü göreceksiniz.

Özet: Siber güvenlikte dosyaların veya mesajların yolda değiştirilip değiştirilmediğini (bütünlüğünü) bu yöntemle doğrularız. Kaynak ve hedeften alınan hash değerleri eşleşiyorsa dosya güvenlidir; tek bir karakter bile uyuşmuyorsa, dosya bozulmuş veya müdahaleye uğramış demektir. Bu mantık, adli bilişim (forensics) süreçlerinden işletim sistemi güncellemelerine kadar her alanda kullanılır.

 

Makalenin devamına ekleyebileceğiniz, farklı algoritmaları inceleyen yeni bölümü aşağıda bulabilirsiniz. Bu bölümü doğrudan "Bölüm 2"nin sonuna entegre edebilirsiniz:

Bölüm 3: Farklı Algoritmalarla Çalışmak (MD5 ve SHA-1)

Kriptografi, sürekli evrilen bir bilim dalıdır. Geçmişte endüstri standardı olarak kabul edilen bazı hash algoritmaları, günümüzde bilgisayarların işlem gücünün artmasıyla birlikte "çakışma" (collision - iki farklı dosyanın aynı hash'i üretmesi) zafiyetlerine karşı savunmasız hale gelmiştir. MD5 ve SHA-1 bu eski nesil algoritmalara en iyi örneklerdir.

Güvenlik amacıyla (örneğin parola saklama veya dijital imza) artık tavsiye edilmeseler de, eski sistemleri yönetirken veya sadece basit dosya bozulmalarını kontrol ederken bu algoritmalarla sıklıkla karşılaşırsınız. OpenSSL kullanarak aynı dosya üzerinde bu algoritmaları test edelim.

1.MD5 algoritması ile hash alın:

Aynı metin dosyası üzerinden bu kez MD5 (Message Digest 5) algoritması ile bir özet çıkarın:

Bash

openssl dgst -md5 gizli_veri.txt

 

Çıktınız 32 karakter (128 bit) uzunluğunda olacaktır.

2.SHA-1 algoritması ile hash alın:

Şimdi de bir dönemin en popüler algoritmalarından olan SHA-1 (Secure Hash Algorithm 1) ile test edelim:

Bash

openssl dgst -sha1 gizli_veri.txt

 

Çıktınız bu kez 40 karakter (160 bit) uzunluğunda olacaktır.

3.Çıktı boyutlarını karşılaştırın:

Farklı algoritmaların aynı girdi dosyası için farklı uzunluklarda sonuçlar ürettiğini fark etmiş olmalısınız. Kriptografide çıktı uzunluğu, algoritmanın karmaşıklığı ve güvenliği hakkında ipuçları verir.

Özet Karşılaştırma Tablosu

Öğrendiğimiz üç farklı algoritmanın temel özelliklerini aşağıdaki tablodan inceleyebilirsiniz:

Algoritma

Çıktı Uzunluğu (Bit)

Karakter Sayısı

Güncel Güvenlik Durumu

MD5

128-bit

32 Karakter

Zayıf (Çakışma tespit edildi)

SHA-1

160-bit

40 Karakter

Zayıf (Çakışma tespit edildi)

SHA-256

256-bit

64 Karakter

Güçlü (Endüstri Standardı)

Önemli İpucu: Bugün bir Linux dağıtımı (örneğin Pardus) veya herhangi bir yazılım indirdiğinizde, indirme sayfasında genellikle SHA-256 değerleri yazar. İndirdiğiniz ISO dosyasını kendi bilgisayarınızda openssl dgst -sha256 komutuyla taratıp, sitedeki değerle eşleştirerek dosyanın orijinal ve eksiksiz olduğunu doğrulayabilirsiniz.

 

Makalenizin sonuna, öğrencilerinizin özellikle uygulamalı siber güvenlik laboratuvarlarındaki (veya CTF yarışmalarındaki) heyecanını artıracak ve konunun pratik önemini vurgulayacak bu uyarı bölümünü doğrudan ekleyebilirsiniz:

Bölüm 4: Hash Değerleri Geri Döndürülemezse Nasıl "Kırılır"? (Sözlük Saldırıları)

Hash algoritmalarının tek yönlü olduğunu ve matematiksel olarak geri döndürülemeyeceğini, yani şifre çözme (decryption) gibi bir işlemin hashler için geçerli olmadığını belirtmiştik. Peki haberlerde duyduğumuz "Milyonlarca kullanıcının parolası kırıldı!" ifadeleri veya bir siber güvenlik senaryosunda (CTF - Capture The Flag) hedef sistemin parolasını ele geçirme işlemleri nasıl gerçekleşiyor?

Cevap, matematiksel bir geri döndürme değil, bir deneme-yanılma ve karşılaştırma sürecidir. Siber saldırganlar, "Sözlük Saldırısı" (Dictionary Attack) adı verilen bir yöntem kullanırlar.

Sözlük Saldırısının Mantığı

Bir saldırganın eline, zayıf bir algoritma (örneğin MD5) ile hash'lenmiş bir parolanın veri tabanı kaydı geçtiğini varsayalım. Saldırgan bu değeri doğrudan geri döndüremez ancak şu adımları izler:

1.Kelime Listesi (Wordlist) Temini:

Saldırgan, insanların en sık kullandığı parolalardan oluşan devasa metin dosyaları kullanır (Örneğin, siber güvenlik dünyasında meşhur olan milyonlarca parolalık rockyou.txt dosyası).

2.Toplu Hash Üretimi:

John the Ripper veya Hashcat gibi özel saldırı araçları kullanılarak, listedeki her bir kelimenin (örneğin "123456", "qwerty", "mustafa123") sırayla MD5 hash'i alınır.

3.Eşleştirme ve Tespit:

Üretilen bu yeni hash değerleri, veri tabanından çalınan hedef hash değeri ile saniyede milyonlarca kez karşılaştırılır. Eğer üretilen hash ile çalınan hash birbirine eşitse, saldırgan o hash'i oluşturan orijinal parolayı "tahmin etmiş" ve bulmuş olur.

Siber Güvenlik Uyarısı: Parolalarınızı oluştururken neden "en az 8 karakter, büyük/küçük harf, rakam ve özel karakter" kullanmanız gerektiğinin temel nedeni budur. Parolanız ne kadar karmaşıksa, bir "Sözlük Saldırısı" listesinde bulunma ihtimali o kadar düşer ve brute-force (kaba kuvvet) ile kırılması yıllar sürer. Ayrıca, modern sistemler bu saldırıları zorlaştırmak için hash almadan önce parolaya rastgele karakterler ekleyen "Salt" (Tuzlama) adı verilen ekstra bir savunma katmanı kullanırlar.

 

Yorumlar

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu