Argon2id: Modern Parola Hash Algoritması
Parolalar, bilgi güvenliğinin en temel yapı taşlarından biridir. Ancak bir parolanın güvenliği yalnızca kullanıcının seçtiği karakterlerin karmaşıklığına bağlı değildir. Parolanın sunucu tarafında nasıl saklandığı da en az parolanın kendisi kadar önemlidir.
Eskiden MD5, SHA-1 ve SHA-256 gibi hızlı hash algoritmaları parola saklamak için kullanılıyordu. Ancak günümüzde GPU'lar ve özel donanımlar (ASIC) bu algoritmaları saniyede milyarlarca kez hesaplayabildiğinden, bu yöntemler artık güvenli kabul edilmemektedir.
Bu ihtiyacı karşılamak amacıyla geliştirilen Argon2, günümüzde en güvenli parola hash algoritmalarından biridir. Özellikle Argon2id varyantı, hem yan kanal saldırılarına hem de GPU tabanlı kaba kuvvet saldırılarına karşı güçlü koruma sağladığı için modern uygulamalarda önerilen varsayılan seçenektir.
Argon2 Nedir?
Argon2, 2015 yılında düzenlenen Password Hashing Competition (PHC) sonucunda birinci seçilen modern bir parola hash algoritmasıdır.
Algoritma;
Alex Biryukov
Daniel Dinu
Dmitry Khovratovich
tarafından geliştirilmiştir.
Argon2'nin temel hedefleri şunlardır:
GPU saldırılarını yavaşlatmak
ASIC cihazlarını verimsiz hâle getirmek
Büyük miktarda RAM kullanmak
Paralel işlem desteği sunmak
Güvenliği ayarlanabilir parametrelerle geleceğe taşımak
ASIC Nedir?
ASIC (Application-Specific Integrated Circuit), yalnızca belirli bir işi yapmak için üretilmiş özel bir işlemcidir.
Örneğin:
- Bitcoin madenciliği yapan ASIC cihazları yalnızca SHA-256 hesaplamak için tasarlanmıştır.
- Bu nedenle normal bir işlemciden veya ekran kartından kat kat hızlıdır.
Şöyle düşünebilirsiniz:
| Donanım | Benzetme |
|---|---|
| CPU | Her işi yapabilen çok amaçlı bir İsviçre çakısı |
| GPU | Aynı işi binlerce kez yapan büyük bir fabrika |
| ASIC | Sadece tek bir ürünü üretmek için tasarlanmış özel bir makine |
Password Hashing Competition (PHC)
2013 yılında kriptografi uzmanları, bcrypt ve scrypt gibi algoritmaların gelecekte yetersiz kalabileceğini öngörerek yeni nesil bir parola hash algoritması geliştirmek amacıyla PHC yarışmasını başlattılar.
Yarışmada birçok algoritma değerlendirildi ve kazanan Argon2 oldu.
Bu nedenle günümüzde birçok güvenlik standardı Argon2id kullanımını tavsiye etmektedir.
Argon2 Neden Geliştirildi?
Eski algoritmaların ortak sorunu:
Parola↓SHA-256↓Hash
Bu işlem çok hızlıdır.
Saldırgan için de hızlıdır.
Modern GPU'lar saniyede milyarlarca SHA-256 hesaplayabilir.
Argon2 ise bunun tam tersini yapar.
Parola↓Salt↓Büyük RAM↓Bellek Karıştırma↓Birden Fazla Tur↓Hash
Artık işlemci tek başına yeterli değildir.
Argon2'nin Üç Sürümü
1. Argon2d
"d" harfi Data Dependent anlamına gelir.
Bellekte okunacak adresler önceki hesaplamalara bağlıdır.
Avantajı:
GPU saldırılarına karşı çok güçlüdür.
Dezavantajı:
Yan kanal (side-channel) saldırılarına daha açıktır.
2. Argon2i
"i" harfi Independent anlamına gelir.
Bellek erişimleri sabittir.
Avantajı:
Yan kanal saldırılarına karşı güvenlidir.
Dezavantajı:
GPU saldırılarına karşı Argon2d kadar güçlü değildir.
3. Argon2id
Modern sistemlerde önerilen sürümdür.
İlk aşamada
Argon2i
daha sonra
Argon2d
kullanır.
Böylece iki algoritmanın avantajlarını birleştirir.
Bu nedenle;
OWASP
NIST rehberleri (uygun bağlamlarda)
Modern web frameworkleri
çoğunlukla Argon2id kullanılmasını önerir.
Argon2id Nasıl Çalışır?
1. Parola Alınır
Örneğin
Parola123!
2. Salt Eklenir
Parola123!+A8dJ92KdLmP4
Her kullanıcı için farklı salt oluşturulur.
3. İlk Hash
Argon2, başlangıç durumunu oluşturmak için kriptografik bir özet fonksiyonundan (BLAKE2b tabanlı yapı) yararlanır.
4. Bellek Ayrılır
Örneğin
64 MB
RAM kullanılsın.
+----------------------+| || RAM || |+----------------------+
5. Bellek Blokları Oluşturulur
Bellek yüzlerce veya binlerce bloğa ayrılır.
Blok 1Blok 2Blok 3...Blok N
6. Bellek Karıştırılır
Her blok
önceki blok
rastgele seçilmiş başka bloklar
ile karıştırılır.
1↓9↓34↓6↓201
şeklinde karmaşık bir erişim düzeni oluşur.
7. Paralel İşlem
Argon2 aynı anda birden fazla çekirdeği kullanabilir.
CPU1CPU2CPU3CPU4
Bu özellik özellikle sunucularda önemli avantaj sağlar.
8. Son Hash
Hash↓$argon2id$...
üretilir.
Argon2 Hash Formatı
Örnek:
$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$OaKp8z7Q0rj6mYl...
Bölümleri:
| Alan | Açıklama |
|---|---|
$argon2id$ | Algoritma |
v=19 | Algoritma sürümü |
m=65536 | Bellek (KB) |
t=3 | Tur sayısı |
p=4 | Paralel iş parçacığı |
c29tZXNhbHQ | Base64 kodlu salt |
| Son bölüm | Hash değeri |
Parametrelerin Ayrıntıları
m = Memory Cost
m=65536
65536 KB
=
64 MB RAM
kullanılacağını belirtir.
Bellek arttıkça saldırı maliyeti yükselir.
t = Time Cost
t=3
Algoritmanın
3 kez
çalışacağını belirtir.
Daha yüksek değer
=
daha güvenli
=
daha yavaş.
p = Parallelism
p=4
Dört CPU çekirdeği kullanılacağını belirtir.
Salt Neden Gereklidir?
İki kullanıcı aynı parolayı seçebilir.
AliParola123
AyşeParola123
Salt yoksa
Hash↓AABBCC
her ikisi için aynıdır.
Salt varsa
AliSalt1↓Hash1
AyşeSalt2↓Hash2
Tamamen farklı sonuçlar oluşur.
GPU Saldırılarına Karşı Direnç
SHA-256
GPU↓Milyarlarca hesaplama
Argon2
GPU↓RAM bekle↓RAM bekle↓RAM bekle
GPU'nun avantajı önemli ölçüde azalır.
ASIC Direnci
ASIC geliştirmek için
büyük RAM
yüksek bant genişliği
karmaşık bellek erişimi
gerekir.
Bu durum maliyeti ciddi şekilde artırır.
Python ile Argon2id Kullanımı
Önce kütüphane kurulumu:
pip install argon2-cffi
Örnek kod:
from argon2 import PasswordHasherph = PasswordHasher()hash_value = ph.hash("Parola123!")print(hash_value)
Çıktı örneği:
$argon2id$v=19$m=65536,t=3,p=4$...
Doğrulama:
ph.verify(hash_value, "Parola123!")
PHP'de Argon2id
$password = "Parola123!";$hash = password_hash($password,PASSWORD_ARGON2ID);echo $hash;
Doğrulama:
password_verify($password, $hash);
Node.js
const argon2 = require("argon2");const hash = await argon2.hash("Parola123!");
Doğrulama:
await argon2.verify(hash, "Parola123!");
Argon2id ile Yescrypt Karşılaştırması
| Özellik | Argon2id | Yescrypt |
|---|---|---|
| PHC kazananı | ✔ | ✘ |
Linux /etc/shadow varsayılanı | Genellikle hayır | Birçok modern dağıtımda evet |
| Bellek-zorlayıcı | ✔ | ✔ |
| GPU direnci | Çok yüksek | Çok yüksek |
| ASIC direnci | Çok yüksek | Yüksek |
| Paralel işlem desteği | ✔ | ✔ |
| Web uygulamaları | En yaygın öneri | Daha az yaygın |
| PAM/Linux hesapları | Sınırlı | Yaygın |
OWASP'in Önerisi
OWASP, yeni geliştirilen uygulamalarda parola saklamak için öncelikle Argon2id kullanılmasını önerir. Eğer Argon2id desteklenmiyorsa sırasıyla scrypt ve bcrypt gibi güçlü alternatifler değerlendirilebilir.
En İyi Parametreler
Sunucu kapasitesine göre ayarlanmalıdır.
Başlangıç için yaygın bir örnek:
| Parametre | Örnek |
|---|---|
| Memory | 64–256 MB |
| Time | 3 |
| Parallelism | CPU çekirdeği sayısına uygun (ör. 2–4) |
| Salt | En az 16 bayt, kriptografik olarak rastgele |
Gerçek değerler, uygulamanın performans gereksinimleri ve güvenlik hedeflerine göre test edilerek belirlenmelidir.
Güvenlik Açısından En İyi Uygulamalar
Argon2id kullanın.
Her kullanıcı için benzersiz ve rastgele salt oluşturun.
Güçlü bir rastgelelik kaynağı kullanın.
Parametreleri donanımınıza göre düzenli olarak gözden geçirin.
Zayıf parolaları güçlü bir hash ile saklasanız bile parola politikaları uygulayın.
MFA (Çok Faktörlü Kimlik Doğrulama) desteği ekleyin.
Parolaları hiçbir zaman düz metin veya geri çözülebilir biçimde saklamayın.
Sonuç
Argon2id, günümüzde parola hashleme alanındaki en güçlü ve en modern algoritmalardan biridir. Büyük miktarda bellek kullanımı, ayarlanabilir çalışma maliyeti ve paralel işlem desteği sayesinde GPU ve ASIC tabanlı kaba kuvvet saldırılarına karşı yüksek direnç sağlar. Bu özellikleri nedeniyle web uygulamaları, kurumsal kimlik doğrulama sistemleri ve güvenlik odaklı yazılımlarda birinci tercih olarak öne çıkmaktadır.
Linux sistemlerinde ise kullanıcı hesaplarının korunmasında Yescrypt yaygın olarak kullanılırken, uygulama geliştiricileri için yeni projelerde Argon2id çoğu zaman en güçlü seçeneklerden biri olarak kabul edilmektedir. Bu iki algoritma da modern parola güvenliği yaklaşımının temelini oluşturmakta ve eski nesil hızlı hash algoritmalarına göre çok daha yüksek koruma sunmaktadır.
Siber güvenlik eğitimlerinde ve modern web/uygulama geliştirme süreçlerinde (örneğin Django veya Node.js arka uçlarında) parola güvenliği anlatılırken üzerinde en çok durulması gereken standartların başında Argon2 gelir.
Özellikle laboratuvar ortamlarında veya CTF yarışmalarında öğrencilere şifreleme mantığını kavratırken, Argon2'nin neden endüstri standardı (OWASP tarafından önerilen) olduğunu anlamak çok önemlidir. Argon2 ailesinin en popüler ve önerilen sürümü olan Argon2id'nin derinlemesine analizi şu şekildedir:
1. Argon2 Nedir ve Nereden Çıktı?
Argon2, 2015 yılında düzenlenen dünyaca ünlü Parola Özetleme Yarışması'nı (Password Hashing Competition - PHC) kazanan algoritmadır. Tıpkı Yescrypt gibi, sadece işlemci (CPU) gücüne değil, belleğe (RAM) de ağır yük bindiren bellek-zorlu (memory-hard) bir yapıya sahiptir. Bu sayede GPU veya ASIC donanımlarıyla yapılan Kaba Kuvvet (Brute Force) saldırılarını ekonomik olarak mantıksız hale getirir.
Argon2 aslında tek bir algoritma değil, üç farklı varyanttan oluşan bir ailedir. Argon2id'yi anlamak için diğer iki kardeşini tanımak gerekir:
A. Argon2d (Veriye Bağımlı - Data-Dependent)
Odak Noktası: GPU kırma saldırılarına karşı maksimum direnç.
Çalışma Mantığı: Belleğe erişim sırası, doğrudan parolanın kendisine (veriye) bağlıdır.
Zayıflığı: Bellek erişim kalıpları dışarıdan izlenebildiği için, donanım üzerinden bilgi sızdıran Yan Kanal (Side-Channel) saldırılarına karşı savunmasızdır. Sunucu ortamlarından ziyade, kripto paralar (Proof of Work) için uygundur.
B. Argon2i (Veriden Bağımsız - Data-Independent)
Odak Noktası: Yan Kanal saldırılarına karşı maksimum koruma.
Çalışma Mantığı: Belleğe erişim sırası önceden belirlidir ve paroladan bağımsızdır.
Zayıflığı: GPU'lar ile yapılan "Time-Memory Trade-off" (Zaman-Bellek Takası) saldırılarına karşı Argon2d kadar dirençli değildir.
C. Argon2id (Hibrit Model - En İyisi)
Odak Noktası: Hem GPU saldırılarına hem de Yan Kanal saldırılarına karşı dengeli koruma.
Çalışma Mantığı: İlk geçişin (iteration) ilk yarısında Argon2i gibi çalışarak yan kanal sızıntılarını önler. İkinci yarısında ve sonraki geçişlerde ise Argon2d'ye dönüşerek GPU tabanlı kırma işlemlerini baltalar.
Sonuç: OWASP, IETF ve genel siber güvenlik standartları tarafından günümüzde web uygulamaları ve veritabanı parola saklama işlemleri için varsayılan olarak önerilen algoritmadır.
2. Argon2id'nin Yapılandırma Parametreleri
Bir Django veya Flutter uygulamasının arka yüzünü geliştirirken Argon2id entegre edildiğinde, sistem sizden parolanın nasıl şifreleneceğini belirleyen üç kritik parametre (maliyet faktörü) ister:
Zaman Maliyeti (Time Cost - $t$): Algoritmanın kaç iterasyon (tur) çalışacağını belirler. Bu değer artırıldıkça, hesaplama süresi uzar. (Önerilen minimum değer: 3 veya daha fazla)
Bellek Maliyeti (Memory Cost - $m$): Algoritmanın kullanacağı RAM miktarını Kilobayt cinsinden belirler. Güvenliğin temel taşıdır. Sunucunun kapasitesine göre örneğin 64 MB (65536 KB) veya 128 MB olarak ayarlanabilir.
Paralellik Faktörü (Parallelism - $p$): Hesaplamanın kaç farklı işlem parçacığına (thread) bölüneceğini belirtir. Çok çekirdekli sistemlerde performansı artırırken saldırganın işini zorlaştırır.
Örnek Bir Argon2id Çıktısı
Veritabanına veya sisteme kaydedilen tipik bir Argon2id hash dizgesi şu formattadır:
$argon2id$v=19$m=65536,t=3,p=4$c29tZXNhbHQ$RdescudvJCsgt3ub+b+dVM4OaVcqvkrd/GC6PD8zC8E
$argon2id$: Kullanılan varyant.
v=19: Argon2 versiyonu (0x13).
m=65536,t=3,p=4: Yukarıda bahsedilen maliyet parametreleri (64MB RAM, 3 iterasyon, 4 thread).
c29tZXNhbHQ: Base64 ile kodlanmış Rastgele Tuz (Salt) değeri.
RdescudvJC...: Base64 ile kodlanmış nihai parola özeti (Hash).
3. Laboratuvar ve Güvenlik Senaryoları (Red & Blue Team)
Bir siber güvenlik laboratuvar uygulamasında veya sistem savunma kurgusunda Argon2id'nin etkileri çok nettir:
Blue Team (Savunma): Argon2id kullanan bir sistem yöneticisi veya geliştirici, parametreleri sunucunun yanıt süresini çok geciktirmeyecek (örneğin kullanıcı girişi 0.5 saniyede tamamlanacak) fakat maksimum RAM tüketecek şekilde ayarlamalıdır. Bu konfigürasyon, veritabanı sızdırılsa (SQL Injection vb.) dahi saldırganın hashleri kırmasını yıllarca geciktirir.
Red Team (Saldırı): Bir Red Team senaryosunda veritabanından alınan bir Argon2id hash'ini Hashcat veya John the Ripper ile kırmak en zorlu görevlerden biridir. Saldırganın donanımında 24 GB VRAM'e sahip güçlü bir ekran kartı olsa bile, parametrelerde belirtilen bellek zorunluluğu nedeniyle kart aynı anda çok az sayıda parola deneyebilecektir. Bu durumda saldırg aan kaba kuvvet yerine Oltalama (Phishing), Keylogger veya parolanın zayıf bir sözlük kelimesi olma ihtimaline (Dictionary Attack) yönelmek zorunda kalır.
Özetle, Yescrypt Linux sistem seviyesinde (OS Level) güvenliği domine ederken; Argon2id, yazılım geliştirme, veritabanı mimarileri ve web servisleri tarafında günümüzün mutlak standardıdır.
Yorumlar