HMAC
- Node.js kursu
- Orta seviye
- Ders 103/116
- 5 dk
crypto.createHmac ile HMAC öğrenirsin.
HMAC
HMAC (Hash-based Message Authentication Code), bir hash'e anahtar ekler. Yalnızca doğru anahtara sahip olanlar özeti doğrulayabilir; bu yüzden veri bütünlüğü ve kimlik doğrulama için kullanılır.
Örnek: crypto.createHmac("sha256", "anahtar").update("veri").digest("hex"). Burada "anahtar" simetrik bir sırdır (secret); alıcı ve verici paylaşır. createHash'ten farkı: hash herkes tarafından üretilebilir, HMAC ise yalnızca anahtar sahibi tarafından. Webhook imzalama, JWT (JSON Web Token) ve API isteği doğrulama için yaygındır. Alıcı, kendi anahtarıyla aynı HMAC'i hesaplar; eşitse veri değiştirilmemiştir ve güvenilir kaynaktan gelir. Anahtar sızarsa HMAC işe yaramaz; bu yüzden anahtar çevre değişkeninde tutulur.
HMAC doğrulama
HMAC ürettikten sonra doğrulamak için alıcı aynı anahtarla aynı hesabı yapar ve iki özeti karşılaştırır. Eşitse veri güvenlidir.
Örnek: const expected = crypto.createHmac("sha256", key).update(data).digest("hex"); if (expected === received) console.log("Geçerli");. Karşılaştırma için === yerine crypto.timingSafeEqual kullanmak daha güvenlidir; zamanlama saldırılarını (timing attack) engeller. Zamanlama saldırısı, karşılaştırma süresinden bilgi sızdırır. HMAC anahtarı her iki tarafta da aynı olmalıdır; farklısa özet farklı olur. Anahtar uzunluğu algoritmanın blok boyutundan küçük olmamalıdır; sha256 için 32 bayt önerilir. Üretimde anahtar process.env.HMAC_KEY'ten okunur.
Uygulama Veriyi HMAC ile imzala
const crypto = require("node:crypto"); ile içe aktar. const hmac = crypto.createHmac("sha256", "anahtar").update("veri").digest("hex"); ile imzala. console.log("HMAC uzunluğu: " + hmac.length) ile uzunluğu yazdır.
Başlangıç kodu
// crypto modülünü içe aktar
// buraya yaz
// "veri" dizesini HMAC ile imzala
// buraya yaz
// "HMAC uzunluğu: ..." yazdır
// buraya yazÖrnek çözüm
const crypto = require("node:crypto");
const hmac = crypto.createHmac("sha256", "anahtar").update("veri").digest("hex");
console.log("HMAC uzunluğu: " + hmac.length);Beklenen çıktı
HMAC uzunluğu: 64
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 createHmac kaç parametre alır?
crypto.createHmac("sha256", "anahtar")- 1: algoritma
- 3: algoritma, anahtar, veri
- 0: parametre yok
- 2: algoritma ve anahtar Doğru cevap
Açıklama: createHmac algoritma ve anahtar olmak üzere iki parametre alır.
2 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
createHmac |
Anahtarlı özet yaratır |
anahtar |
Paylaşılan sır |
update |
Veriyi ekler |
timingSafeEqual |
Güvenli karşılaştırma |
3 createHmac çağrısını tamamla
const hmac = crypto.____("sha256", "anahtar").update("veri").digest("hex");
const hmac = crypto.createHmac("sha256", "anahtar").update("veri").digest("hex");
Açıklama: createHmac anahtarla özet yaratır.