Linux Kullanıcı Parolalarının Şifrelenmesi: /etc/shadow Dosyası ve Yescrypt Algoritması
Linux işletim sistemlerinde kullanıcı parolaları hiçbir zaman düz metin (plaintext) olarak saklanmaz. Bunun yerine, tek yönlü parola hash algoritmaları kullanılarak güvenli biçimde saklanırlar. Modern Linux dağıtımlarında kullanılan parola hash algoritmaları, yalnızca hash üretmekle kalmaz; aynı zamanda brute-force ve GPU saldırılarına karşı dirençli olacak şekilde tasarlanmıştır.
Bu makalede Kali Linux'un /etc/shadow dosyasındaki aşağıdaki satırı temel alarak Linux parola güvenliğini ayrıntılı şekilde inceleyeceğiz.
kali:$y$j9T$zf6N4R3lwuzxHZbhC/Vwj/$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7:20599:0:99999:7:::
Linux'ta Parolalar Neden /etc/passwd Dosyasında Saklanmaz?
İlk Linux sürümlerinde kullanıcı parolaları /etc/passwd dosyasında tutuluyordu.
Örneğin:
kali:x:1000:1000:Kali User:/home/kali:/bin/bash
Buradaki ikinci alanın neden x olduğuna dikkat edin.
Eskiden burada hash bulunurdu.
kali:$1$abc123.......
Ancak /etc/passwd dosyası herkes tarafından okunabildiği için saldırganlar hash değerlerini kolayca elde edebiliyordu.
Bu nedenle hash değerleri yalnızca root kullanıcısının okuyabildiği
/etc/shadow
dosyasına taşındı.
/etc/shadow Dosyasının Yapısı
Bir satır aşağıdaki alanlardan oluşur.
username:password:lastchange:min:max:warn:inactive:expire:reserved
Bizim örneğimiz:
kali:$y$j9T$zf6N4R3lwuzxHZbhC/Vwj/$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7:20599:0:99999:7:::
Şimdi bunu tek tek inceleyelim.
1. Kullanıcı Adı
kali
Kullanıcı hesabının ismidir.
2. Parola Hash Bilgisi
En önemli bölüm burasıdır.
$y$j9T$zf6N4R3lwuzxHZbhC/Vwj/$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7
Bu alan dört parçaya ayrılır.
$y$$j9T$$zf6N4R3lwuzxHZbhC/Vwj/$$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7
İlk Bölüm
$y$
Hash algoritmasını belirtir.
Buradaki
y
Yescrypt anlamına gelir.
Günümüzde birçok Linux dağıtımının varsayılan parola algoritmasıdır.
Özellikle
Kali Linux
Debian 11+
Ubuntu'nun yeni sürümleri
Fedora
Arch Linux
tarafından kullanılmaktadır.
Linux'ta Kullanılan Algoritma Kodları
| Kod | Algoritma |
|---|---|
| $1$ | MD5 |
| $2a$ | Blowfish |
| $2y$ | Blowfish |
| $5$ | SHA-256 |
| $6$ | SHA-512 |
| $y$ | Yescrypt |
| $gy$ | GOST Yescrypt (bazı sistemlerde) |
Yescrypt Nedir?
Yescrypt,
eski SHA-512 tabanlı parola saklama yönteminin yerine geliştirilmiştir.
Temel amacı:
GPU saldırılarını yavaşlatmak
ASIC cihazlarına karşı direnç sağlamak
Bellek kullanımını artırmak
Brute-force maliyetini yükseltmek
Yescrypt Nasıl Çalışır?
Basitleştirilmiş süreç:
Parola│▼Salt eklenir│▼Bellek yoğun hesaplama│▼Çok sayıda tur│▼Hash üretilir
En önemli özelliği:
Sadece işlemci gücü değil,
RAM miktarı da önemlidir.
Bu nedenle GPU kümeleri büyük avantaj sağlayamaz.
İkinci Alan
$j9T$
Bu bölüm Yescrypt parametrelerini içerir.
Burada;
maliyet (cost)
bellek kullanımı
işlem karmaşıklığı
kodlanmış durumdadır.
Bu değerler doğrudan okunabilir değildir.
libxcrypt tarafından çözülür.
Üçüncü Alan
zf6N4R3lwuzxHZbhC/Vwj/
Bu Salt değeridir.
Salt Nedir?
Salt,
her kullanıcı için rastgele oluşturulan benzersiz veridir.
Örneğin iki kullanıcının parolası aynı olsun.
123456
Salt kullanılmazsa:
AliHash:ABCDEF...AyşeHash:ABCDEF...
İki hash de aynı olur.
Salt kullanılırsa
AliSalt:X123Hash:A1B2C3...
AyşeSalt:P9Q8Hash:F8E7D6...
Artık hash değerleri tamamen farklıdır.
Salt'ın Sağladığı Avantajlar
Salt sayesinde:
Rainbow Table saldırıları engellenir.
Aynı parola kullanan kullanıcılar tespit edilemez.
Her kullanıcı için yeni hash oluşur.
Önceden hazırlanmış hash veritabanları işe yaramaz.
Dördüncü Alan
k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7
Bu gerçek hash değeridir.
Buradan parolayı geri elde etmek mümkün değildir.
Çünkü hash fonksiyonları tek yönlüdür.
Password↓Hash✓
Ancak
Hash↓PasswordX
matematiksel olarak mümkün değildir; yalnızca tahmine dayalı (brute-force, sözlük veya hibrit) saldırılarla eşleşme aranabilir.
Salt ve Hash Birlikte Nasıl Kullanılır?
Giriş sırasında sistem şu işlemleri yapar:
Kullanıcı↓Parola girer↓Shadow dosyasındaki Salt okunur↓Girilen parola + Salt↓Yescrypt↓Yeni Hash↓Shadow dosyasındaki Hash↓Karşılaştırılır
Hash aynıysa giriş başarılı olur.
Neden Şifre Değil de Hash Saklanır?
Çünkü şifreleme (encryption)
Şifre↓Anahtar↓Düz metin
şeklinde geri çözülebilir.
Hash ise
Parola↓Hash↓Geri dönüş yok
şeklindedir.
Dolayısıyla Linux, kullanıcı parolalarını şifrelemez; parola hash'lerini saklar.
Shadow Dosyasındaki Diğer Alanlar
20599
Parolanın en son değiştirildiği günü ifade eder.
Referans tarihi:
1 Ocak 1970
Unix Epoch başlangıcıdır.
20599 gün sonrasına karşılık gelir.
0
Minimum parola yaşıdır.
0
ise kullanıcı parolasını hemen değiştirebilir.
99999
Maksimum parola geçerlilik süresidir.
Yaklaşık 273 yıl anlamına gelir.
Birçok masaüstü Linux dağıtımı kullanıcıları sık parola değiştirmeye zorlamaz.
7
Parola süresi dolmadan
7 gün önce
uyarı verileceği anlamına gelir.
Boş alanlar
:::
şu bilgileri temsil eder:
Hesabın devre dışı bırakılacağı süre
Hesabın son kullanma tarihi
Ayrılmış alan
Linux'ta Kullanılan Hash Algoritmalarının Karşılaştırılması
| Algoritma | Güvenlik | GPU Direnci | Bellek Kullanımı | Güncel Durum |
|---|---|---|---|---|
| MD5 | Çok düşük | Yok | Çok düşük | Kullanılmamalı |
| SHA-256 | Orta | Düşük | Düşük | Eski sistemler |
| SHA-512 | İyi | Düşük | Düşük | Yerini Yescrypt'e bırakıyor |
| bcrypt | Çok iyi | Orta | Orta | Yaygın |
| scrypt | Çok iyi | Yüksek | Yüksek | Güçlü |
| Argon2id | Çok yüksek | Çok yüksek | Çok yüksek | Modern uygulamalar için önerilen |
| Yescrypt | Çok yüksek | Çok yüksek | Çok yüksek | Modern Linux dağıtımları için varsayılanlardan biri |
Mevcut Algoritmayı Görüntüleme
Sistemde kullanılan parola hash yöntemini öğrenmek için:
grep ENCRYPT_METHOD /etc/login.defs
veya
authselect current
(RHEL tabanlı sistemlerde)
ya da
grep yescrypt /etc/pam.d/*
ile PAM yapılandırması incelenebilir.
OpenSSL ile Hash Üretilebilir mi?
Hayır.
OpenSSL;
openssl passwd
komutuyla bazı parola hash'lerini üretebilir ancak Yescrypt desteği sunmaz. Modern Linux sistemlerinde Yescrypt üretimi genellikle libxcrypt ve ilgili PAM araçları üzerinden gerçekleştirilir.
Hash Oluşturma
Python kullanarak örnek üretim:
import cryptprint(crypt.crypt("Parola123"))
veya
mkpasswd --method=yescrypt
Not:
mkpasswdkomutu çoğu dağıtımdawhoispaketinin bir parçasıdır ve Yescrypt desteği sistemdeki libxcrypt sürümüne bağlıdır.
Güvenlik Açısından En İyi Uygulamalar
/etc/shadowdosyasının izinleri varsayılan güvenli durumda tutulmalıdır (roottarafından sahiplenilmeli ve yalnızca gerekli erişim verilmelidir).Eski MD5 ve SHA-256 tabanlı parola hash'leri kullanılmamalıdır.
Modern dağıtımlarda Yescrypt veya uygun durumlarda Argon2id gibi bellek-zorlayıcı algoritmalar tercih edilmelidir.
Uzun ve benzersiz parolalar kullanılmalıdır; güçlü hash algoritmaları zayıf parolaları tek başına güvenli hâle getirmez.
Çok faktörlü kimlik doğrulama (MFA) mümkün olduğunda etkinleştirilmelidir.
Düzenli güvenlik denetimleriyle zayıf parola politikaları gözden geçirilmelidir.
Sonuç
Linux'ta kullanıcı parolaları doğrudan saklanmaz; bunun yerine /etc/shadow dosyasında tek yönlü hash değerleri tutulur. İncelediğimiz örnekteki $y$ öneki, Kali Linux'un Yescrypt algoritmasını kullandığını göstermektedir. Yescrypt; rastgele salt, ayarlanabilir maliyet parametreleri ve bellek yoğun hesaplama yapısı sayesinde modern CPU, GPU ve özel donanım tabanlı parola kırma girişimlerine karşı güçlü bir direnç sağlar. Bu nedenle güncel Linux dağıtımlarında parola güvenliğinin temel taşlarından biri olarak kabul edilmektedir.
Yescrypt Nedir? Linux'un Modern Parola Hash Algoritmasının Ayrıntılı İncelenmesi
Yescrypt, günümüzde birçok Linux dağıtımında kullanıcı parolalarını güvenli biçimde saklamak için kullanılan bellek-zorlayıcı (memory-hard) bir parola hash algoritmasıdır. Debian 11+, Kali Linux, Fedora, Arch Linux ve diğer birçok modern dağıtımda varsayılan parola hash algoritması olarak kullanılmaktadır.
Yescrypt, yalnızca SHA-512'nin daha yeni bir sürümü değildir. Aslında scrypt algoritmasının geliştirilmiş ve daha güvenli hâle getirilmiş bir devamı olarak tasarlanmıştır. Özellikle GPU, FPGA ve ASIC tabanlı parola kırma saldırılarına karşı yüksek direnç sağlamak amacıyla geliştirilmiştir.
Yescrypt Neden Geliştirildi?
Uzun yıllar Linux sistemlerinde parola hash algoritması olarak SHA-512 kullanıldı.
Parola│▼SHA-512│▼Hash
Ancak SHA-512'nin önemli bir sorunu vardır.
Modern ekran kartları (GPU'lar) aynı anda milyonlarca SHA-512 hesaplaması yapabilir.
Örneğin;
Normal bir işlemci saniyede
100.000
SHA-512 hesabı yaparken,
modern bir GPU
50.000.000+
SHA-512 hesabı yapabilir.
Bu nedenle saldırganlar büyük parola listelerini çok kısa sürede deneyebilir.
Yescrypt'in Temel Felsefesi
Yescrypt sadece işlemciyi değil,
aynı zamanda RAM'i de yoğun şekilde kullanır.
CPU+RAM+Binlerce tekrar+Karmaşık bellek erişimi
Bu nedenle saldırganın yalnızca güçlü bir ekran kartına sahip olması yeterli değildir.
Yeterli miktarda hızlı belleğe de ihtiyaç duyar.
Bellek-Zorlayıcı (Memory-Hard) Algoritma Nedir?
Bir algoritmanın çalışabilmesi için çok miktarda RAM gerekiyorsa buna memory-hard algoritma denir.
Normal hash fonksiyonları
Parola↓CPU↓Hash
şeklinde çalışır.
Yescrypt ise
Parola↓Salt↓RAM oluştur↓RAM'i sürekli karıştır↓Binlerce kez tekrar et↓Hash
şeklinde çalışır.
Bellek erişimi, işlem süresinin önemli bir bölümünü oluşturur.
Yescrypt'in Çalışma Mantığı
1. Parola Alınır
Örneğin
Parola123
2. Salt Eklenir
Örneğin
Saltzf6N4R3lwuzxHZbhC/Vwj/
oluşturulur.
Birleştirilir.
Parola123+zf6N4R3lwuzxHZbhC/Vwj/
3. İlk Hash Oluşturulur
İlk özet değer hesaplanır.
SHA-256veyaSHA-512
benzeri kriptografik yapı taşları başlangıç aşamasında kullanılabilir; Yescrypt bunları kendi iç işleyişinin bir parçası olarak kullanır.
4. Büyük Bellek Alanı Oluşturulur
Örneğin
64 MB
RAM ayrıldığını düşünelim.
+----------------------+| || RAM BLOĞU || |+----------------------+
Gerçekte kullanılan bellek miktarı yapılandırmaya bağlıdır.
5. Bellek Doldurulur
RAM rastgele görünen verilerle doldurulur.
RAMA1F399BC44......
6. Rastgele Bellek Okumaları
İşte Yescrypt'in en önemli kısmı burasıdır.
Normal algoritmalar
123456
şeklinde sıralı ilerler.
Yescrypt ise
19712480213055700...
şeklinde rastgele adreslere erişir.
Bu yüzden GPU belleği verimli kullanamaz.
7. Sürekli Karıştırma
Bellekteki bloklar
XORMixRotateShuffle
işlemlerinden geçirilir.
Bu işlem binlerce kez tekrar edilir.
8. Son Hash
En sonunda
Hash↓$y$...
oluşturulur.
Neden GPU'lar Yavaşlar?
GPU'lar
MatrisVektörParalel işlem
konusunda çok güçlüdür.
Fakat
RAM↓Rastgele erişim↓RAM↓Başka adres↓RAM
şeklindeki işlemler GPU mimarisi için verimsizdir.
Bu nedenle GPU beklemek zorunda kalır.
ASIC Cihazları
SHA-256 için özel çip üretmek kolaydır.
Bitcoin ASIC'leri bunun örneğidir.
Yescrypt için ise
CPU+Çok büyük RAM+Karmaşık adresleme
gerektiğinden ASIC geliştirmek çok daha maliyetlidir.
Salt Kullanımı
Her kullanıcı için farklı Salt üretilir.
Ali123456↓Salt1↓Hash1
Ayşe123456↓Salt2↓Hash2
Hash değerleri tamamen farklı olur.
Cost Parametresi
Yescrypt'in çalışma maliyeti ayarlanabilir.
Düşük ayar
100 ms
Yüksek ayar
500 ms
Kullanıcı bunu hissetmez.
Fakat saldırgan
1 milyarparola denemesi
yapacaksa,
işlem süresi katlanarak artar.
Neden Giriş Yaparken Yavaşlık Hissetmeyiz?
Çünkü kullanıcı yalnızca
1
parola dener.
Saldırgan ise
100 milyonparola
denemeye çalışır.
Aradaki fark burada ortaya çıkar.
Rainbow Table Neden İşe Yaramaz?
Eski sistemlerde
SHA512(password)
hesaplanırdı.
Saldırgan önceden
123456↓ABCDEF...
şeklinde dev tablolar oluşturabilirdi.
Salt sayesinde artık
SHA512(password+salt)
hesaplandığı için aynı parola her kullanıcıda farklı hash üretir ve önceden hazırlanmış tablolar pratikte işe yaramaz.
Yescrypt Hash Formatı
Örnek:
$y$j9T$zf6N4R3lwuzxHZbhC/Vwj/$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7
Bunu parçalarsak:
| Bölüm | Açıklama |
|---|---|
$y$ | Yescrypt algoritması |
j9T | Algoritmanın maliyet ve çalışma parametrelerini kodlayan bölüm |
zf6N4R3lwuzxHZbhC/Vwj/ | Rastgele üretilmiş salt |
k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7 | Hesaplanan parola hash'i |
SHA-512 ile Karşılaştırma
| Özellik | SHA-512 | Yescrypt |
|---|---|---|
| Salt | ✔ | ✔ |
| Ayarlanabilir maliyet | Sınırlı | ✔ |
| Bellek kullanımı | Çok düşük | Yüksek |
| GPU direnci | Düşük | Çok yüksek |
| ASIC direnci | Düşük | Yüksek |
| Rainbow table koruması | Salt ile | Salt ile |
| Modern Linux varsayılanı | Eski sistemler | Evet |
Yescrypt ile Argon2id Karşılaştırması
Argon2id, Password Hashing Competition sonucunda seçilen modern parola hash algoritmalarından biridir ve özellikle yeni uygulama geliştirme projelerinde yaygın olarak önerilir.
| Özellik | Yescrypt | Argon2id |
|---|---|---|
| Linux PAM desteği | Çok yaygın | Sınırlı |
/etc/shadow desteği | Yerleşik | Genellikle yok |
| Bellek-zorlayıcı | ✔ | ✔ |
| GPU direnci | Çok yüksek | Çok yüksek |
| ASIC direnci | Yüksek | Çok yüksek |
| Modern web uygulamaları | Kullanılabilir | Genellikle ilk tercih |
| Linux sistem hesapları | Yaygın varsayılan | Nadir |
Güvenlik Açısından Sağladığı Avantajlar
Her kullanıcı için benzersiz salt kullanır.
Ayarlanabilir maliyet parametreleri sayesinde donanım geliştikçe güvenlik seviyesi artırılabilir.
Yüksek bellek gereksinimi sayesinde GPU ve ASIC tabanlı saldırıları maliyetli hâle getirir.
Rainbow table saldırılarına karşı etkili koruma sağlar.
Linux PAM ve libxcrypt altyapısıyla bütünleşik çalışarak modern dağıtımlarda güçlü parola koruması sunar.
Sonuç
Yescrypt, günümüz Linux sistemlerinde parola güvenliği için geliştirilmiş en güçlü algoritmalardan biridir. İşlemci gücünün yanı sıra yoğun bellek kullanımı ve karmaşık bellek erişim desenleri sayesinde büyük ölçekli parola kırma saldırılarını önemli ölçüde yavaşlatır. Bu nedenle Kali Linux, Debian ve birçok modern dağıtım, kullanıcı parolalarını /etc/shadow dosyasında $y$ önekiyle tanınan Yescrypt hash'leri olarak saklamaktadır.
Parola güvenliğinde unutulmaması gereken en önemli nokta ise şudur: En güçlü hash algoritması bile zayıf bir parolayı tamamen güvenli hâle getiremez. Güçlü, uzun ve benzersiz parolalar ile modern hash algoritmalarının birlikte kullanılması en yüksek korumayı sağlar.
Linux ve Unix tabanlı sistemlerde kullanıcı parolaları hiçbir zaman düz metin (cleartext) olarak saklanmaz. Bunun yerine, kriptografik özetleme (hashing) fonksiyonlarından geçirilerek /etc/shadow dosyasına kaydedilirler.
İnceleyeceğimiz örnek satır, modern bir Debian/Kali tabanlı sistemin parola saklama mekanizmasının nasıl çalıştığını tüm detaylarıyla gözler önüne seriyor:
kali:$y$j9T$zf6N4R3lwuzxHZbhC/Vwj/$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7:20599:0:99999:7:::
Bu satır, ilk bakışta karmaşık bir karakter dizisi gibi görünse de aslında iki nokta üst üste (:) karakterleriyle ayrılmış 9 farklı alandan oluşur.
1. /etc/shadow Satırının Anatomisi
Parolanın şifreleme mantığına geçmeden önce, satırdaki her bir alanın (field) ne anlama geldiğini çözümleyelim:
Alan Sırası | Değer | Açıklama |
1. Kullanıcı Adı | kali | Sisteme ait kullanıcı hesabı. |
2. Parola Özeti | $y$... | Şifrelenmiş parola (Hash), tuz (Salt) ve algoritma parametreleri. (Detayları aşağıda) |
3. Son Değişim | 20599 | Parolanın son değiştirildiği tarih. (1 Ocak 1970'ten itibaren geçen gün sayısı) |
4. Minimum Yaş | 0 | Parola değiştirilmeden önce geçmesi gereken minimum gün sayısı. (0 = hemen değiştirilebilir) |
5. Maksimum Yaş | 99999 | Parolanın geçerli olduğu maksimum gün sayısı. (Uygulamada "hiçbir zaman süresi dolmaz" demektir) |
6. Uyarı Süresi | 7 | Parola süresi dolmadan kaç gün önce kullanıcıya uyarı verileceği. |
7. İnaktif Süre | (boş) | Parola süresi dolduktan sonra hesabın kilitlenmesi için geçecek gün sayısı. |
8. Bitiş Tarihi | (boş) | Hesabın tamamen devre dışı bırakılacağı mutlak tarih (Epoch gün sayısı). |
9. Rezerve | (boş) | Gelecekteki kullanımlar için ayrılmış, şu an kullanılmayan alan. |
2. Parola Özeti (Hash) Alanının Derinlemesine Analizi
Satırın en kritik bölümü olan 2. alan, parolanın kriptografik olarak nasıl korunduğunu gösterir. Bu bölüm kendi içinde $ işaretleriyle ayrılmış dört alt bileşenden oluşur.
Örneğimizdeki hash yapısı:
$y$j9T$zf6N4R3lwuzxHZbhC/Vwj/$k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7
A. Algoritma Kimliği ($y$)
İlk bölüm olan $y$, kullanılan şifreleme algoritmasını (KDF - Key Derivation Function) belirtir.
Geçmişten günümüze Linux sistemlerde kullanılan algoritma kimlikleri şunlardır:
$1$: MD5 (Artık güvensiz kabul edilir)
$2a$, $2b$, $2y$: bcrypt
$5$: SHA-256
$6$: SHA-512 (Uzun süre standart olarak kullanıldı)
$y$: Yescrypt
Örnekteki $y$, modern Kali Linux, Pardus, Debian 11+ ve Ubuntu 22.04+ gibi sistemlerin varsayılan algoritması olan yescrypt'in kullanıldığını gösterir.
Neden Yescrypt?
SHA-512 gibi eski nesil algoritmalar sadece işlemci (CPU) gücü gerektirir. Modern ekran kartları (GPU) veya özel donanımlar (ASIC'ler) kullanılarak saniyede milyarlarca SHA-512 denemesi yapılabilir. Yescrypt ise bellek-zorlu (memory-hard) bir algoritmadır. Parolayı doğrulamak için sadece işlemci gücü değil, aynı zamanda yüksek miktarda RAM alanı da talep eder. Bu özellik, grafik kartları veya ASIC cihazları kullanılarak yapılan çevrimdışı "Brute Force" (Kaba Kuvvet) ataklarını ekonomik olarak uygulanamaz hale getirir.
B. Maliyet (Cost) Parametreleri (j9T)
Bu blok, yescrypt algoritmasının ne kadar zorlu (ne kadar RAM ve CPU döngüsü) çalıştırılacağını belirten parametrelerin (N, r, p) Base64 ile kodlanmış halidir. Bu değer artırıldıkça parolanın doğrulanması milisaniyeler bazında daha uzun sürer, ancak saldırganların hash'i kırması katlanarak zorlaşır.
C. Tuzlama / Salt (zf6N4R3lwuzxHZbhC/Vwj/)
Tuz (Salt), parola oluşturulurken sistem tarafından rastgele üretilen ve parolanın yanına eklenen 16 karakterlik (kodlanmış) bir dizidir.
Tuz (Salt) Neden Hayatidir?
Eğer iki farklı kullanıcı aynı parolayı (örneğin: "qwerty1234") kullanırsa, tuz değeri olmadan her ikisinin de /etc/shadow dosyasındaki hash değerleri birebir aynı olurdu. Bu durum, önceden hesaplanmış milyarlarca hash listesi içeren Rainbow Table (Gökkuşağı Tablosu) saldırılarına kapı aralar. "Tuz", her kullanıcı için rastgele üretildiği için aynı parola girilse dahi ortaya çıkan sonuç tamamen benzersiz olur.
D. Nihai Şifreli Metin / Hash (k9CZFAUev7UpCrnQUSnwdQCFVwEnFgvIsDgKjd5eZs7)
Son bölüm, kullanıcının girdiği düz metin parolanın, tuz ile birleştirilip, maliyet parametreleri uygulanarak yescrypt algoritmasından defalarca geçirilmiş nihai Base64 özetidir. Bir kullanıcı sisteme giriş yapmak istediğinde, girdiği parola aynı tuz ve aynı algoritma ile tekrar hesaplanır. Eğer çıkan sonuç bu bölümdeki veriyle eşleşirse, sisteme giriş izni (authentication) verilir.
3. Siber Güvenlik Perspektifinden Çıkarımlar (Blue Team & Red Team)
Bir laboratuvar ortamında veya Capture The Flag (CTF) senaryosunda bu satır ele geçirildiğinde:
Red Team (Saldırgan) Gözüyle: Hedef sistemden okuma yetkisi yükseltilip /etc/shadow dosyası okunduğunda (örneğin bir zafiyet üzerinden), saldırgan bu hash'i kopyalayıp çevrimdışı kırıcı araçlara (Hashcat, John the Ripper) besleyecektir. Ancak $y$ (yescrypt) kullanıldığı için bir sözlük saldırısının (dictionary attack) başarı şansı, SHA-512'ye kıyasla çok daha düşüktür. Hedef parolanın zayıf bir kelime olmaması halinde sistem güvendedir.
Blue Team (Savunmacı) Gözüyle: Sistem yöneticileri için, SIEM günlüklerinde /etc/shadow dosyasına yetkisiz okuma girişimleri kritik bir alarm (alert) olarak yapılandırılmalıdır. Ayrıca sistemlerin kurulum imajları (örneğin FOG/Clonezilla ile dağıtılan laboratuvar makineleri) oluşturulurken, /etc/login.defs dosyasında varsayılan şifreleme algoritmasının ENCRYPT_METHOD YESCRYPT olarak ayarlandığından emin olunmalıdır.
Yescrypt, günümüzde Pardus, Debian, Ubuntu ve Fedora gibi modern Linux dağıtımlarında varsayılan parola özetleme (hashing) algoritması olarak kullanılan, kriptografi dünyasının en güçlü savunma mekanizmalarından biridir.
Özellikle sistem yöneticileri, siber güvenlik uzmanları ve CTF (Capture The Flag) platformu hazırlayanlar için Yescrypt'in çalışma mantığını anlamak, parola güvenliğinin neden artık sadece "karmaşık şifreler seçmekten" ibaret olmadığını kavramak açısından kritiktir.
İşte Yescrypt'in kaputun altındaki çalışma prensipleri ve mimarisi:
1. Neden Yeni Bir Algoritmaya İhtiyaç Duyuldu?
Geçmişte kullanılan MD5, SHA-256 ve SHA-512 gibi algoritmalar İşlemciye Bağlı (CPU-bound) algoritmalardır. Yani bu algoritmaların hesaplanma hızı, işlemcinin matematiksel işlem kapasitesine bağlıdır.
Saldırganlar, ele geçirdikleri /etc/shadow dosyalarını kırmak için normal bilgisayar işlemcileri yerine, binlerce çekirdeğe sahip Ekran Kartlarını (GPU) veya sadece hash kırmak için özel üretilmiş ASIC cihazlarını kullanmaya başladılar. Modern bir ekran kartı kümesi (rig), Hashcat gibi araçlarla saniyede milyarlarca SHA-512 denemesi yapabilir. Bu durum, eski nesil algoritmaları "Kaba Kuvvet" (Brute Force) saldırılarına karşı savunmasız bıraktı.
2. Yescrypt'in Kalbi: "Bellek Zorluğu" (Memory-Hardness)
Yescrypt, Openwall projesinin kurucusu Solar Designer tarafından tasarlanmıştır ve GPU/ASIC tehdidine karşı Bellek Zorluğu (Memory-Hard) kavramını kullanır.
Yescrypt, parolayı doğrularken sadece işlemciden matematiksel bir hesaplama istemez; aynı zamanda sistemin RAM (Rastgele Erişimli Bellek) kaynağına da ağır bir yük bindirir. Çalışma mantığı şu şekildedir:
Algoritma, parolanın başlangıç özetini alır ve RAM'de büyük, rastgele veri blokları oluşturur.
Sonraki adımları hesaplayabilmek için belleğin rastgele noktalarına sürekli okuma-yazma işlemleri yapar.
Eğer sistemde yeterli RAM yoksa veya RAM erişim hızı yavaşsa, işlem süresi inanılmaz derecede uzar.
Saldırganlar için Anlamı: Bir ekran kartının binlerce çekirdeği olabilir, ancak her bir çekirdek için kullanabileceği bağımsız bellek (VRAM) çok kısıtlıdır. Yescrypt her bir parola denemesi için örneğin 4 MB, 16 MB veya daha fazla RAM talep ettiğinde, ekran kartının binlerce çekirdeği aynı anda çalışamaz duruma gelir. Bellek darboğazı (bottleneck) yaşanır ve milyarlarca deneme hızı, saniyede birkaç bin denemeye kadar çakılır.
3. Scrypt Üzerine İnşa Edilen Bir Mimari
Yescrypt sıfırdan yazılmamış, bir başka ünlü bellek-zorlu algoritma olan scrypt üzerine inşa edilmiştir. Ancak scrypt'in bilinen bazı zayıflıklarını kapatır:
Önbellek Zamanlama Saldırılarına (Cache-Timing Attacks) Karşı Direnç: Scrypt, donanımın önbellek mimarisini izleyerek bilgi sızdırabilen yan kanal (side-channel) saldırılarına karşı tam korumalı değildi. Yescrypt, rastgele bellek erişim modelini optimize ederek bu sızıntıları engeller.
Büyük ROM Desteği (ROM Mixing): Yescrypt'in en eşsiz özelliklerinden biri, parolanın doğrulanması için sadece sisteme değil, harici ve çok büyük bir veri tabanına (örneğin 100 GB'lık bir ROM dosyası) ihtiyaç duyacak şekilde yapılandırılabilmesidir. Eğer bir sunucu hacklenir ve hashler çalınırsa, saldırgan o 100 GB'lık devasa ROM dosyasını da çalmadan hashleri kırmaya başlayamaz. (Not: Standart Linux /etc/shadow dosyalarında genellikle ROM özelliği kullanılmaz, temel bellek zorluğu modu aktiftir).
4. Yapılandırma Parametreleri
Önceki /etc/shadow analizinde gördüğümüz maliyet parametreleri (örneğin j9T bloğu), algoritmanın zorluk derecesini belirleyen değişkenleri içerir. Yescrypt üç temel değişkene dayanır:
N (Zaman ve Bellek Maliyeti): İterasyon sayısını ve kullanılacak toplam RAM miktarını belirler. Bu değer ne kadar yüksekse, algoritma o kadar fazla bellek talep eder.
r (Blok Boyutu): Bellekteki veri bloklarının boyutunu ayarlar. Alt seviye donanım (CPU önbellekleri) optimizasyonu için kullanılır.
p (Paralellik Faktörü): Algoritmanın kaç farklı işlem parçacığına (thread) bölünerek hesaplanacağını belirtir.
Sistem yöneticileri, laboratuvar veya sunucu donanımının gücüne göre /etc/login.defs yapılandırmalarından bu parametreleri artırarak, sistemin normal kullanıcı giriş süresini fark edilmeyecek seviyede tutarken (örn: 0.5 saniye), saldırganların işini imkansız hale getirebilirler.
5. Neden Argon2 Yerine Yescrypt?
Kriptografi dünyasını takip edenler, dünyaca ünlü Parola Özetleme Yarışması'nı (Password Hashing Competition) Argon2 algoritmasının kazandığını bilir. Akla "O halde modern dağıtımlar neden Argon2 yerine Yescrypt kullanıyor?" sorusu gelebilir.
Cevap, geriye dönük uyumluluk ve Linux PAM (Pluggable Authentication Modules) entegrasyonunda yatmaktadır. Yescrypt, scrypt ve geleneksel SHA crypt sistemleriyle daha uyumlu çalışacak şekilde tasarlanmıştır. Ayrıca, NIST (Ulusal Standartlar ve Teknoloji Enstitüsü) onaylı şifreleme modüllerini Linux sistem çekirdeğine entegre ederken Yescrypt'in yapısı işletim sistemi mimarilerine (özellikle Debian ekosistemine) daha pürüzsüz bir geçiş sağlamıştır.
Yorumlar