NK3 FIDO2 Modul und die Sicherheit und ein großes Fragezeichen

Bei Versuchen ist mir aufgefallen, das man die Pin Eingabe zwar nur 3 mal versuchen kann, aber nach einem:
nitropy fido2 reboot
hat man wieder 3 Versuche.
Sprich man kann per Script einfach so lange es versuchen, bis man den PIN erraten hat.
Hier wäre es deutlich besser, wenn nach der 2. Dreierrunde sich das Modul sperrt und nur via
nitropy fido2 reset
Wiederbeleben lässt, was zum Verlust der Schlüssel führt. (Oder kann man das konfigurieren? Und ich habe es nur übersehen)
Getestet mit FW 1.6.0

AFAIK sind es bei FIDO2 insgesamt 8 Versuche und nach jeweils 3 Versuchen muss man den Token einmal neu einstecken.

Komisch ich musst nix neu rein stecken.

Ein Reboot über nitropy genügt auch.

Ungenau damit hat man doch wieder unendlich viele Versuche, da man das 1a als Script laufen lassen kann.

Fehlversuche sollten trotzdem hochgezählt werden und nach 8 falschen Eingaben sollte FIDO2 blockiert sein. Nur durch einen Reset lässt sich der Token dann wieder verwenden, aber die FIDO2 Registrierungen sind dann alle gelöscht.

Leider nein :frowning:
Siehe meines Versuches:

nitropy fido2 reset
Command line tool to interact with Nitrokey devices 0.4.45
Reset is only possible 10secs after plugging in the device.
Please (re-)plug in your Nitrokey FIDO2 now!
Warning: Your credentials will be lost!!! continue? [(y)es/(n)o]: y
choosing: yes
Press key to confirm -- again, your credentials will be lost!!!
....aaaand they're gone
nitropy fido2 set-pin
Command line tool to interact with Nitrokey devices 0.4.45
Please enter new pin: 
Please confirm new pin: 
done - please use new pin to verify key
nitropy fido2 list-credentials
Command line tool to interact with Nitrokey devices 0.4.45
Please provide pin: 
There are no registered credentials
There is an estimated amount of 10 credential slots left
itropy fido2 make-credential --resident-key required
Command line tool to interact with Nitrokey devices 0.4.45
Enter PIN: 
Touch your authenticator device now...
a300582d48258b04af8e1693400ad1b49c37f4f33dbb11d83fa5c4fb4d1db2d3ff77410fb60cfac0ef48f2d31dcc240693014cf28b7984b9247aee014ea2bb02504c0f81bd96c7a6db0be4647b2f84886e
nitropy fido2 list-credentials
Command line tool to interact with Nitrokey devices 0.4.45
Please provide pin: 
There are 1 registered credentials
-----------------------------------
Example RP: 
- id: a300582d48258b04af8e1693400ad1b49c37f4f33dbb11d83fa5c4fb4d1db2d3ff77410fb60cfac0ef48f2d31dcc240693014cf28b7984b9247aee014ea2bb02504c0f81bd96c7a6db0be4647b2f84886e
  user: A. User
-----------------------------------
There is an estimated amount of 9 credential slots left
< Falsche PIN bis gesperrt>
nitropy fido2 list-credentials
Command line tool to interact with Nitrokey devices 0.4.45
Please provide pin: 
Critical error:
Pin authentication has been blocked, try reinserting the key or setting a pin if none is set
nitropy fido2 reboot
Command line tool to interact with Nitrokey devices 0.4.45
Reboot
Press key to confirm!
...done
nitropy fido2 list-credentials
Command line tool to interact with Nitrokey devices 0.4.45
Please provide pin: 
There are 1 registered credentials
-----------------------------------
Example RP: 
- id: a300582d48258b04af8e1693400ad1b49c37f4f33dbb11d83fa5c4fb4d1db2d3ff77410fb60cfac0ef48f2d31dcc240693014cf28b7984b9247aee014ea2bb02504c0f81bd96c7a6db0be4647b2f84886e
  user: A. User
-----------------------------------
There is an estimated amount of 9 credential slots left

D. h. falsche PINs wurden solange eingegeben, bis es geblockt wurde und das wurde nach Reboot des Devices 2 mal wiederholt, um mehr als 8 mal die falsche PIN einzugeben und um das Device endgültig zu sperren? Wenn ja, dann ist das in der Tat geeignet, um die PIN automatisiert zu bruteforcen! Das darf nicht sein.

@sosthene-nitrokey NK3 does not block FIDO2 app when entering wrong passwords and reboot via nitropy is executed. This would allow bruteforce of the PIN. I have no NK3 available that I could block right now for testing but via webauthn.io I already tested the blocking behavior of FIDO2 when using a wrong password. Did not verify using nitropy, though.

Ich habe es jetzt nur bis zur ersten Sperrung versucht. Ich testen es mal mit 2 reboots.
Zu mal, was mir aufgefallen ist bei der Meldung:

Command line tool to interact with Nitrokey devices 0.4.46
Reboot
Press key to confirm!
...done

Muss man gar keine Taste drücken.

Jups gerade noch mal versucht
3 mal falsche PIN → gesperrt → reboot → wieder 3 Versuche.
Auch nach dem 2. Reboot ging es wieder.

@tuxmaster5000 Eigentlich sollte es so funktionieren, wie @nku es beschrieben hat: Nach drei Fehlversuchen ist der Stick im Status PIN_AUTH_BLOCKED. Alle weiteren Versuche schlagen fehl bis zu einem Power Cycle (also neu einstecken oder Reboot via pynitrokey). Nach insgesamt acht Fehlversuchen ist der Stick im Status PIN_BLOCKED. Die PIN kann bis zu einem Reset nicht mehr verwendet werden.

Dein Beispiel zeigt diese Fehlermeldung:

Pin authentication has been blocked, try reinserting the key or setting a pin if none is set

Diese entspricht dem Status PIN_AUTH_BLOCKED, also der temporären Sperre. Bei der dauerhaften Sperre (PIN_BLOCKED) würde es stattdessen heißen:

Your device has been blocked after too many failed unlock attempts, to fix this it will have to be reset.

Also zusammengefasst solltest du folgendes Verhalten sehen:

    1. Fehlversuch – PIN invalid
    1. Fehlversuch – PIN invalid
    1. Fehlversuch – Pin authentication has been blocked
  • Reboot
    1. Fehlversuch – PIN invalid
    1. Fehlversuch – PIN invalid
    1. Fehlversuch – Pin authentication has been blocked
  • Reboot
    1. Fehlversuch – PIN invalid
    1. Fehlversuch – Your device has been blocked

Zu beachten ist, dass nach dem dritten Fehlversuch pro Boot keine PIN-Prüfung mehr durchgeführt wird und dementsprechend die Gesamtversuche nicht verringert werden. Das heißt, wenn du nach dem 3. oder 6. Fehlversuch weitere PIN-Versuche hast, werden diese nicht von den acht Versuchen insgesamt abgezogen.

Wenn das bei dir nicht funktioniert, schreibe mir bitte direkt unter robin@nitrokey.com, damit wir das Problem untersuchen und ggf. beheben können, bevor wir die Details veröffentlichen.

@robin-nitrokey Ich habe dich jetzt mal angeschrieben, damit wir hier nur das Ergebnis veröffentlichen müssen, da sich meiner anders zu verhalten scheint.

Danke!

Tatsächlich sieht es mit Firmware-Version 1.6.0 so aus, als hätte man 4 Versuche pro Boot, also insgesamt 2 * 4 + 2 = 10 Versuche, weil erst im vierten Versuch die Fehlermeldung „Pin authentication has been blocked“ angezeigt wird. Das liegt allerdings nur an einem falschen Fehlercode, der bereits behoben wurde und im nächsten Firmware-Release 1.7.0 korrigiert sein wird. Im vierten Versuch wird die PIN nicht mehr überprüft, sondern immer ein Fehler zurückgegeben. Der falsche Fehlercode hat also keine Auswirkung auf die Sicherheit. Man hat wirklich nur die drei Versuche pro Boot und acht Versuche insgesamt, wie oben beschrieben und von der FIDO-Spezifikation verlangt.

Dass beim Reboot keine Touch-Bestätigung erforderlich ist, ist normal. Die Ausgabe in pynitrokey rührt daher, dass der Befehl ursprünglich für den Nitrokey FIDO2 geschrieben wurde, bei dem das erforderlich war. Ich habe das als Issue notiert.