⏱️ Kriptografi & RFC Protokolleri ✓ 2026 için Doğrulandı · IETF Standartları Analizi

TOTP ve HOTP Karşılaştırması: Temel Farklar, Güvenlik ve Çalışma İlkeleri

Milyonlarca geliştirici ve güvenlik mühendisi her gün ekranda dönen 6 haneli doğrulama kodlarına bakar, ancak çok azı ekranın altında çalışan zarif matematiksel mekanizmayı anlar. 2005 yılındaki RFC 4226 (HOTP) olay güdümlü sayaçlarından 2011 yılındaki RFC 6238 (TOTP) ayrık zaman adımlarına kadar, bu rehber bayt düzeyinde Dynamic Truncation algoritmasını, sayaç senkronizasyon kaybı açıklarını, saat kayması toleranslarını ve TOTP'nin modern web'i neden fethettiğini inceliyor.

2FA
2FA-Tool Güvenlik Ekibi
Ekim 2026'da Güncellendi
Tahmini Okuma Süresi: 14 dk (2.600+ kelime)
RFC 6238 RFC 4226 Dynamic Truncation
💡 Kriptografik Çıkarımlar (Özet)
  • Temel Girdi Farkı: HOTP, karmaları sürekli artan bir sayaç C üzerinden hesaplarken; TOTP, C'nin yerine bir zaman adımı T (CurrentUnixTime / 30) koyar.
  • Doğrudan Kalıtım: TOTP matematiksel olarak HOTP'nin özelleşmiş halidir: TOTP(K, Time) = HOTP(K, T). Her iki algoritma da tamamen aynı Dynamic Truncation fonksiyonunu kullanır.
  • Belirleyici Mimari Faktör: HOTP durum bilgisini korur (stateful: sunucular her doğrulamada sayaçları kilitleyip diske yazmalıdır). TOTP ise durumsuzdur (stateless: modern bulut mikro hizmetlerinin merkezi veri tabanına yazma işlemi yapmadan dağıtık yük dengelemeli kümelerde belirteçleri doğrulamasına olanak tanır).
01

Tarihsel Kökler: Tescilli Donanım Belirteçlerinden Açık Web Standartlarına

2000'li yılların başında kurumsal iki faktörlü kimlik doğrulamada RSA SecurID gibi tescilli donanım anahtarları hakimdi. Bu kapalı ve pahalı aygıtlar, tescilli kurumsal sunucularla senkronize edilmiş dahili kuvars kristalleri içeriyordu. Bir kuruluş binlerce çalışana çok faktörlü güvenlik sağlamak istediğinde, donanım tedariki ve tescilli lisans maliyetleri fahiş boyutlara ulaşıyordu.

Kimlik doğrulamayı tescilli tedarikçilerin tekelinden kurtarmak amacıyla, endüstri liderleri tarafından herhangi bir yazılım mühendisinin serbestçe inceleyebileceği, uygulayabileceği ve denetleyebileceği açık, telifsiz IETF standartları sunmak için OATH (Initiative for Open Authentication) konsorsiyumu kuruldu:

📜 2005: RFC 4226 (HOTP)

HMAC-Based One-Time Password Algorithm. Fiziksel basmalı düğmelere sahip düşük güçlü mikrodenetleyiciler için özel olarak geliştirilmiştir. Düğmeye basıldığında dahili bir sayaç artırılır ve LCD ekranda 6 haneli bir belirteç görüntülenir.

📜 2011: RFC 6238 (TOTP)

Time-Based One-Time Password Algorithm. Akıllı telefonların yaygınlaşmasıyla birlikte geliştirilmiştir. Hücresel NTP ağ zaman senkronizasyonundan yararlanan TOTP, fiziksel düğme durumu uyuşmazlıklarını tamamen ortadan kaldırmıştır.

02

HOTP (RFC 4226) Mimarisi & Dynamic Truncation Bayt Mekaniği

HOTP'nin temel matematiksel tanımı son derece açık ve nettir:

HOTP(K, C) = Truncate(HMAC-SHA-1(K, C)) mod 10DigitCount

Parametre Açıklaması:

  • K: Paylaşılan simetrik gizli anahtar (genellikle Base32 ile çözülmüş 160 bit / 20 baytlık ikili dizi).
  • C: 8 baytlık (64 bit) big-endian tam sayı sayacı.
  • HMAC-SHA-1: 20 baytlık (160 bit) kriptografik özet üreten anahtarlı karma mesaj kimlik doğrulama kodu.

🔍 Dynamic Truncation (DT) 20 Baytı 6 Haneye Nasıl Dönüştürür:

Bir HMAC-SHA1 özeti 160 bit (20 bayt) içerir. 6 adet tekdüze ondalık basamağın elde edilmesi, RFC 4226 Bölüm 5.3'te tanımlanan deterministik ve çakışmaya dirençli bir seçim mekanizması gerektirir:

// Adım 1: Dinamik Kaymayı (Offset) Hesaplayın
Offset = HS[19] & 0x0F
20 baytlık özetin son baytını (indeks 19) alın. 0x0F ile maskeleme, düşük dereceli 4 biti yalıtarak kesin olarak 0 ile 15 (0x0 ila 0xF) arasında bir tamsayı verir. Bu, sonraki 4 baytlık çıkarımın 20 baytlık arabelleği asla aşmamasını garanti eder (çünkü 15 + 4 = 19).
// Adım 2: Maskeleme ile Birbirini İzleyen 4 Baytı Çıkarın
P = ( (HS[Offset] & 0x7F) << 24 ) | ( (HS[Offset+1] & 0xFF) << 16 ) | ( (HS[Offset+2] & 0xFF) << 8 ) | ( HS[Offset+3] & 0xFF )
Offset konumundan başlayarak 4 baytı çıkarın. 0x7F maskesi, farklı CPU mimarilerinde işaretli tamsayı taşmasını önlemek için en anlamlı biti sıfırlar (temiz pozitif 31 bitlik bir tamsayı sağlar).
// Adım 3: Nihai Basamaklar İçin Modülo Aritmetiği
OTP = P mod 106 = P mod 1000000
1.000.000 modülü uygulanarak son 6 ondalık basamak izole edilir ve gerekirse başına sıfırlar eklenir (örneğin 748, "000748" olur).
🧪 RFC 4226 Ek D'den Somut Test Vektörü:

Gizli anahtarın ASCII "12345678901234567890" ve Sayacın C = 0 olduğunu varsayalım. Ortaya çıkan onaltılık HMAC-SHA1 özeti:

cc 93 cf 18 50 8d 94 93 4c 64 b6 6d 8b fb 87 fb 23 cb 4b 71

1. Son bayt 0x71 değerindedir. 0x71 & 0x0F = 0x01, dolayısıyla Offset = 1.
2. 1 ile 4 arasındaki baytlar: 93 cf 18 50. MSB sıfırlandığında 0x13cf1850 elde edilir, bu da ondalık sistemde 332.339.280 değerine eşittir.
3. 332339280 mod 1000000 = 339280. Elde edilen 6 haneli OTP 339280'dir!

03

TOTP (RFC 6238) Evrimi: Zaman Adımı Sihri

HOTP, istemcideki sayacın sunucuyla senkronize tutulmasını gerektiriyordu. Yazılım aygıtlarında tuş vuruşlarını veya düğmeye basışları saymak sürekli insan hatasına yol açar.

RFC 6238, C sayacını doğrudan Unix epoch saatinden türetilen ayrık bir zaman adımı T ile değiştirmiştir:

T = ⌊ (CurrentUnixTime - T0) / X ⌋
  • CurrentUnixTime: 1970-01-01 00:00:00 UTC tarihinden bu yana geçen saniye sayısı.
  • T0: Dönem başlatma referansı (tüm modern dağıtımlarda varsayılan olarak 0).
  • X (Zaman Adımı Penceresi): Standart olarak önerilen 30 saniyelik süre.
  • Taban Fonksiyonu ⌊ ⌋: 30 saniyelik bir pencere içindeki herhangi bir zaman damgası için T sabit kalır. Örneğin, epoch saniyeleri 1728211200 ile 1728211229 arasında T tamamen aynı 64 bitlik tam sayıya karşılık gelir.

İkili Serileştirme: T hesaplandıktan sonra 8 baytlık big-endian ikili bayt arabelleğine paketlenir (HOTP'deki C sayacı ile bellek yapısında tamamen özdeştir). Sonuç olarak birleşik formül şu şekilde basitleşir:
TOTP(K, Time) = HOTP(K, T) Bu matematiksel zarafet, doğrulayıcı uygulamaların kalıcı durum senkronizasyonu gerektirmeden belirteçleri her 30 saniyede bir eşzamanlı olarak neden yenilediğini açıklamaktadır.

SHA-256 ve SHA-512 İçin RFC 6238 Desteği: RFC 4226 yalnızca HMAC-SHA-1'i tanımlamışken, RFC 6238 HMAC-SHA-256 ve HMAC-SHA-512 desteğini eklemiştir. SHA-256'da (32 bayt özet) kayma 31. bayttan alınır (HS[31] & 0x0F); SHA-512'de (64 bayt özet) kayma 63. bayttan alınır (HS[63] & 0x0F). Ancak ticari web sitelerinin %99,9'unda (Google, Microsoft, GitHub, AWS), eski mobil istemcilerle geriye dönük uyumluluk nedeniyle SHA-1 varsayılan standart olarak kalmaya devam etmektedir.
04

Kapsamlı Yan Yana Karşılaştırma Tablosu (HOTP vs. TOTP)

Boyut HOTP (RFC 4226) TOTP (RFC 6238)
Girdi Değişkeni Olay Sayacı C (sürekli artan) Zaman Adımı T (30 saniyelik Unix epoch penceresi)
Belirteç Ömrü Süresiz (sonraki girişte tüketilene kadar geçerli) Tam 30 saniye (otomatik geçersizleşir)
Sunucu Mimarisi Durum Korumalı (her girişte atomik veritabanı yazma işlemi gerektirir) Durumsuz (bağımsız NTP doğrulaması)
Yeniden Oynatma Saldırısı Riski Orta (ele geçirilen belirteç kullanılana kadar geçerlidir) Minimum (yalnızca mevcut penceredeki kalan saniyelerle sınırlı)
Birincil Hata Modu Sayaç Senkronizasyon Kaybı (yanlışlıkla düğmeye basılması) Saat Kayması (istemci telefon zaman farkı)
Desteklenen Kriptografik Karmalar Yalnızca HMAC-SHA-1 HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512
Sektörel Benimsenme Eski bankacılık anahtarları, özel fiziksel geçiş kapıları Modern web kimlik doğrulayıcılarının %99,9'u
05

Senkronizasyon Kaybı ve Zaman Kayması: Teknik Çözümler

Dağıtık canlı üretim ortamlarında istemciler ve sunucular kaçınılmaz olarak sapma gösterir. Kriptograflar güvenilirliği korumak için açık telafi pencereleri tasarlamışlardır:

⚙️ HOTP Çözümü: İleriye Bakış Doğrulama Penceresi (s)

Kullanıcı giriş yapmadan belirteç düğmesine 5 kez basarsa, istemci sayacı C+5 değerine ulaşırken sunucu C değerinde kalır.
RFC 4226, kimlik doğrulama sırasında sunucunun [C+1, C+s] (genellikle s=20) aralığında bir ileriye bakış penceresi hesaplamasını şart koşar. Eşleşme sağlandığında sunucu aradaki farkı atlayarak C sayacını anında senkronize eder.

⏱️ TOTP Çözümü: Zaman Kayması Toleransı (±1 Pencere)

Ağ gecikmesi veya istemci cihazının saat sapması (örneğin telefon saatinin 10 saniye geride kalması) nedeniyle belirteçler bitişik zaman adımlarında sunucuya ulaşabilir.
Üretim sunucuları 3 pencereli bir diziyi değerlendirir: [T-1, T, T+1]; böylece kabul penceresi 90 saniyeye genişletilmiş olur.

Zorunlu Yeniden Oynatma Koruması: 90 saniyelik kayma toleransı penceresinde yeniden oynatma saldırılarını önlemek için sunucular, kullanılan belirteçleri 90 saniye boyunca bellekte (örneğin Redis) önbelleğe alıp kilitlemeli ve mükerrer denemeleri reddetmelidir.
🛡️ Sabit Zamanlı Dize Karşılaştırması (Zamanlama Saldırısı Savunması):

Sunucular kullanıcının gönderdiği kodun hesaplanan kodla eşleşip eşleşmediğini kontrol ederken standart dize eşitlik kontrolleri (örneğin userOtp === serverOtp), ilk uyuşmayan karakterde işlemi sonlandırır. Mikroskobik ağ gidiş-dönüş yanıt sürelerini ölçen bir saldırgan basamakları kademeli olarak çözebilir. Kurumsal arka uç sistemleri, yan kanal zamanlama analizini önlemek için sabit zamanlı (constant-time) eşitlik karşılaştırmalarını (örneğin Node.js'de crypto.timingSafeEqual) zorunlu kılar.

06

TOTP Modern İnterneti Neden Kazandı

TOTP'nin web genelinde HOTP'ye karşı kesin üstünlük sağlaması üç temel mimari gereksinim tarafından yönlendirilmiştir:

☁️ Durumsuz Bulut Ölçeklenebilirliği

Dağıtık çok bölgeli mikro hizmet mimarilerinde, NTP ile senkronize edilmiş saate sahip herhangi bir sunucu örneği, merkezi bir veritabanı kaydını sorgulamadan veya kilitlemeden TOTP belirteçlerini doğrulayabilir.

📱 Mobil Ekosistem Uyumu

Akıllı telefonlar, sistem saatlerini hücresel baz istasyonları ve GPS üzerinden sürekli olarak kalibre ederek fiziksel donanım bakımına ihtiyaç duymadan saat kaymasını ortadan kaldırır.

🛡️ Dar 30 Saniyelik Saldırı Penceresi

HOTP belirteçleri kullanılana kadar süresiz olarak geçerlidir. TOTP belirteçleri ise 30 saniye içinde sona ererek sızdırılmış günlükleri ve pasif paket dinlemelerini otomatik olarak etkisiz hale getirir.

🧮 Saf İstemci Tarafı RFC 6238 Motoru

2FA-Tool ile Gerçek Zamanlı TOTP Hesaplamalarını Deneyimleyin

Base32 gizli dizinizin HMAC-SHA1 dinamik kesme yöntemiyle nasıl 6 haneli dinamik kodlara dönüştüğünü görün. Tarayıcınızda %100 çevrimdışı.

Çevrim İçi Oluşturucuyu Açın