HMAC Üreticisi

SHA-256, SHA-384 veya SHA-512 ile HMAC imzaları oluştur

Algoritma

İleti

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

Gizli Anahtar

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

HMAC İmzası

HMAC imzası burada görüntülenecek…

HMAC Nedir?

HMAC (Hash tabanlı İleti Kimlik Doğrulama Kodu), RFC 2104'te tanımlanan ve sabit boyutlu bir kimlik doğrulama etiketi üretmek için bir hash fonksiyonunu gizli bir anahtarla birleştiren kriptografik bir yapıdır. Herkesin hesaplayabildiği düz bir hash'in aksine, HMAC yalnızca gizli anahtarı paylaşan taraflar tarafından oluşturulabilir ve doğrulanabilir. HMAC; bir iletinin hem bütünlüğünü hem de özgünlüğünü doğrulamak için standart mekanizmadır — verinin değiştirilmediğini ve güvenilir bir gönderici tarafından üretildiğini onaylar.

HMAC algoritması herhangi bir yinelemeli hash fonksiyonuyla çalışır: SHA-256, SHA-384, SHA-512 ve SHA-1 veya MD5 gibi eski fonksiyonlar. Ortaya çıkan yapı, temel aldığı hash'e göre adlandırılır: HMAC-SHA256, HMAC-SHA384 veya HMAC-SHA512. HMAC'ın güvenlik kanıtı hash fonksiyonunun çakışmaya karşı dirençli olmasına ve belirli sahte rastlantısallık özelliklerine sahip bulunmasına dayandığından, yeni sistemler için SHA-2 ailesi algoritmaları önerilen seçimdir. HMAC-SHA256, AWS Signature V4, Stripe webhook'ları, GitHub webhook gizli anahtarları, Slack istek imzalama ve JSON Web Token'ları (HS256) gibi sistemlerde kullanılan en yaygın varyantdır.

HMAC'ın tasarımı, düz hashing'in sahip olmadığı kritik bir özellik sağlar: uzunluk uzatma saldırılarına karşı direnç. Yalnızca SHA-256 kullanıldığında, H(ileti)'yi bilen bir saldırgan, özgün iletiyi bilmeden H(ileti || saldırgan_verisi)'ni hesaplayabilir. HMAC'ın çift hashleme yapısı (farklı dolgulu anahtarlarla iç hash ve dış hash), bu saldırıyı tamamen önler. API imza şemalarının, iletiyle gizli anahtarı birleştirip sonucu hashlemek yerine HMAC kullanmasının nedeni budur.

Neden Çevrimiçi HMAC Üreticisi Kullanılır?

HMAC imzaları hesaplamak genellikle kod yazmayı veya komut satırı araçları kullanmayı gerektirir. Bu tarayıcı tabanlı HMAC üreticisi, yazılım yüklemeden veya terminale geçmeden HMAC-SHA256, HMAC-SHA384 ve HMAC-SHA512 imzalarını anında oluşturmanızı sağlar.

Anında HMAC Hesaplama
İletinizi ve gizli anahtarınızı girin, hash algoritmasını seçin ve HMAC imzasını hemen alın. Web Crypto API, hesaplamayı tarayıcınızda doğrudan gerçekleştirir.
🔒
Gizlilik Öncelikli İşlem
İletiniz ve gizli anahtarınız hiçbir zaman cihazınızı terk etmez. Tüm HMAC hesaplaması Web Crypto API aracılığıyla yerel olarak çalışır — sunucuya istek gönderilmez, günlük tutulmaz, veri saklanmaz.
📋
Çoklu Algoritma Desteği
HMAC-SHA256, HMAC-SHA384 ve HMAC-SHA512 arasında tek tıklamayla geçiş yapın. Arka uç uygulamanızın doğru çalıştığını doğrulamak için algoritmalar arasındaki çıktıları karşılaştırın.
🔍
Hesap veya Kurulum Gerektirmez
Chrome, Firefox, Safari, Edge — tüm modern tarayıcılarda çalışır. Kayıt, eklenti veya CLI kurulumu gerekmez. Sayfayı açın ve HMAC imzaları oluşturmaya başlayın.

HMAC Üreticisi Kullanım Senaryoları

Ön Uç Geliştirici — Webhook İmza Doğrulama
Stripe, GitHub ve Shopify, webhook yüklerini HMAC-SHA256 ile imzalar. Geliştirme sırasında bir yük ve gizli anahtardan beklenen imzayı hesaplamak ve HTTP başlığındaki imzayla karşılaştırmak için bu aracı kullanın.
Arka Uç Mühendisi — API İstek İmzalama
AWS Signature V4, imzalama sürecinin birden fazla aşamasında HMAC-SHA256 gerektirir. İmzalama uyuşmazlıklarını gidermek ve ara hesaplama adımlarını doğrulamak için geliştirme sırasında referans HMAC değerleri oluşturun.
DevOps — Gizli Anahtar Rotasyonu Doğrulama
Webhook gizli anahtarlarını veya API imzalama anahtarlarını değiştirirken, eski anahtar sona ermeden önce uygulamanızın geçişi doğru işlediğini onaylamak için hem eski hem de yeni anahtarla HMAC imzaları hesaplayın.
QA Mühendisi — İmza Test Vektörleri
Kimlik doğrulama katmanınız için regresyon testleri oluşturmak amacıyla bilinen girişler ve anahtarlarla HMAC test vektörleri oluşturun. Uygulamanızın boş iletileri, Unicode girişini ve uzun anahtarları doğru işlediğini doğrulayın.
Veri Mühendisi — İşlem Hattı İleti Kimlik Doğrulama
Olay güdümlü işlem hatlarındaki (Kafka, SQS) iletilere HMAC imzaları ekleyerek servislerin iletim sırasında iletilerin değiştirilmediğini doğrulayın.
Öğrenci — Kriptografi Dersliği
İleti veya anahtardaki tek bir karakteri değiştirmenin tamamen farklı bir imza ürettiğini anlamak için HMAC ile denemeler yapın. Gizli bir anahtarın yarattığı farkı gözlemlemek için HMAC çıktısını düz SHA-256 çıktısıyla karşılaştırın.

HMAC vs Düz Hash vs Şifreleme

HMAC, düz hashing ve şifreleme farklı amaçlara hizmet eder. HMAC, ileti kimlik doğrulaması sağlar — iletinin gizli anahtara sahip biri tarafından oluşturulduğunu ve değiştirilmediğini kanıtlar. Düz hash, bütünlük sağlar ancak kimlik doğrulama sağlamaz. Şifreleme gizlilik sağlar. Aşağıdaki tablo bu ayrımları açıklar.

ÖzellikHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

HMAC Algoritması Karşılaştırması

HMAC herhangi bir hash fonksiyonunu kullanabilir; ancak temel algoritmanın seçimi çıktı boyutunu, güvenlik düzeyini ve tarayıcı uyumluluğunu belirler. HMAC-SHA256, yeni sistemler için en yaygın tercihdir. Aşağıdaki tablo karşılaşabileceğiniz varyantları karşılaştırmaktadır.

AlgoritmaÖzet BoyutuOnaltılık UzunlukWeb Crypto APIEn Uygun Kullanım
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

HMAC İçeride Nasıl Çalışır?

HMAC, temel hash fonksiyonunu iki farklı anahtardan türetilmiş dolgularla iki kez uygular. Bu yapı RFC 2104'te tanımlanmış ve standart kriptografik varsayımlar altında PRF (sahte rastlantısal fonksiyon) olduğu kanıtlanmıştır. Anahtar önce hash fonksiyonunun blok boyutuna uyacak şekilde doldurulur veya hashlenir (SHA-256 için 64 bayt, SHA-512 için 128 bayt).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Algoritma, dolgulu anahtarı bir iç dolgu sabitiyle (ipad, tekrarlanan 0x36) XOR'lar, bunu iletiyle birleştirir ve sonucu hashler. Ardından dolgulu anahtarı bir dış dolgu sabitiyle (opad, tekrarlanan 0x5C) XOR'lar, bunu iç hash çıktısıyla birleştirir ve tekrar hashler. Bu çift hashleme yapısı, uzunluk uzatma saldırılarını önler ve gizli anahtarın bilinmeden HMAC çıktısının hesaplanamayacağını garanti eder.

HMAC Kod Örnekleri

HMAC, tüm büyük dillerde ve çalışma ortamlarında yerel olarak desteklenmektedir. Web Crypto API, tarayıcılarda herhangi bir kütüphane gerektirmeden HMAC-SHA256, HMAC-SHA384 ve HMAC-SHA512 sağlar. Aşağıdaki örnekler, webhook doğrulama ve sabit zamanlı karşılaştırma dahil gerçek dünya kullanım modellerini göstermektedir.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

Sıkça Sorulan Sorular

HMAC ile düz hash arasındaki fark nedir?
Düz bir hash (SHA-256, MD5) yalnızca iletiyi girdi olarak alır ve herkesin hesaplayabileceği bir özet üretir. HMAC hem iletiyi hem de gizli anahtarı alır; yalnızca anahtara sahip biri tarafından oluşturulabilecek veya doğrulanabilecek bir imza üretir. Bu, HMAC'ın bütünlük kontrolüne ek olarak kimlik doğrulama (gönderici kimliğinin kanıtı) sağladığı anlamına gelir. Düz hash yalnızca verinin değişmediğini kanıtlar, kim tarafından üretildiğini kanıtlamaz.
HMAC-SHA256 güvenli midir?
Evet. HMAC-SHA256, 2026 itibarıyla güvenli kabul edilmektedir. Güvenliği SHA-256'nın sahte rastlantısallık özelliklerine ve HMAC yapısının kendisine (RFC 2104) dayanır. HMAC-SHA256'ya karşı pratik bir saldırı gösterilmemiştir. HMAC-MD5 ve HMAC-SHA1 bile pratikte güvenli kalmaya devam etmektedir; çünkü HMAC'ın güvenliği temel hash'in tam çakışma direncini gerektirmez — ancak yeni sistemler için SHA-2 varyantları önerilmektedir.
Webhook'lar neden yükü şifrelemek yerine HMAC kullanır?
Webhook yükleri genellikle alıcının zaten beklediği verileri içerir — sipariş ayrıntıları, olay bildirimleri, durum güncellemeleri. Amaç veriyi gizlemek (gizlilik) değil, verinin meşru göndericiden geldiğini ve aktarım sırasında değiştirilmediğini kanıtlamaktır (özgünlük ve bütünlük). HMAC bunu minimum ek yükle sağlar: gönderici, paylaşılan bir gizli anahtarla yükün HMAC'ını hesaplar ve bir HTTP başlığına ekler. Alıcı HMAC'ı yeniden hesaplar ve karşılaştırır. Şifreleme, gereksiz karmaşıklık ve anahtar yönetimi yükü getirir.
HMAC imzalarını güvenli biçimde nasıl karşılaştırmalıyım?
Her zaman sabit zamanlı bir karşılaştırma işlevi kullanın. Python'da hmac.compare_digest(), Node.js'te crypto.timingSafeEqual(), Go'da hmac.Equal() kullanın. Standart dize eşitliği operatörleri (== veya ===) zamanlama bilgisi sızdırabilir: bir saldırgan, sahte imzalarının kaç baytının doğruyla eşleştiğini belirlemek için karşılaştırmanın ne kadar sürdüğünü ölçebilir ve ardından kalan baytları tek tek deneme yanılma yöntemiyle bulabilir.
HMAC tersine çevrilerek gizli anahtar kurtarılabilir mi?
Hayır. HMAC tek yönlü bir hash fonksiyonuna dayalıdır; bu nedenle bir HMAC çıktısından anahtarı çıkarmak için matematiksel bir kısa yol yoktur. Bir saldırganın anahtar uzayını kaba kuvvetle denemesi gerekir; bu, 128 bit veya daha uzun anahtarlar için pratik olarak imkânsızdır. Ancak basit parolalar gibi zayıf veya kısa anahtarlar sözlük saldırılarına karşı savunmasız olabilir; bu nedenle HMAC-SHA256 için her zaman en az 256 bit uzunluğunda kriptografik olarak rastlantısal anahtarlar kullanın.
HMAC anahtarı hash blok boyutundan uzunsa ne olur?
Gizli anahtar hash fonksiyonunun blok boyutundan uzunsa (SHA-256 için 64 bayt, SHA-512 için 128 bayt), HMAC algoritması önce anahtarı hash çıktı uzunluğuna indirmek için temel hash fonksiyonuyla hashler, ardından bu hash'i etkin anahtar olarak kullanır. Bu, çok uzun anahtarların hash çıktı boyutunun ötesinde ek güvenlik sağlamadığı anlamına gelir. HMAC-SHA256 için 64 bayttan uzun anahtarlar 32 bayta indirilir ve 64 baytlık bir anahtara kıyasla güvenlik iyileştirmesi sunmaz; 64 bayta kadar anahtarlar tam uzunluklarıyla kullanılır.
HMAC-SHA512'yi HMAC-SHA256 yerine ne zaman kullanmalıyım?
Protokol gerektirdiğinde (HKDF-SHA512, Ed25519 anahtar üretimi gibi bazı anahtar türetme fonksiyonları), daha geniş bir imza derinlemesine savunma için gerektiğinde ya da SHA-512'nin SHA-256'dan gerçekten daha hızlı olduğu 64-bit donanımda çalışırken HMAC-SHA512 kullanın. Çoğu web uygulaması, API imzalama ve webhook doğrulama için HMAC-SHA256, yeterli güvenlik sağlar ve ekosistemler genelinde daha yaygın tercih edilen seçimdir.