Manipulationssikker registrering
Fernway FX-36 E-Bike Battery
Hver offentliggjort version af dette pas får et fingeraftryk, knyttes til den foregående version og signeres. Hvis noget i registreringen blev ændret bagefter, ville fingeraftrykkene nedenfor ikke længere stemme.
Uændret, siden det blev registreret · signaturer verificeretNuværende fingeraftryk (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Historik
-
#1 · Publiceret Signatur gyldigFingeraftryk: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Kæde: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d
Tjek det selv
- Download registreringerne som JSON og den offentlige nøgle.
- For hver registrering er kædeværdien SHA-256 af: skemanavnet, pas-id'et, registreringsnummeret, dens fingeraftryk, den forrige kædeværdi og tidspunktet, én pr. linje.
- Kontrollér Ed25519-signaturen af kædeværdien mod den offentliggjorte nøgle. Hver registrering skal også angive kædeværdien for den foregående.
import json, hashlib, base64, urllib.request
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
doc = json.load(urllib.request.urlopen("https://myproductpassport.eu/p/3daf1fbb-004d-4881-8515-9571e900f3eb/integrity.json"))
keys = {k["key_id"]: k["public_key"] for k in json.load(urllib.request.urlopen("https://myproductpassport.eu/.well-known/mpp-integrity-keys.json"))["keys"]}
prev = None
for r in doc["records"]:
line = "\n".join([doc["schema"], doc["passport_uuid"], str(r["sequence"]), r["content_hash"], r["previous_hash"] or "", r["recorded_at"]])
assert hashlib.sha256(line.encode()).hexdigest() == r["chain_hash"] and r["previous_hash"] == prev
Ed25519PublicKey.from_public_bytes(base64.b64decode(keys[r["key_id"]])).verify(base64.b64decode(r["signature"]), r["chain_hash"].encode())
prev = r["chain_hash"]
print("verified", len(doc["records"]), "records")
Fingeraftrykket dækker hele registreringen, inklusive begrænsede oplysninger og en hash af hvert vedhæftet dokument, så det beviser, at registreringen ikke er ændret, uden at afsløre, hvad den indeholder. Det viser, at passet ikke er ændret, siden det blev registreret; det bekræfter ikke, at oplysningerne i det er korrekte, hvilket fortsat påhviler den erhvervsdrivende, der offentliggjorde det.