AES-256 GCM Nedir?
AES-256 GCM, 256 bit anahtar kullanan AES (Advanced Encryption Standard) simetrik şifreleme algoritmasının GCM (Galois/Counter Mode) çalışma modudur. "Simetrik" olması, şifrelemek ve çözmek için aynı anahtarın kullanılması gerektiği anlamına gelir (bu araçtaki zorunlu 32 karakterlik anahtar). GCM ise şifrelemeye bütünlük doğrulaması ekleyerek bir AEAD (Authenticated Encryption) şeması oluşturur.
Neden AES-256 GCM Tercih Edilmelidir?
AES, dünya genelinde hükümetler ve bankalar tarafından kabul görmüş bir standarttır. GCM, AES'in en modern ve güvenli çalışma modudur: sadece veriyi şifrelemekle kalmaz, aynı zamanda verinin değiştirilip değiştirilmediğini de doğrular (Authentication). Eğer bir saldırgan şifreli verinin arasına tek bir bit bile sıkıştırırsa, GCM bunu anlar ve şifreyi çözmeyi reddeder.
Nonce Nedir ve Neden Önemlidir?
Bu aracı her kullandığınızda, aynı metni aynı anahtarla şifreleseniz bile sonucun (Base64 çıktısının) sürekli değiştiğini fark edeceksiniz. Bunun sebebi arkada çalışan Nonce (Number used once) mekanizmasıdır. Sistem her şifrelemede rastgele bir nonce üretir ve bunu şifrelenmiş verinin başına ekler. Bu sayede Rainbow Table saldırılarına karşı sisteminiz zırhlı hale gelir. Kritik kural: aynı anahtar ile aynı nonce asla iki kez kullanılmamalıdır.
Go (Golang) ile AES-256 GCM Kod Örneği
Bu araç arka planda Go'nun standart kütüphanesini kullanır. Aynı şifrelemeyi kendi projenizde
crypto/aes ve crypto/cipher paketleriyle şöyle yapabilirsiniz:
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"io"
)
// encrypt: plaintext'i AES-256 GCM ile şifreler.
// key 32 byte olmalıdır (AES-256).
func encrypt(plaintext, key []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
gcm, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
// Her şifrelemede benzersiz (rastgele) bir nonce üret.
nonce := make([]byte, gcm.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return nil, err
}
// Seal: nonce'u ciphertext'in başına ekler ve
// verinin bütünlüğünü doğrulayan auth tag üretir.
return gcm.Seal(nonce, nonce, plaintext, nil), nil
}
Dikkat edilmesi gereken üç nokta: anahtarın 32 byte olması (AES-256),
her çağrıda rastgele nonce üretilmesi ve gcm.Seal çıktısının
bütünlük doğrulaması (auth tag) içermesi. Çözme tarafında gcm.Open bu tag'i
kontrol eder; veri kurcalanmışsa hata döner.
Güvenlik İçin En İyi Uygulamalar
- Anahtar uzunluğu: AES-256 için tam 32 byte anahtar kullanın.
- Nonce'u tekrar kullanmayın: her şifrelemede yeni ve rastgele nonce üretin.
- Anahtarı güvenli saklayın: kaynak koduna gömmeyin; ortam değişkeni veya bir gizli yönetim servisi (secret manager) kullanın.
- Doğru araç: parola saklamak için şifreleme değil, tek yönlü bcrypt hash kullanın. Genel amaçlı özet için hash aracını inceleyebilirsiniz.
Sık Sorulan Sorular
AES-128 ile AES-256 arasındaki fark nedir?
Fark anahtar uzunluğudur: AES-128 128 bit, AES-256 ise 256 bit anahtar kullanır. AES-256, kaba kuvvet (brute force) saldırılarına karşı çok daha geniş bir anahtar uzayı sunar ve en yüksek güvenlik seviyesi gereken yerlerde tercih edilir.
GCM ile CBC modu arasındaki fark nedir?
CBC yalnızca şifreleme sağlar; verinin değiştirilip değiştirilmediğini kendi başına doğrulayamaz. GCM ise şifreleme ile bütünlük doğrulamasını (authentication tag) birleştirir. Bu yüzden modern uygulamalarda CBC yerine GCM önerilir.
Verilerim güvende mi, nerede işleniyor?
Şifreleme/çözme işlemi, HTTPS üzerinden Go ile yazılmış backend motorunda gerçekleşir. Gönderdiğiniz metin ve anahtar saklanmaz veya loglanmaz; işlem tamamlandıktan sonra bellekte tutulmaz. Yine de yüksek hassasiyetli veriler için şifrelemeyi kendi ortamınızda (örneğin yukarıdaki Go kodu ile) yapmanız önerilir.