gematik / E-Rezept-App-Android

The official Android App of the german e-prescription
Other
71 stars 13 forks source link

PACE channel Aufbau in 0,7% der Versuche fehlerhaft #30

Open pke opened 3 weeks ago

pke commented 3 weeks ago

Ich habe feststellt, dass es mit ReinerSCT Komfort und Basic NFC Readern immer mal wieder zu PACE Fehlern kommt wo General Authenticate mit TagNo 5 mit 0x6300 Authentication failure quittiert wird.

Daraufhin habe ich eine Test Suite geschrieben, die genau 1000 Durchläufe mit PACE init macht und danach die Karte jeweils zurücksetzt. In 6-8 Fällen kommt es dabei zu Fehlern. Dabei spielt es keine Rolle, ob Testkarten oder echte Karten benutzt werden (wobei echte Karten deutlich langsamer sind: 0.4sec vs 1,5sec).

Sind solche Instabilitäten im Protokoll bekannt und ihm Rahmen des zu erwartbaren? Oder handelt es sich möglicherweise um einen subtilen Bug in der Referenzimplementierung?

pke commented 3 weeks ago

Wir haben den Fehler indentifiziert. Die Umwandlung eine BigInteger zu ByteArray ist fehlerhaft, für BigIntegers deren Binärrepresentation weniger Bytes benötigt, als die Kurvengröße in Bytes. Im Fall von brainpool256 müsste das Array immer 32 bytes gross sein. Es war aber stellenweise nur 31 bytes gross.

https://github.com/gematik/E-Rezept-App-Android/blob/29ee48c86fc3e7086e4a518ff0a64b46f14401d7/desktop/src/jvmMain/kotlin/de/gematik/ti/erp/app/utils/Bytes.kt#L60

Es muss also sichergestellt sein, dass das Array immer die korrekte Größe hat und ggfs in den low bits mit 0 bytes aufgefüllt werden.

Wir erstellen einen PR.