Middle
HMAC nedir ve nasıl kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
HMAC (Hash tabanlı Mesaj Kimlik Doğrulama Kodu), gizli anahtar ve kriptografik bir hash fonksiyonu kullanarak mesajın bütünlüğünü ve doğruluğunu kontrol etmek için kullanılan bir mekanizmadır.
Çalışma algoritması:
- Gizli anahtardan iç ve dış anahtarların oluşturulması (
ipad,opad). - İç hash'in hesaplanması:
hash(gizli anahtar XOR ipad + mesaj). - Dış hash'in hesaplanması:
hash(gizli anahtar XOR opad + iç hash). Bu HMAC'dir.
Kullanım alanları:
- API isteklerinin kimlik doğrulaması: Sunucu ve istemci ortak gizli anahtar paylaşır. İstemci, isteğin verileri için HMAC hesaplar ve başlıkta gönderir. Sunucu, aynı veriler ve anahtar ile HMAC hesaplar ve karşılaştırır. Eşleşirse, istek doğrulanmış sayılır.
- Veri bütünlüğü kontrolü: Mesajın HMAC'ı, yeniden hesaplanan HMAC ile uyuşuyorsa, verilerin iletim sırasında değiştirilmediğinden emin olunabilir.
- JSON Web Token (JWT) kullanımı: HMAC, token verilerinin bütünlüğünü sağlamak için sıkça kullanılan dijital imza algoritmaları (HS256, HS384, HS512) olarak kullanılır.
Uygulama örneği (sözde kod):
function hmacSHA256(key, message) {
// padding sabitleri
const blockSize = 64; // SHA-256 için
const ipad = 0x36;
const opad = 0x5c;
// Anahtarın hazırlanması
let paddedKey = key;
if (key.length > blockSize) {
paddedKey = sha256(key);
}
while (paddedKey.length < blockSize) {
paddedKey += 0x00;
}
// İç hash
const innerPaddedKey = xor(paddedKey, ipad);
const innerHash = sha256(innerPaddedKey + message);
// Dış hash (HMAC)
const outerPaddedKey = xor(paddedKey, opad);
const hmac = sha256(outerPaddedKey + innerHash);
return hmac;
}
// Gerçek kütüphanelerde, uygulama optimize edilmiştir ve farklıdır
Basit anahtar ile hash arasındaki temel fark (hash(anahtar + mesaj) veya hash(mesaj + anahtar)) HMAC'ın mesaj uzatma saldırılarına karşı dayanıklı olmasıdır, çünkü iki farklı padding sabiti ile iki aşamalı hash kullanır.