Google Authenticator auf Apple-Geräten, bestimmte Geheimnisse sind ungültigC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Google Authenticator auf Apple-Geräten, bestimmte Geheimnisse sind ungültig

Post by Anonymous »

Wir haben die Zwei-Faktor-Authentifizierung mithilfe von Google Authenticator in eine unserer Anwendungen integriert. Bei der Qualitätssicherung ist etwas wirklich Seltsames aufgetaucht. Obwohl es mir gelungen ist, das Problem zu beheben, bin ich mir nicht wirklich sicher, warum das Update funktioniert.

Für unser gemeinsames Geheimnis haben wir eine GUID zugewiesen dem Benutzer, wenn er mit der TFA-Einrichtung beginnt. Die GUID wird Base-32-kodiert und in die URL eingefügt, die in einen QR-Code umgewandelt und vom Benutzer mit seinem Telefon gescannt wird:

otpauth://totp/myapp_user?secret=g5swmnddhbtggllbgi3dsljumi3tallbmuytgljtg5sdgnbxmy2dgyjwmy======


Und alles funktioniert gut auf allen Nicht-iOS-Geräten, die wir ausprobiert haben. Allein unter iOS wird beim Versuch, den Barcode zu scannen, meistens ein wirklich seltsamer Fehler ausgegeben:

Invalid barcode

The barcode '[same as above]' is not a valid authentication token barcode.


Es erfüllt die Mindestgeheimnisanforderung von Google/RFC 4226 (128 Bit), ist ordnungsgemäß Base32-codiert usw. Warum schlägt es fehl? Der typische Grund für diese Meldung sind Leerzeichen in der URL – aber es gibt keine.

Wenn ich am Anfang der Guid einen kleinen Startwert hinzufüge, funktioniert alles einwandfrei:

otpauth://totp/myapp_user?secret=nfygq33omvzxky3lom3ggmzyha2tgnjnmu4gezbngqzdgyrnhbtdqzrnmeywimrwmjsgknzymi3a


Im Wesentlichen ist es der Unterschied zwischen:

secret = enc.Encode32(Encoding.ASCII.GetBytes("iphonesucks" + Guid.NewGuid().ToString())); // Works

secret = enc.Encode(Encoding.ASCII.GetBytes(Guid.NewGuid().ToString())); // Fails

newAuthUrl = string.Format("otpauth://totp/myapp_user?secret={0}", secret);


Ich habe zwei verrückte Theorien, warum das möglicherweise funktioniert haben könnte:
  • < li>Der iOS-Port erfordert mehr als 128 Bit. Mein Kommentar/Seed reicht aus, um diese Grenze zu überschreiten, was auch immer das sein mag ... außer dass ich ihm tatsächlich mehr als 128 Bit gegeben habe, da es eine Guid-as-String war.
  • Nach der Base32-Dekodierung erkennt die iOS-App die geheime Zeichenfolge als Guid und macht etwas anderes damit.
Ich hasse es, einen Fehler zu beheben und nicht Ich weiß, warum das Update funktioniert hat. Kann mir das jemand erklären? Weitere Verschwörungstheorien zu diesem Thema sind ebenfalls willkommen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post