- 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).
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:
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.
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.
HOTP (RFC 4226) Mimarisi & Dynamic Truncation Bayt Mekaniği
HOTP'nin temel matematiksel tanımı son derece açık ve nettir:
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:
Gizli anahtarın ASCII "12345678901234567890" ve Sayacın C = 0 olduğunu varsayalım. Ortaya çıkan onaltılık HMAC-SHA1 özeti:
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!
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:
- 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.
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.
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 |
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:
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.
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.
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.
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:
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.
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.
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.
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ışı.
📚 İlgili Güvenlik Rehberleri
Çevrimdışı QR kodları ve Bulut Senkronizasyonu ile 2FA hesaplarını akıllı telefonlar arasında aktarma.
Uyum kuralları, kurtarma kodlarını kaydetme, SSH anahtar etkileşimi ve kurtarma iş akışları.
Google, Microsoft, Steam, Binance, Apple ve Discord'da erişimi yeniden kazanma.