# HMAC tabanlı tek seferlik parola algoritması
HMAC Tabanlı Tek Seferlik Parola algoritması (HOTP), "özet-tabanlı mesaj doğrulama kodlarına" (HMAC) dayanan tek seferlik parola (OTP) algoritmasıdır. Açık Kimlik Doğrulama Girişiminin (OATH) bir temel taşıdır.
HOTP, Aralık 2005'te, algoritması Java ile hayata geçirilmiş şekilde, bir IETF RFC 4226 bildirgesi olarak yayınlandı. O zamandan beri, algoritma dünya çapında birçok şirket tarafından kullanılmıştır. HOTP algoritması ücretsizce temin edilebilen bir açık standarttır .


## Algoritma.
HOTP algoritması, her biri yalnızca bir kimlik doğrulama işlemi için kullanılan, insan tarafından okunabilen parolaların veya "değerlerin" simetrik üretilmesiyle bir kimlik doğrulama yöntemi sağlar. Tek seferlik olma özelliği, doğrudan her bir sayaç değerinin tek bir kere kullanımından kaynaklanır.
HOTP kullanmak isteyen tarafların aşağıdaki değişkenleri oluşturması gerekir; bunlar, tipik olarak kimlik doğrulayıcı tarafından belirtilir, kabul edilir veya edilmez:
  - Bir şifreleme özet yöntemi, H (varsayılan SHA-1'dir ) 
  - İsteğe bağlı bir bayt dizgisi olan ve mahrem olarak değerlendirilen gizli bir anahtar, "K" 
  - Bir HOTP değer uzunluğu, "d" (6–10 arası, varsayılan değer 6 veya 6-8 önerilir)
Her iki taraf da HOTP değerini hesaplar, ardından kimlik doğrulayıcı, kendisi hesapladığı değeri, kimliğini doğrulamak isteyen tarafından hesaplanan değerle karşılaştırarak kontrol eder.
Kimlik doğrulayıcı ve kimliği doğrulanan taraf, birbirlerinden bağımsız olarak sayacı arttırırlar. Burada ikinci taraf ilk taraftan önce artabilir, bu yüzden bir yeniden senkronizasyon protokolü kullanmak akıllıca olur. RFC 4426, bunun zorunlu olduğunu belirtmemekle birlikte, kullanımını önermektedir. Bu sadece kimlik doğrulayıcı "s" boyutundaki bir pencereden, tekrar tekrar sayaçları doğrulamayı dener. Kimlik doğrulayıcının sayacı, doğrulamanın başarılı olduğu değerden saymaya devam eder ve kimliği doğrulanan kişi tarafından herhangi bir işlem yapılmasına gerek duymaz.
HOTP değerinin sürekli olarak daralması, göreceli olarak küçük boyutlarını ve dolayısıyla kaba kuvvet yaklaşımı saldırılarına karşı kırılganlıkları gidermek için değer doğrulaması yapılması önerilir. Doğrulamanın az sayıda başarısız denemeden sonra kilitlenmesi veya her başarısız denemenin ek (doğrusal olarak artan) bir gecikmeye uğraması önerilmektedir.
6 basamaklı kodlar genellikle, "d"' nin varsayılan değerini bildiren çeşitli satıcıdan alınan özel donanım belirteçleri tarafından sağlanır. Kesme işlemi 31 bit veya log_10(2^31) ≈ 9.3 ondalık basamak, yani "d" en fazla 10 olabilir ve 10. basamak sadece 0, 1 ve 2 (yani, 0.3 basamak) değerlerinden birisini alarak daha az değişiklik sağlar.


### İki yönlü kimlik doğrulama.
Kimlik doğrulamadan sonra, kimlik doğrulayıcı bir sonraki HOTP değerini oluşturarak ve geri döndürerek kendi kimliğini doğrulayabilir. Sonrasında, kimliği doğrulanan kendi HOTP değerini oluşturabilir. Bu işlem sırasında, sayaçların işlem sırasında bu noktada senkronize edilmesinin garanti edildiğine dikkat edin.


### HOTP değeri.
HOTP değeri, "d" basamaklı ondalık sayı (baştaki 0'lar ihmal edilmeden), insan tarafından okunabilen tasarım çıktısıdır.
 HOTP değeri = HOTP ("K", "C") mod 10 "d"
Yani "d"değeri, HOTP'nin en az öneme sahip olan 10 tabandaki basamaklarıdır.
HOTP, "C" sayacının özet-tabanlı mesaj doğrulama kodunun (HMAC) bir kesilmesidir (truncation) ("K" anahtarı ve "H" özet fonksiyonuyla).
 HOTP ("K", "C") = truncate(HMAC H ("K", "C"))
Kesme işlemi, ilk "olarak," "MAC"'in en az önem sahip 4 bitini alır ve bir ofset ("i") olarak kullanır.
 truncate("MAC") = extract31 ("MAC", "MAC" [(19x8) + 4: (19x8) + 7] × 8)
Bu "i" indeksi, "i + 1." indexten başlayarak "MAC'tan" 31 bit seçmek için kullanılır.
 extract31("MAC", "i") = "MAC" ["i" + 1: "i" + (4 x 8) - 1]
31 bitin, 4 baytlık bir kelimeden 1 bit daha kısa olduğunu unutmayın. Böylece değer, işaret biti (en önemli bit) kullanılmadan böyle bir kelimenin içine yerleştirilebilir. Bu işlem, negatif sayılar üzerinde modüler aritmetik işleminden kaçınmak için yapılır, çünkü bunun birçok farklı tanımı ve uygulaması vardır.


## Belirteç.
Hem donanım hem de yazılım belirteçleri çeşitli satıcılardan temin edilebilir. OATH HOTP uygulayan donanım belirteçleri, özel algoritmalara dayalı olarak rakiplerinden önemli ölçüde daha ucuz olma eğilimindedir. 2010 yılı itibarıyla, OATH HOTP donanım belirteçleri düşük bir fiyata satın alınabilir. Bazı ürünler OATH HOTP'ın yanı sıra güçlü parolalar için de kullanılabilir.
Yazılım belirteçleri neredeyse tüm cep telefonu/akıllı telefon platformları için kullanılabilir (J2ME,Android, iPhone, BlackBerry, Maemo, macOS ve Windows Mobil ).


## Yayın Alımı.
Her ne kadar bazı bilgisayar basınlarından yayın alımı 2004 ve 2005 yıllarında negatif olsa da, IETF'in Aralık 2005'te HOTP'yi RFC 4226 olarak kabul etmesinden sonra, çeşitli satıcılar HOTP uyumlu belirteçler ve/veya tamamen kimlik doğrulama çözümleri üretmeye başlamıştır.
2010 yılında Burton Group (Gartner, Inc.'in bir bölümü) tarafından yayınlanan güçlü kimlik doğrulaması ("Yol Haritası: Şifrelerin OTP Kimlik Doğrulaması ile Değiştirilmesi" başlıklı) makalesine göre, "Gartner'ın beklentisi, akıllı telefon OTP'leri büyümeye ve zaman içinde varsayılan donanım platformu haline gelmeye devam ettiği sürece, donanım OTP faktörünün mütevazı bir büyüme içerisinde olacağı yönündedir."