HMAC Nedir, Ne İçin Kullanılır?
HMAC (Hash tabanlı Mesaj Doğrulama Kodu — Hash-based Message Authentication Code), bir mesajın hem bütünlüğünü hem de göndereni doğrulamak için kullanılan bir mekanizmadır. Düz bir hash fonksiyonundan farklı olarak HMAC, mesajın yanında gizli bir anahtar da alır ve ikisini RFC 2104'te tanımlanan özel bir çift-hash şemasıyla (anahtar+iç dolgu+mesaj önce hash'lenir, sonra anahtar+dış dolgu+bu sonuç tekrar hash'lenir) birleştirir. Böylece yalnızca aynı gizli anahtarı bilen taraflar geçerli bir HMAC üretebilir veya doğrulayabilir.
Kritik ayrım: HMAC, basitçe hash(anahtar + mesaj) hesaplamakla AYNI ŞEY DEĞİLDİR. Bu naif yaklaşım "uzatma saldırısı" (length-extension attack) adı verilen bir zafiyete açıktır — saldırgan, orijinal mesajı veya anahtarı bilmeden, mevcut bir hash'in üzerine ek veri ekleyip geçerli görünen yeni bir hash üretebilir. HMAC'in RFC 2104'teki çift-hash yapısı bu saldırıyı matematiksel olarak imkânsız hâle getirir; bu yüzden bir imza mekanizması gerektiğinde her zaman özel amaçlı HMAC kullanılmalı, kendi "anahtar+mesaj" birleştirmeniz asla icat edilmemelidir.
En yaygın kullanım alanları arasında API istek imzalama (birçok bulut sağlayıcısı isteğin değiştirilmediğini kanıtlamak için HMAC imzası ister), webhook doğrulama (Stripe, GitHub gibi servisler gönderdikleri her webhook isteğine bir HMAC-SHA256 imzası ekler; alıcı sunucu kendi gizli anahtarıyla aynı imzayı yeniden hesaplayıp karşılaştırarak isteğin gerçekten o servisten geldiğini doğrular) ve JWT'nin (JSON Web Token) HS256 imza algoritması sayılabilir. Bir geliştirici olarak, bir webhook entegrasyonunu test ederken veya bir API isteğinin imzasının neden doğrulanmadığını araştırırken bu aracı kullanarak beklenen HMAC değerini elle yeniden üretip karşılaştırabilirsiniz.
Bu araç tamamen tarayıcınızda çalışır; hesaplama, tarayıcının yerleşik Web Crypto API'si (crypto.subtle) ile yapılır — ne mesajınız ne de gizli anahtarınız hiçbir aşamada bir sunucuya gönderilmez. Çoğu modern kullanım için SHA-256 önerilir; çıktı biçimi olarak Hex okunabilirlik, Base64 kompaktlık, Base64URL ise URL/dosya adı içinde güvenle kullanılabilme (ör. JWT imzaları) sağlar.
Bunu da Dene
İşin bitti mi? Sırada bunlar olabilir.
Sık Sorulan Sorular
hash(anahtar+mesaj)) HMAC'in yerini tutmaz — bu naif yaklaşım "uzatma saldırısı"na (length-extension attack) karşı savunmasızdır.+// karakterlerini -/_ ile değiştirir ve dolgu (=) içermez — JWT imzaları bu biçimi kullanır.Son güncelleme: