Manipuleringsindikerande post
Fernway FX-36 E-Bike Battery
Varje publicerad version av det här passet får ett fingeravtryck, länkas till versionen före och signeras. Om något i posten ändrades i efterhand skulle fingeravtrycken nedan inte längre stämma.
Oförändrad sedan registreringen · signaturer verifieradeAktuellt fingeravtryck (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Historik
-
#1 · Publicerat Giltig signaturFingeravtryck: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Kedja: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d
Kontrollera själv
- Ladda ner posterna som JSON och den publika nyckeln.
- För varje post är kedjevärdet SHA-256 av: schemanamnet, pass-ID:t, postnumret, dess fingeravtryck, föregående kedjevärde och tidpunkten, en per rad.
- Kontrollera Ed25519-signaturen för kedjevärdet mot den publicerade nyckeln. Varje post måste också ange kedjevärdet för posten före den.
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")
Fingeravtrycket omfattar hela posten, inklusive information med begränsad åtkomst och en hash av varje bifogat dokument, så det bevisar att posten inte har ändrats utan att avslöja vad den innehåller. Det visar att passet inte har ändrats sedan det registrerades; det intygar inte att informationen i det är korrekt, vilket förblir ett ansvar för den ekonomiska aktör som publicerade det.