HMAC oluşturucu
Bir iletiyi gizli anahtarla imzalayın. Hiçbir şey iletilmez.
- Tarayıcınızda çalışır — metniniz hiçbir yere gönderilmez
- Kayıt yok, kota yok, istediğiniz sıklıkta ücretsiz kullanın
Nasıl çalışır
HMAC aynı anda iki şeyi kanıtlar: iletinin değiştirilmediğini ve onu üreten tarafın paylaşılan gizli anahtara sahip olduğunu. Webin büyük bölümünde webhook'ları, API isteklerini ve indirme bağlantılarını imzalayan şey budur.
Düz bir hash'ten, önemli olan noktada farklıdır
Bir iletinin SHA-256 değerini herkes hesaplayabilir; bu yüzden çıplak bir hash, iletiyi kimin oluşturduğu hakkında hiçbir şey kanıtlamaz. İletiyi değiştirin, hash'i yeniden hesaplayın, kimse farkı anlayamaz. HMAC ise hesaplamaya gizli bir anahtar katar, dolayısıyla anahtar olmadan yeniden hesaplanamaz. Asıl nokta budur ve webhook imzalarının hash yerine HMAC kullanmasının nedeni de budur.
Güvenli doğrulama
Bir sunucuda HMAC'i denetlerken sabit zamanlı bir işlevle karşılaştırın: Node'da crypto.timingSafeEqual, PHP'de hash_equals. Sıradan bir == iki bayt farklı olur olmaz sonuç döndürür ve harcadığı süre imzanın ne kadarının doğru olduğunu sızdırır; sabırlı bir saldırgan için bu, imzayı taklit etmeye yeter. Bu kuramsal değil, gerçek bir saldırıdır.
Hangi algoritma
Başka bir şey belirtilmedikçe SHA-256. SHA-1 yer alır, çünkü çok sayıda eski API hâlâ HMAC-SHA-1 gerektirir ve HMAC-SHA-1, düz SHA-1'in kırıldığı biçimde kırılmamıştır; ancak yeni bir iş için onu seçmenin bir nedeni yoktur.
Hex veya Base64
Tamamen karşı tarafın ne beklediğine bağlıdır. Hex iki kat uzundur ve okunması daha kolaydır; Base64 daha kompakttır ve HTTP üstbilgilerinde yaygındır. Aynı imza ikisinde de gösterilir.
Anahtarınız burada kalır
Tarayıcının kendi Web Crypto API'si ile oluşturulur. Anahtar ve ileti hiçbir yere gönderilmez; bu aracı sunmanın sorumlu tek yolu budur — gizli anahtarınızı yükleyen bir imzalama aracı, o anahtarın koruduğu şeyi elden çıkarmış olur.
HMAC oluşturucu — sorular
HMAC bir hash'ten nasıl farklıdır?
Bir hash'i herkes yeniden hesaplayabilir. HMAC ise gizli anahtar gerektirir; bu nedenle onu kimin ürettiğini kanıtlar.
Hangi algoritmayı kullanmalıyım?
Bir API başka bir algoritma belirtmedikçe SHA-256. SHA-1, onu hâlâ gerektiren eski sistemler için sunulur.
Hex mi, Base64 mü kullanmalıyım?
Karşı taraf hangisini bekliyorsa onu. Aynı imza için ikisi de gösterilir.
Karşılaştırma neden sabit zamanlı olmalı?
Normal bir karşılaştırma ilk uyuşmazlıkta erken çıkar ve süre farkı, ne kadarının doğru olduğunu sızdırır; bu da bir imzayı taklit etmeye yetecek bilgidir.
Gizli anahtarım bir yere gönderiliyor mu?
Hayır. Her şey tarayıcınızda, Web Crypto API üzerinden çalışır.