BMF-RKSV-Technik / at-registrierkassen-mustercode

111 stars 39 forks source link

Ein paar Fragen zur RKSV #582

Open Nilix5 opened 7 years ago

Nilix5 commented 7 years ago
  1. Sind die Ausgabe der Signatur Zertifikate und Zertifizierungsstellen im DEP nötig?

  2. Muss der Umsatzzähler auf 8 Byte verkürzt werden. 2.5.2 bei Kassa-4077 und 359,01 € AES "qSJHqBUexcps2CxwN0eidnHapWLeMiKwRdl7EI+ZFx8=" ehalte ich
    16 byte: j31OpBXJbLrcvIB76hY8Ug== 8 byte: j31OpBXJbLo= welchen verwende ich jetzt. Bei 16 byte kann ich decodieren bei 8 byte nicht.

  3. QR- Code ist es die komplette _R1-AT1_Kassa-4077_0000000001_2017-05-.... JWS ?

  4. 2.3 Aufbereiten der zu signierenden Daten _Sig-Voriger-Beleg kommt danach noch etwas? Mein:

    Startbeleg: __R1-AT1_Kassa-4077_0000000001_2017-05-01T14:57:00_0,00_0,00_0,00_0,00_0,00_j31OpBXJbLo=_487E89D8_oG++ssL2A8E=

    Folgebeleg: _R1-AT1_Kassa-4077_0000000002_2017-05- 01T14:57:00_120,00_110,01_0,00_10,00_119,00_slr6FqM89to=_487E89D8_eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMV9LYXNzYS00MDc3XzAwMDAwMDAwMDFfMjAxNy0wNS0wMVQxNDo1NzowMF8xMjAsMDBfMTEwLDAxXzAsMDBfMTAsMDBfMTE5LDAwX2ozMU9wQlhKYkxvPV80ODdFODlEOF9vRysrc3NMMkE4RT0.v8VUVho06ZmtdPhuxwDnPDhL46ApQrOlqGXmPu0eR_hzcyU0ngqjCGZvjjOqdLmr7RkuFbmtk6mLokVk3r58Dg

passt das?

Vielen Dank vorab

ErichFreitag commented 7 years ago
  1. nein, die Angaben sind optional

  2. nein, kann auch 16 bytes lang sein, Sollwert liegt typisch bei 5, 6 oder 8 Bytes

  3. Ja, was auch immer mit JWS gemeint ist

  4. Beim Startbeleg fehlt die Signatur. Folgebeleg passt nicht. Da kommt hinter der Seriennummer der Verkettungswert und darauf folgend die Signatur des Belegs.

Prüfen sie ihre Daten = QR-Codes und DEP-Export bitte mit den A-SIT-Tools, dann wird ihnen das auch gemeldet werden.

Nilix5 commented 7 years ago

Danke erst mal. Das mit der Signatur-Voriger-Beleg ist mit nicht klar.

Signatur-Voriger-Beleg = Hash aus "Kassa-4077" = "oG++ssL2A8E=" Woher nehme ich die Signatur die erhalte ich ja erst danach!

Ist das der header + Payload (_R1-AT1_Kassa-4077_0000000001) signiert?

ErichFreitag commented 7 years ago

Es ist keine Signatur des vorigen Belegs, sondern ein Hashwert über die kompakte Repräsentation des letzten Eintrags, siehe Prozess 2.4.2 im Dokument Detailfragen. Die Daten des vorigen Belegs haben sie ja zur Verfügung.

Die Signatur wird über alle Elemente des maschinenlesbaren Codes vor der Signatur gebildet - vom Reg.Alg.Kennzeichen "_R1..." bis inklusive Verkettungswert des letzten Belegs, siehe Prozess 2.3 und 3.1 im Dokument. Der Header ist derzeit ein fixer Wert. Die Payload entspricht den Daten aus Prozess 2.3. Angehängt wird das Ergebnis der Signaturerstellung.

Vielleicht hilft auch die folgende Grafik ein wenig. pqrst_rksv_datenmodell_signaturerstellung

Nilix5 commented 7 years ago

Leider nicht. Also wenn man ml den Start- Beleg anschaut.

//Signatur Vorbeleg Kassa-4077 -> Hash -> oG++ssL2A8E=

//Umsatzzähler verschlüsseln und base64 Ergibt: "j31OpBXJbLrcvIB76hY8Uw=="

//Beleg- Zeile zusammenbauen "_R1-AT1_Kassa-4077_0000000001_2017-05-01T16:38:00_120,00_110,00_0,00_10,00_119,00_j31OpBXJbLrcvIB76hY8Uw==_487E89D8_oG++ssL2A8E="

//zu signierender String toBeSignedStr (1. und 2. Teil) "eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMV9LYXNzYS00MDc3XzAwMDAwMDAwMDFfMjAxNy0wNS0wMVQxNjozODowMF8xMjAsMDBfMTEwLDAwXzAsMDBfMTAsMDBfMTE5LDAwX2ozMU9wQlhKYkxyY3ZJQjc2aFk4VXc9PV80ODdFODlEOF9vRysrc3NMMkE4RT0"

//Signieren und zu Base64 Ergibt: "zD7jyPWPkS0UZOgBD6a52XNVUPnNRxltrF5Vx5vFRzzvLRr3b72BWbI2v0TEu9nTxpwnl2HfdQNIsl-8YbJrDg"

//Zusammenfügen (1. 2. und 3. Teil) "eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMV9LYXNzYS00MDc3XzAwMDAwMDAwMDFfMjAxNy0wNS0wMVQxNjozODowMF8xMjAsMDBfMTEwLDAwXzAsMDBfMTAsMDBfMTE5LDAwX2ozMU9wQlhKYkxyY3ZJQjc2aFk4VXc9PV80ODdFODlEOF9vRysrc3NMMkE4RT0.zD7jyPWPkS0UZOgBD6a52XNVUPnNRxltrF5Vx5vFRzzvLRr3b72BWbI2v0TEu9nTxpwnl2HfdQNIsl-8YbJrDg"

Das muss eigentlich stimmen. da laut Detailfragen.

2.4.1 Verkettung beim Startbeleg Der Verkettungswert für den Startbeleg wird bei einer Kasse mit der Kassen-ID A12347 wie folgt berechnet:  Eingabewert für Hashalgorithmus: Die Kassen-ID – in diesem Fall A12347 ist im UTF8-Format gespeichert. Anwenden des Hashalgorithmus/Extraktion des Verkettungswerts: Die Kassen-ID A12347 ist der Eingabewert für den Hashalgorithmus SHA-256 (im Falle von RK1). Aus dem Ergebnis werden 8 Bytes/64 Bits extrahiert (im Falle von RK1).Kodierung des Verkettungswerts: Des extrahierte Wert wird BASE64-Kodiert. Dies entspricht in diesem Beispiel dem Wert OeSKQjO4zKI=, der im Feld Sig-Voriger-Beleg abgelegt wird.

ErichFreitag commented 7 years ago

Trennen sie bitte mal die Begriffe sauber. Signatur Vorbeleg ist etwas anderes.

Beim Startbeleg wird die Verkettung mit der Kassen-ID errechnet, siehe Prozess 2.4.1 wie geschrieben. Es wird ein Hashwert gebildet, keine Signatur und es gibt auch keinen Vorbeleg.

Wenn das der maschinenlesbare Code für den Startbeleg sein soll müssen dort die Umsätze 0 sein.

Signieren und zu Base64 sieht ungewohnt aus - das müssen im Ergebnis 88 Zeichen inklusive Padding-Characters sein.

Zusammenfügen ja, aber das ist nicht die Signatur, die in den maschinenlesbaren Code kommt.

Nilix5 commented 7 years ago

Das Feld heißt eben laut 2.1 Sig-Voriger-Beleg:

ErichFreitag commented 7 years ago

So gesehen ja - korrekt - entschuldigung.