Entropie-Seed mit fabrikneuer Smartcard schlägt fehl

Fehlerbeschreibung

Für kryptographische Verfahren und Protokolle werden Zufallszahlen benötigt. Diese werden dem System von Zufallszahlengeneratoren (engl.: Random Number Generators, RNG) bereitgestellt. Auch Smartcards, wie sie in genua Appliances zum Einsatz kommen, haben einen RNG. Das Betriebssystem kann mit diesem interagieren und so zufällige Bytes auslesen. Beim Starten der Appliances werden Rauschquellen verwendet um einen Vorrat an Zufallszahlen zu erstellen. Dies wird im Startvorgang der Appliances als "Warten auf Entropie" (engl.: waiting for system entropy sources) dargestellt. Der vom Hauptsystem unabhängige RNG der Smartcard kann diesen Vorgang robuster machen. Die meisten Appliances starten erst, wenn ausreichend Entropie vorhanden ist.

Im laufenden Betrieb werden außerdem periodisch zufällige Bytes von der Smartcard ausgelesen um die Qualität der Zufallszahlen zu erhöhen.

Wenn von einer fabrikneuen Smartcard zufällige Bytes ausgelesen werden, kommt es zu einem Fehler. Die auf den Appliances eingesetzten Programme zum Auslesen der zufälligen Bytes unterdrücken im Regelbetrieb diese Fehlermeldungen. Die Betroffenheit der Appliances lässt sich durch manuelles Auslesen von zufälligen Bytes wie folgt überprüfen:

genuscreen#  cardosctl -r 1
smartcard-cmd: executing "/usr/libexec/cardosctl-locked -r 1"
smartcard-cmd-locked: executing "/usr/libexec/cardosctl-locked"
cardosctl-locked: sc_get_challenge: Unsupported INS byte in APDU

Wird die im Beispiel in der letzten Zeile gezeigte Fehlermeldung generiert, dann ist das System betroffen und die Smartcard muss über den unter Workaround beschriebenen Weg formatiert werden.

Wenn jedoch eine zufällige Zahl ausgegeben wird, arbeitet tie Appliance wie gewünscht und ist daher nicht betroffen. Ein positives Beispiel wird am Ende des Abschnitts Workaround gegeben.

Betroffenheit

Betroffen sind im Allgemeinen die Appliances genuscreen, genubox, genucrypt und genucenter, welche den RNG der Smartcards zum Auslesen von zufälligen Bytes benutzen, wenn diese noch nicht initialisiert wurden.

Im Speziellen betroffen sind genuscreens im VPN-Kontext, welche als oder mit Keyserver verwendet werden. In diesen Szenarien werden nur in seltenen Fällen bereits initialisierte Smartcards verwendet.

Appliances welche allerdings die Smartcards selbst im VPN-Kontext einsetzen sind nicht betroffen. Durch das Prägen der Smartcard wird diese bereits komplett und vollständig initialisiert.

Appliances bei denen keine Smartcards eingesetzt werden sind generell nicht betroffen. Dies trifft zum Beispiel auf übliche genubox Setups zu.

Workaround

Bevor eine fabrikneue Smartcard in den Appliances eingesetzt wird, sollte diese formatiert werden. Dieser Schritt kann direkt in der Appliance selbst und im laufenden Betrieb durchgeführt werden. Die Smartcards können jedoch auch in einer (anderen) Appliance vorbereitet werden und anschließend auf die Systeme verteilt werden. Dieses Vorgehen ist empfehlenswert, wenn auch genuscreens, welche als Keyserver eingesetzt werden, bestückt werden sollen.

Vorgehen:

  • Die Smartcard wird in die Appliance eingelegt. Optional kann nun die Seriennummer (mit dem Parameter "-s") oder alle Informationen der Smartcard (mit dem Parameter "-i") ausgelesen werden: 

         genuscreen# cardosctl -s

    Mit diesem Befehl kann geprüft werden, ob die Smartcard korrekt erkannt wurde.

  • Die Smartcard muss nun in den Administrationsmodus geschaltet werden: 

         genuscreen# cardosctl -a
  • Nun kann die Smartcard formatiert werden: 

         genuscreen# cardosctl -f
  • Anschließend sollte das Service Pack installiert werden: 

         genuscreen# cardosctl -p
  • Die erfolgreiche Installation der Service Packs wird wie folgt ausgegeben:

         genuscreen# cardosctl -i     [...]    service package: MID 0x03 PID 0x13 0x02 0xc9 0x03 enabled
  • Anschließend können zufällige Bytes von der Smartcard ausgelesen werden. Dieses Beispiel zeigt auch die entsprechende Ausgabe: 

         genuscreen# cardosctl -r 1     smartcard-cmd: executing "/usr/libexec/cardosctl-locked -r 1"    smartcard-cmd-locked: executing "/usr/libexec/cardosctl-locked"     af 

    In der letzten Zeile werden die zufälligen Bytes (im Beispiel nur eines) ausgegeben.

  • Die Smartcard ist nun betriebsfertig.

Lösung

Eine Anpassung des Standardverhaltens wird derzeit geprüft.

Letzte Aktualisierung

17.11.2023

Erstellungsdatum

27.10.2023

Kategorie

Known Issues

Produkt

genucenter genuscreen

Zugriff

Öffentlich