Cihazın saati kaydığında TOTP kodları neden başarısız olur
Kod, sırrın ve geçerli zaman adımının bir karmasıdır. Her iki uçtaki sapmaları karşılaştırın, sonra pencereyi genişletmek yerine saati düzeltin.
Tek kullanımlık kodlar telefonunuzda tamamen doğru olabilir ve yine de sunucu onları aynı saniyede reddedebilir. Her iki taraf da ortak bir sırdan ve geçerli zaman adımından aynı işlevi hesaplar, bu yüzden zaman konusundaki anlaşmazlık kod konusunda anlaşmazlık üretir. Bu, saat kaymasını yalnızca bir can sıkıntısı değil, güvenlik açısından önemli bir arıza haline getirir.
Burada iki saat önemlidir ve görüneni düzeltmek insanların ilk yaptığı kısımdır. Genellikle dikkat gerektiren saat diğeridir.
Kod zamanın bir işlevidir, parola değil
TOTP ortak sırrı ve geçerli zamandan türetilen bir sayacı alır, ikisini de anahtarlı bir karmadan geçirir ve sonucu kısa bir ondalık diziye kısaltır; bu, RFC 6238 standardında belirtilmiştir. Sayaç her zaman adımında ilerler, genellikle otuz saniye, bu yüzden adım değiştiğinde aynı sır yeni bir değer üretir. Doğrulayıcı geçerli adım için beklenen değeri yeniden hesaplar ve karşılaştırır; bu da aynı sırrı ve şimdiki an hakkında aynı anlayışı gerektirir. Parola değiştirilene kadar yeniden kullanılabilir kalır, oysa bu değer istemcinin göremediği bir sınırda sona erer.
Bu yüzden bir kod çalışır ve sonraki birkaç an sonra başarısız olur. Bu aynı zamanda bir sohbet iletisinden kod kopyalamanın neden bu kadar güvenilmez bir alışkanlık olduğunu açıklar.
İki saatin anlaşması gerekir, birinin değil
Kayıt malzemesi ilk ortak şeydir ve zaman ikincisidir. Sır doğruyken saatler hoş görülen pencereden fazla farklıysa, üretilen her değer yanlış adıma düşer ve reddedilir. Saatler anlaşırken sır yanlışsa, her değer de reddedilir ve iki hata da oturum açma ekranından aynı görünür. Bunları ayırmak, hesap girdisini ve zamanı birbirinden bağımsız olarak, bu sırayla denetlemek anlamına gelir.
Doğrulayıcının saati de cihazın saati kadar incelemeye değerdir. Zaman kaynağı bozuk bir sunucu tüm kullanıcıların doğru kodlarını aynı anda reddeder ve raporlar kaymadan çok ani bir kesinti anlatacaktır. Bu örüntüyü tanımakta yarar var, çünkü düzeltmesi sunucuya aittir, yüz telefona değil.
Pencereyi genişletmenin bedeli
Uygulamalar küçük farkları yutmak için komşu adımdan gelen bir kodu kabul edebilir ve bu hoşgörü ücretsiz bir ayar değil, bir tasarım kararıdır. Her ek adım herhangi bir anda geçerli değerlerin sayısını çoğaltır ki bu tam olarak tahmin eden bir saldırganın tercih ettiği şeydir. Tekrar kuralı da aynı nedenle önemlidir, çünkü iki kez kabul edilen bir kod yararlı biçimde sızmış bir koddur. Şikayetleri susturmak için pencereyi genişleten yönetici gerçek bir özelliği kozmetik bir iyileştirmeyle değiş tokuş eder.
Saati düzeltmek onarımdır, pencereyi genişletmek ise yatıştırıcıdır. Birincisi nedeni ortadan kaldırır, ikincisi onu saklar.
Yeniden denemeden önce iki saati de denetleyin
Cihazdaki ve sunucudaki zamanı okuyun ve gösterilen yerel saatler yerine sapmaları karşılaştırın. Aşağıdaki komutlar bir Linux ana bilgisayarında veya sunucusunda eşitleme durumunu ve ham UTC anını gösterir. Herhangi bir kimlik doğrulama ayarını değiştirmeden önce bunları iki uçta da çalıştırın.
timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status
Saniyeyle ölçülen bir sapma zararsızdır, dakikayla ölçülen bir sapma reddi açıklar ve hiçbir eşitleme kaynağı bildirmeyen bir sistem her ikisi için adaydır. İki UTC zaman damgasını doğrudan karşılaştırın, çünkü yerel saat algoritmanın hiç görmediği bir saat dilimi içerir. Sapmalar küçükse ve kodlar hâlâ başarısız oluyorsa, saatleri ayarlamayı bırakın ve bunun yerine kayıt girdisini inceleyin. Kilitli bir hesaba karşı tekrarlanan denemeler asıl arızayı gözlemlemeyi zorlaştırır.
Reddedilme zamanını, sapmayı ve hata metnini kaydedin ve ortak sırrı bunun dışında tutun. Destek ilk üçüyle çalışabilir ve dördüncüsünü asla görmemelidir.