eTamga
eTamga Dizin
Türkiye E-İmza & E-Dönüşüm Sağlayıcıları Kataloğu
eTamga Ansiklopedi 📅 Son Güncelleme: ⏱️ 4 dk okuma 🛡️ 2026 GİB / VUK Uyumlu

HKDF (HMAC-based Extract-and-Expand Key Derivation Function)

Gelir İdaresi Başkanlığı teknik kılavuzları, Vergi Usul Kanunu ve UBL-TR standartları referans alınarak doğrulanmıştır.

Tanımı ve Standart Dokümanı

HKDF (HMAC-based Extract-and-Expand Key Derivation Function), Hugo Krawczyk ve Pasi Eronen tarafından tasarlanan ve İnternet Mühendisliği Görev Gücü (IETF) tarafından RFC 5869 standart dokümanıyla yayımlanan, HMAC prensibine dayalı iki aşamalı bir kriptografik anahtar türetme fonksiyonudur.

Modern kriptografide; Diffie-Hellman anahtar değişimi (ECDH) sonucu elde edilen ortak sır (shared secret) gibi yüksek entropiye sahip ancak istatistiksel olarak mükemmel rastgelelik taşımayan ham anahtar materyallerinden, simetrik şifreleme (AES-GCM), kimlik doğrulama (HMAC) ve başlatma vektörleri (IV) için kriptografik olarak bağımsız ve güvenli anahtarlar türetmek amacıyla kullanılır.

İki Aşamalı Mimari: Extract ve Expand

HKDF fonksiyonunun tasarımındaki en büyük yenilik ve güvenlik temeli, anahtar türetme sürecini açıkça ayrılmış iki bağımsız matematiksel adıma bölmesidir:

  1. 1. Aşama: HKDF-Extract (Çıkarma)
    Girdi olarak alınan düzensiz ham anahtar materyalinden (IKM - Input Keying Material) ve isteğe bağlı bir tuzdan (salt) faydalanarak, sabit uzunlukta ve istatistiksel olarak rastgele dağılmış bir Sahte Rastgele Anahtar (PRK - Pseudorandom Key) üretir:
    PRK = HMAC-Hash(salt, IKM)
    Eğer tuz verilmezse, kullanılan özet algoritmasının blok uzunluğunda sıfırlardan oluşan bir dize kullanılır.
  2. 2. Aşama: HKDF-Expand (Genişletme)
    Üretilen PRK anahtarını, uygulama bağlam bilgisi (info) ve istenen çıktı uzunluğu ($L$) ile birleştirerek istenen bayt uzunluğunda Çıktı Anahtar Materyali (OKM - Output Keying Material) türetir. Bu adım şu yinelemeli blok mekanizmasıyla çalışır:
    T(0) = Boş Dize ("")
    T(1) = HMAC-Hash(PRK, T(0) || info || 0x01)
    T(2) = HMAC-Hash(PRK, T(1) || info || 0x02)
    T(N) = HMAC-Hash(PRK, T(N-1) || info || N)
    OKM = T(1) || T(2) || ... || T(N)'nin ilk L baytı

TLS 1.3 Protokolü ve Güvenlik Altyapısındaki Rolü

HKDF, modern TLS 1.3 (RFC 8446) protokolünün tüm anahtar hiyerarşisinin temel yapı taşıdır. TLS 1.3 el sıkışmasında:

  • Early Secret: Sıfır gidiş-dönüş süreli (0-RTT) erken veri şifreleme anahtarlarının türetilmesinde kullanılır.
  • Handshake Secret: İstemci ve sunucu arasındaki sertifika transferi ve parametre değişimini şifreleyen anahtarları oluşturur.
  • Master Secret: Oturum boyunca iletilen uygulama verilerini şifreleyen client_application_traffic_secret_0 ve server_application_traffic_secret_0 anahtarlarını üretir.
  • Kriptografik İzolasyon: Farklı info etiketleri (bağlam etiketleri) kullanıldığı için oturum anahtarlarından birinin sızması diğer oturum anahtarlarının veya ana kök sırrın güvenliğini asla tehlikeye atmaz.

Kullanım Alanları ve Güvenli E-Dönüşüm Sistemleri

  1. E-Fatura ve Özel Entegratör API Token Rotasyonu: RESTful web servislerinde oturum başına geçici şifreleme anahtarları ve HMAC API imzalama anahtarları türetmede kullanılır.
  2. Signal ve Uçtan Uca Şifreli Mesajlaşma (Double Ratchet): İki taraflı mesajlaşmalarda her mesaj için yeni bir simetrik anahtar türetilmesini sağlayarak İleriye Dönük Gizlilik (PFS) garantisi sunar.
  3. Donanımsal Güvenlik Modülleri (HSM): Kök anahtardan alt birimlere ayrılmış departman anahtarlarının güvenle türetilmesini sağlar.

Python Kütüphanesi ile HKDF Örneği

from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.primitives import hashes
import os

# Ham anahtar materyali (Örn: Diffie-Hellman Ortak Sırrı)
ikm = os.urandom(32)
salt = os.urandom(16)

# HKDF ile AES-256-GCM için 32 baytlık simetrik anahtar türetimi
hkdf = HKDF(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    info=b"e-tamga-api-encryption-key-v1",
)
derived_aes_key = hkdf.derive(ikm)
print("Türetilen Güvenli Anahtar (32 Bayt):", derived_aes_key.hex())
Mevzuat İnceleme & Doğrulama: eTamga Editöryal Kurulu (17 Ekim 2026)
GitHub'da İyileştirme Öner