Closed anzun closed 8 years ago
Hmm, kann ich so leider nicht sagen, weil entweder der Hash-Wert stimmt oder nicht.
Beim ersten Beleg stimmt es, d.h. sie verwenden wohl den HASH Algorithmus korrekt. Danach nicht mehr: Was ist denn der Input für den Hash-Algorithmus der weiteren Belege? Das muss die JWS-Repräsentation des vorigen Belegs sein (also eigentlich direkt der letzte Beleg der im DEP steht). Haben Sie das so oder ein Code Snippet das zeigt wie sie den Hash berechnen?
Gerne.
// Von: e-commerce monitoring <hans.zeger@e-monitoring.at>
// Datum: 11. März 2016 um 14:03
// Betreff: Registrierkassenalgorithmuskennzeichen gemäß RKSV
// Die Kennung für die RKS-CARD lautet AT2, der entsprechende String daher:
// R1-AT2
// Mit besten Grüßen
// Hans G. Zeger, GF
rka = "R1-AT2";
/// <summary>
/// derzeit ist die einzige relevante RK-Suite "R1" mit ES256, SHA-256
/// und der JWSHeaderBase64Url = eyJhbGciOiJFUzI1NiJ9 dieser Base64-String entspricht {"alg":"ES256"}
/// Folgende Parameter haengen vom AES Schluessel (Algorithmus) ab
/// Anlage Seite 11 (2)
/// Sobald ein in den Registrierkassenalgorithmuskennzeichen verwendeter Algorithmus nicht mehr
/// im Anhang der SigV 2008 genannt wird und daher als unsicher gilt,
/// muss ein neues Registrierkassenalgorithmuskennzeichen mit sicheren Algorithmus definiert werden
/// und darf dieses auch bei bestehenden Registrierkassen nicht mehr eingesetzt werden...
/// </summary>
numberOfBytesExtractedFromPrevSigHash = 8;
jwsSignatureAlgorithm = "ES256";
aesKeySizeInBits = 256;
keyStrengthInBytes = 32; // aesKeySizeInBits / 8 = Key Size: 32 Byte
ivLengthInBytes = 16;
hashAlgorithmForPreviousSignatureValue = "SHA-256";
jwsHeaderBase64Url = "eyJhbGciOiJFUzI1NiJ9"; // = "eyJhbGciOiJFUzI1NiJ9" Base64-String entspricht {"alg":"ES256"}
this.MachineCodeRepOfReceipt = "_" + rka
+ "_" + this.CashRegisterId
+ "_" + this.ReceiptNumber
+ "_" + this.ReceiptDateTime
+ "_" + strBetragSatzNormal
+ "_" + strBetragSatzErmaessigt1
+ "_" + strBetragSatzErmaessigt2
+ "_" + strBetragSatzNull
+ "_" + strBetragSatzBesonders
+ "_" + this.TurnoverCounterBase64Encrypted
+ "_" + this.SerialnumberCertificate
+ "_" + this.SignatureExtractedSigPrev
;
string strJWSPayloadBase64Url = RksvHelper.Base64UrlEncode(Encoding.UTF8.GetBytes(this.MachineCodeRepOfReceipt));
string strJWSDataToBeSigned = jwsHeaderBase64Url + "." + strJWSPayloadBase64Url;
byte[] utf8DataToSign = Encoding.UTF8.GetBytes(strJWSDataToBeSigned);
this.SignatureBase64Url = RksvHelper.Base64UrlEncode(this.Signature);
this.JwsCompact = jwsHeaderBase64Url + "." + strJWSPayloadBase64Url + "." + this.SignatureBase64Url;
byte[] byteArrayHashedJwsCompact = mySHA256.ComputeHash(Encoding.UTF8.GetBytes(this.JwsCompact));
this.SignatureExtractedForNextSigPrev = extractBytesToBase64String(byteArrayHashedJwsCompact, numberOfBytesExtractedFromPrevSigHash);
Das Problem haben wir gehabt wie wir den falschen (nicht den vorigen) Beleg zum Verketten geladen haben. Laden Sie SignatureExtractedForNextSigPrev tatsächlich von dem Beleg davor? (Außer beim ersten.)
Ja, genau
so sieht mein TestCode aus: myReceipt2RksvSignature.SignatureExtractedSigPrev = myStartReceiptRksvSignature.SignatureExtractedForNextSigPrev;
Dann weiß ich leider auch nicht weiter. Aber wenn nur der 1. Beleg keine Fehlermeldung verursacht geht wahrscheinlich bei der Verkettung etwas schief. (Laden von SignatureExtractedForNextSigPrev, Laden von myStartReceiptRksvSignature (muss ja immer auf den vorigen Beleg zeigen), Reihenfolge beim Export,...)
Ja, ich habe den Test absichtlich sehr einfach gehalten: ich lasse alle Belege im Speicher und kann direkt auf die SignatureExtractedForNextSigPrev zugreifen. Auch die Reihenfolge ist dadurch absolut sichergestellt...
Daher meine Frage - kann ich mehr als nur "Gültigkeit der kryptographischen Kette": FEHLERHAFT zurückerhalten....
Wobei ich nicht ausschließen möchte, dass sich beim Umbau von Version 0.5 auf Version 0.6 (in Bezug auf Prüftool) in meiner Applikation ein Fehler eingeschlichen hat...
Ich hab jetzt ihren 2. Beleg dekodiert: Beleg: "eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMl80NTZfMl8yMDE2LTAzLTE4VDEzOjUxOjE0XzEsMDBfMjAwLDAwXzMwMDAsMDBfNTAwMDAwMCwwMF80MDAwMCwwMF9EckJyNGdaWXNkcHFKV0ZCK2k3bitBPT1fMDEwNEE3M0Q0NTU3RkNFMDI2MTIwQUMzNTZfNmJDVTVuU1JJZVg0U0d3K0xiZ3JoQT09.D0_nhmsMqR5asEFFQyvWEqTfEtOOibBCMZbmTqHbyHkp695LvHlp3skpoiNnToKnGW_LwCZzG_WgQPnySn1CFg",
Dekodierter Plaintext (das 2.Element): _R1-AT2_456_2_2016-03-18T13:51:14_1,00_200,00_3000,00_5000000,00_40000,00_DrBr4gZYsdpqJWFB+i7n+A==_0104A73D4557FCE026120AC356_6bCU5nSRIeX4SGw+LbgrhA==
Der Verkettungswert ist hier 6bCU5nSRIeX4SGw+LbgrhA==, der ist viel zu lange... da sollten ja nur die 8 bytes stehen.
Danke für den Hinweis.
ivLengthInBytes anstelle numberOfBytesExtractedFromPrevSigHash verwendet ... daher!
DANKE!
------------------Ergebnisse------------------
Verifikationsmodul: at.asitplus.regkassen.verification.core.verification.verificationmodules.DEPExportFormatVerificationModule
-----------Detailresultate fuer Paket-------------------
DEP Export Format Überprüfung
ÜBERPRÜFUNG: "DEP Export Format": ERFOLGREICH
++++++++++++++++++++++++++++++
-----------Detailresultate fuer Paket-------------------
Überprüfung von DEP-Export-Beleg-Gruppe 1
ÜBERPRÜFUNG: "Überprüfung ob Kassen-ID und Belegnummer einmalig": ERFOLGREICH
++++++++++++++++++++++++++++++
-----------Detailresultate fuer Paket-------------------
Überprüfung für Beleg 1
ÜBERPRÜFUNG: "Format: Anzahl Elemente": ERFOLGREICH
ÜBERPRÜFUNG: "Format: RK-Suite": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Datum/Uhrzeit Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Normal": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt1": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt2": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Besonders": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Null": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Normale Buchung": Es handelt sich um eine normale Buchung (keine Trainingsbuchung). (INFORMATION)
ÜBERPRÜFUNG: "Signatur kryptographisch": ERFOLGREICH
ÜBERPRÜFUNG: "Gültigkeit der kryptographischen Kette": ERFOLGREICH
ÜBERPRÜFUNG: "Verschlüsselter Umsatzzähler": ERFOLGREICH
++++++++++++++++++++++++++++++
-----------Detailresultate fuer Paket-------------------
Überprüfung für Beleg 2
ÜBERPRÜFUNG: "Format: Anzahl Elemente": ERFOLGREICH
ÜBERPRÜFUNG: "Format: RK-Suite": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Datum/Uhrzeit Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Normal": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt1": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt2": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Besonders": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Null": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Normale Buchung": Es handelt sich um eine normale Buchung (keine Trainingsbuchung). (INFORMATION)
ÜBERPRÜFUNG: "Signatur kryptographisch": ERFOLGREICH
ÜBERPRÜFUNG: "Gültigkeit der kryptographischen Kette": ERFOLGREICH
ÜBERPRÜFUNG: "Verschlüsselter Umsatzzähler": ERFOLGREICH
++++++++++++++++++++++++++++++
-----------Detailresultate fuer Paket-------------------
Überprüfung für Beleg 3
ÜBERPRÜFUNG: "Format: Anzahl Elemente": ERFOLGREICH
ÜBERPRÜFUNG: "Format: RK-Suite": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Datum/Uhrzeit Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Normal": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt1": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt2": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Besonders": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Null": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Normale Buchung": Es handelt sich um eine Stornobuchung (keine Trainingsbuchung). (INFORMATION)
ÜBERPRÜFUNG: "Signatur kryptographisch": ERFOLGREICH
ÜBERPRÜFUNG: "Gültigkeit der kryptographischen Kette": ERFOLGREICH
ÜBERPRÜFUNG: "Verschlüsselter Umsatzzähler": ERFOLGREICH
++++++++++++++++++++++++++++++
-----------Detailresultate fuer Paket-------------------
Überprüfung für Beleg 4
ÜBERPRÜFUNG: "Format: Anzahl Elemente": ERFOLGREICH
ÜBERPRÜFUNG: "Format: RK-Suite": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Datum/Uhrzeit Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Normal": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt1": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt2": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Besonders": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Null": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Normale Buchung": Es handelt sich um eine Trainingsbuchung. (INFORMATION)
ÜBERPRÜFUNG: "Signatur kryptographisch": ERFOLGREICH
ÜBERPRÜFUNG: "Gültigkeit der kryptographischen Kette": ERFOLGREICH
ÜBERPRÜFUNG: "Verschlüsselter Umsatzzähler": ERFOLGREICH
++++++++++++++++++++++++++++++
-----------Detailresultate fuer Paket-------------------
Überprüfung für Beleg 5
ÜBERPRÜFUNG: "Format: Anzahl Elemente": ERFOLGREICH
ÜBERPRÜFUNG: "Format: RK-Suite": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Datum/Uhrzeit Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Normal": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt1": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Ermaessigt2": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Besonders": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Satz-Null": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Zeichen - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Umsatzzähler": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Signatur": ERFOLGREICH
ÜBERPRÜFUNG: "Format: Base64 Dekodierung/Kodierung - Verkettung voriger Beleg": ERFOLGREICH
ÜBERPRÜFUNG: "Normale Buchung": Es handelt sich um eine normale Buchung (keine Trainingsbuchung). (INFORMATION)
ÜBERPRÜFUNG: "Signatur kryptographisch": ERFOLGREICH
ÜBERPRÜFUNG: "Gültigkeit der kryptographischen Kette": ERFOLGREICH
ÜBERPRÜFUNG: "Verschlüsselter Umsatzzähler": ERFOLGREICH
++++++++++++++++++++++++++++++
gerne, perfekt wenn es jetzt funktioniert!
Sehr geehrter Herr Teufl,
leider habe ich ein Problem beim Überprüfen der kryptographischen Kette, das ich nicht näher untersuchen kann....
test.zip
Können Sie mir hier weiterhelfen?