İçeriğe geç
LLCBullet

Sektör terimi

HMAC imzası

Diğer adları: HMAC, HMAC-SHA256

Bir mesajın, yalnızca gönderen ve alıcının bildiği gizli bir anahtarla üretilmiş doğrulama kodu. Alıcı aynı hesaplamayı yaparak mesajın doğru kaynaktan geldiğini ve yolda değiştirilmediğini anlar.

Ayrıntılı açıklama

HMAC (Hash-based Message Authentication Code), bir özet fonksiyonunu (örneğin SHA-256) gizli anahtarla birleştirir. Gönderen, mesaj ve gizli anahtar üzerinden imzayı hesaplayıp mesajla birlikte yollar; alıcı aynı anahtarla imzayı yeniden hesaplar ve iki değeri karşılaştırır.

Güvenli bir doğrulama için birkaç kural önemlidir: imza mesajın ham baytları üzerinden hesaplanmalı, karşılaştırma sabit süreli yapılmalı ki zamanlama farkı bilgi sızdırmasın, imzaya bir zaman damgası dahil edilip eski istekler reddedilmeli ki aynı istek tekrar oynatılamasın.

LLCBullet iki yerde HMAC-SHA256 kullanır. Webhook görevlerinde istek, whsec_ ile başlayan gizli anahtarla zaman damgası ve ham gövde üzerinden imzalanır ve X-LLCBullet-Signature başlığında gönderilir. Kişisel API anahtarlarında ise jeton isteği, lbs_ ile başlayan gizli anahtarla zaman damgası, nonce, yöntem, yol ve gövde özeti üzerinden imzalanır.

Nasıl işler?

  1. Gönderen ve alıcı aynı gizli anahtarı güvenli bir şekilde paylaşır.
  2. Gönderen, imzalanacak metni (örneğin zaman damgası ve gövde) anahtarla HMAC'ten geçirir.
  3. İmza bir HTTP başlığında mesajla birlikte gönderilir.
  4. Alıcı imzayı yeniden hesaplar, sabit süreli karşılaştırır ve zaman damgasını kontrol eder.

Örnek

Webhook isteğini alan sunucu imzayı, gövdeyi JSON'a çevirmeden önceki ham baytlarla hesaplar. Gövde yeniden biçimlendirilirse tek bir boşluk farkı bile imzanın tutmamasına yol açar.

Sık sorulan sorular

HMAC bir şifreleme yöntemi midir?

Hayır. HMAC mesajı gizlemez, yalnızca kaynağını ve bütünlüğünü doğrular. Mesajın gizliliği için bağlantının ayrıca TLS ile şifrelenmesi gerekir.

Neden sabit süreli karşılaştırma gerekir?

Sıradan karşılaştırma ilk farklı karakterde durur ve bu süre farkı, imzanın ne kadarının doğru tahmin edildiğini sızdırabilir. Sabit süreli karşılaştırma bu farkı ortadan kaldırır.