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ımBenzetme
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 1
Blok 2
Blok 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.

CPU1
CPU2
CPU3
CPU4

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.

Ali
Parola123
Ayşe
Parola123

Salt yoksa

Hash
AABBCC

her ikisi için aynıdır.

Salt varsa

Ali
Salt1
Hash1
Ayşe
Salt2
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 PasswordHasher
ph = 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
Memory64–256 MB
Time3
Parallelism                        CPU çekirdeği sayısına uygun (ör. 2–4)
SaltEn 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:

  1. 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)

  2. 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.

  3. 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