TOTP / 2FA kod ayıklayıcı

TOTP / 2FA kodları üretin ve ayıklayın: tam RFC 6238 türetmesi, kayma penceresiyle doğrulama ve otpauth:// ayrıştırma — tümü tarayıcınızda.

Zaman

Bir kod görmek için bir gizli anahtar girin.

Bu yapılandırma için otpauth:// URI
otpauth://totp/user%40example.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA1&digits=6&period=30

Altı rakam gerçekte nedir

Bir TOTP kodu — bir kimlik doğrulama uygulamasının her otuz saniyede bir devrettiği sayı — rastgele değildir ve hiçbir yerde saklanmaz. Hem telefonunuzda hem de sunucuda, zaten paylaştıkları iki şeyden hesaplanır: iki adımlı doğrulamayı açtığınızda bir kez kurulan bir gizli anahtar ve geçerli zaman. İki taraf da bağımsız hesaplayabildiği için, giriş yaparken aralarında hiçbir şeyin gitmesi gerekmez; sunucu yalnızca aynı hesabı çalıştırır ve cevabının sizinkiyle eşleştiğini denetler.

TOTP (RFC 6238), daha eski bir düzen olan HOTP'nin (RFC 4226) üzerinde ince bir katmandır. HOTP bir gizli anahtar ve bir sayacı bir koda çevirir; TOTP ise sayacı Unix çağı başlangıcından beri geçen zaman adımlarının sayısına ayarlanmış HOTP'den başka bir şey değildir. Bütün fikir budur: geçerli Unix zamanını adım uzunluğuna (varsayılan 30 saniye) bölün ve sonucu HOTP'ye verin. Bir kod doğrulanmadığında cevap neredeyse her zaman türetmenin bir yerinde görünür olduğundan, bu araç o hesabın her adımını gösterir.

Türetme, adım adım

Beş adım gizli anahtarı ve zamanı yazdığınız rakamlara götürür. Araç her birini yazdırır, böylece kendi uygulamanızla karşılaştırabilirsiniz:

  • Sayaç. Unix zamanını saniye olarak alın, T0'ı çıkarın (her gerçek dağıtımda 0), periyoda bölün ve aşağı yuvarlayın. 30 saniyelik adımlarda, aynı yarım dakikadaki her an aynı sayacı verir; kod bu yüzden dayandığı kadar dayanır.
  • HMAC. Sayacı 8 bayt big-endian olarak yazın ve seçilen özetle HMAC(gizli anahtar, sayaç) hesaplayın — neredeyse her uygulamada SHA-1. Bu, SHA-1 için 20 baytlık bir özet üretir (SHA-256 için 32, SHA-512 için 64).
  • Ofset. Özetin son baytının alt dört bitini alın. Bu 0 ile 15 arası bir sayıdır ve özette nereden okunacağını söyler — dinamik kırpma, böylece aynı gizli anahtar hep aynı baytları kullanmaz.
  • 31 bitlik değer. Ofsetten başlayarak dört bayt okuyun ve üst biti maskeleyin (işaret karışıklığından kaçınmak için). Geriye 31 bitlik bir tam sayı kalır.
  • Kod. O tam sayıyı 10^basamak ile modülo alın ve sola sıfırlarla doldurun. Altı basamak neredeyse evrensel seçimdir; yedi ve sekiz vardır ve izinlidir.

Üst bitin maskelenmesi ve modülo, kayıplı olan tek adımlardır: birçok farklı özet aynı altı basamağa eşlenir, ve bu iyidir, çünkü kodun yalnızca yaşadığı otuz saniye boyunca tahmin edilmesi zor olması gerekir, sonsuza dek benzersiz olması değil.

Bir kod neden eşleşmez — üç olağan neden

Bir TOTP uyuşmazlığı asla bir hata mesajıyla gelmez; kod yalnızca yanlıştır. Pratikte neredeyse her zaman üç şeyden biridir ve buradaki paneller bunları ayırt etmek için düzenlenmiştir:

  • Gizli anahtar yanlış biçimde okundu. Bir kimlik doğrulayıcı gizli anahtarı Base32'dir, ama aynı karakterler hex olarak okunursa — ya da aslında hex olan bir gizli anahtar Base32 olarak okunursa — tamamen farklı baytlar ve tamamen farklı bir kod üretir. Biçim düğmesini değiştirin ve beklediğiniz kodu hangisinin verdiğini görün.
  • Bir parametre farklı. Ezici varsayılan HMAC-SHA-1, 6 basamak, 30 saniyelik periyottur. SHA-256, veya 8 basamak, veya 60 saniyelik adım kullanan bir sunucu, varsayılanlarda bırakılmış bir uygulamayla anlaşamaz. otpauth:// URI üçünü de taşır; bu yüzden bir QR taramak onları doğru yakalar, gizli anahtarı elle yazmak ise çoğu kez yakalamaz.
  • Saatler kaydı. TOTP her iki tarafın zaman konusunda anlaştığını varsayar. Bir telefonun saati bir dakika ileriyse, kodu sunucununkinden bir dakika öndedir. Kayma penceresi bunun içindir: bir kodu şimdinin iki yanındaki adımlara karşı doğrulamak, yalnızca eşleşip eşleşmediğini değil, saatin ne kadar saptığını da söyler.

RFC 6238, her yanda en fazla bir adımlık bir doğrulama penceresi önerir — sıradan saat sapmasını ve devir anındaki yarışı soğurmaya yeter, arama uzayını gereğinden fazla genişletmeden. Bu araç varsayılan olarak ±1 kullanır ve ayıklarken genişletmenize izin verir.

Gizli anahtarlar, Base32 ve otpauth:// URI

Gizli anahtar bir kez, kurulumda paylaşılır ve sonraki her şey ondan türetilir. Kimlik doğrulama uygulamaları onu Base32 (RFC 4648) ile kodlar — A–Z harfleri ve 2–7 rakamlarından oluşan alfabe, karıştırılması kolay karakterlerden kaçınır ve bir QR altında basılmaya dayanır. Bu araç varsayılan olarak Base32 okur, uygulamaların okunabilirlik için eklediği boşlukları ve büyük-küçük harfi yok sayar, ve gizli anahtarları ham bayt olarak verilen RFC 6238 test vektörlerini yeniden üretebilmeniz için hex de kabul eder.

Kurulumda taradığınız QR kodu da sihir değildir: gizli anahtarı ve tüm parametreleri taşıyan düz metin bir otpauth:// URI'yi kodlar. Alanları doldurmak için buraya bir tane yapıştırın, ya da bir kurulumu uygulamalar arasında taşımak için alanlardan bir tane oluşturun:

otpauth://totp/GitHub:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=GitHub&algorithm=SHA1&digits=6&period=30

Yalnızca totp türü kabul edilir. Bir otpauth://hotp URI periyot yerine bir sayaç taşır ve onu TOTP gibi ele almak sessizce yanlış kodlar üretirdi — bu yüzden tahmin edilmek yerine reddedilir.

Algoritma, basamak ve periyot

RFC 6238, HMAC-SHA-1, SHA-256 veya SHA-512'ye, altı ila sekiz basamağa ve herhangi bir adım uzunluğuna izin verir. Pratikte dünya SHA-1, altı basamak ve otuz saniyede karar kıldı ve çoğu uygulama yalnızca o birleşimi uygular — başka bir şey seçen bir sunucu, kullanıcının uygulamasının takip etmesini ummak zorundadır ve çoğu takip etmez. Birlikte çalışabilirlik için güvenli seçim sıkıcı olandır.

SHA-1 sorusunu doğrudan ele almaya değer, çünkü bu sitedeki özet aracı SHA-1'i kırık olarak işaretler. İki ifade de doğrudur. SHA-1 dijital imzalar için kullanılamaz, çünkü saldırganlar çakışma üretebilir — aynı özete sahip iki belge. TOTP o özelliğe dayanmaz: güvenliği HMAC içindeki gizli anahtardan gelir, özetin çakışmaya dayanıklılığından değil, ve HMAC-SHA-1 sağlam kalır. Burada SHA-256 kullanmak savunulabilir ama azını kazandırır ve yalnızca SHA-1 yapan uygulamalarla birlikte çalışabilirliğe mal olur.

Bu aracın koruduğu ve korumadığı şey

Buradaki her şey tarayıcınızda çalışır. HMAC, cihazınızda Web Crypto API ile hesaplanır — özet ve HMAC araçlarının kullandığı ilkelin aynısı — ve yazdığınız hiçbir şey — gizli anahtar, kod veya otpauth URI — yüklenmez, saklanmaz ya da kaydedilmez. Bu, kodun istemci tarafında olmasının bir özelliğidir, güvenmeniz gereken bir söz değil.

Yine de bir TOTP gizli anahtarı ikinci bir faktördür: ona sahip olan herkes kodlarınızı üretebilir. Bir üretim gizli anahtarını herhangi bir web sayfasına — bu sayfa dahil — yapıştırmak onu panoya ve belki tarayıcı geçmişine koyar, bu yüzden ona bir parolayla gösterdiğiniz özeni gösterin ve yalnızca mekanizmayı anlamanız gerektiğinde tek kullanımlık veya test amaçlı bir gizli anahtar yeğleyin. Araç ayıklamak ve öğrenmek için vardır, gerçek ikinci faktörünüzün yaşadığı yer olmak için değil.

Sıkça sorulan sorular

Gizli anahtarım bir sunucuya gönderiliyor mu?
Hayır. Kod, tarayıcınızda Web Crypto API ile hesaplanır ve yazdığınız hiçbir şey yüklenmez ya da kaydedilmez. Bir TOTP gizli anahtarı ikinci bir faktör olduğundan, yine de bir üretim anahtarını yapıştırırken dikkatli olun — herhangi bir metin gibi pano ve tarayıcı geçmişinden geçebilir.
Kodum neden kimlik doğrulama uygulamamla eşleşmiyor?
Neredeyse her zaman üç şeyden biri: gizli anahtar yanlış biçimde okundu (Base32 mi hex mi), bir parametre varsayılanlardan farklı (çoğu uygulama SHA-1, 6 basamak, 30 saniyelik periyot) ya da cihaz saati kaydı. Türetme paneli ilk ikisini ayırır ve ± kayma penceresiyle doğrulama üçüncüsünü açığa çıkarır.
TOTP ile HOTP arasındaki fark nedir?
HOTP (RFC 4226) bir kodu bir gizli anahtar ve her kullanımda artan bir sayaçtan hesaplar. TOTP (RFC 6238) aynı yapıdır ama sayaç Unix çağından beri geçen zaman adımlarının sayısına ayarlanır, böylece kod bir tuşa basışla değil saatle değişir. TOTP, kimlik doğrulama uygulamalarının kullandığı şeydir.
Başka yerde kırıkken neden SHA-1 varsayılan?
SHA-1 imzalar için kırıktır çünkü çakışmalar kurulabilir, ama TOTP'nin üzerine kurulu olduğu HMAC çakışmaya dayanıklılığa bağlı değildir; güvenliği gizli anahtara dayanır. HMAC-SHA-1 sağlamdır ve birçok kimlik doğrulama uygulamasının uyguladığı tek algoritmadır, bu yüzden hem güvenli hem uyumlu varsayılandır.
Kodu belirli bir zamana sabitleyebilir miyim?
Evet. Zamanı canlıdan sabitlenmişe geçirin ve bir Unix zaman damgası girin. Kod o zaman durağan kalır; yayınlanmış bir test vektörünü böyle yeniden üretirsiniz — RFC 6238, 59 ve 1111111109 gibi zamanlarda değerler verir — ya da geçmiş bir anda hangi kodun geçerli olduğunu kontrol edersiniz.
Kayma penceresi ne kadar büyük olmalı?
RFC 6238 her yanda en fazla bir adım önerir, bu aracın varsayılanı budur. Daha geniş bir pencere daha çok kaymış bir saati hoş görür ama bir sunucunun kabul edeceği kod kümesini de genişletir, yani bir ödünleşimdir; ±1 standart dengedir.
Basamak ve periyot ne işe yarar?
Basamak, kodun kaç haneli olduğudur — neredeyse her yerde altı, bir hizmetin biraz daha güç istediği yerde yedi veya sekiz. Periyot, bir kodun kaç saniye geçerli kaldığıdır, varsayılan otuz. İkisi de otpauth:// URI'de taşınır ve ikisi de iki tarafta eşleşmeli, yoksa kodlar uyuşmaz.