myproductpassport ← Zurück zum Pass
Manipulationssicherer Eintrag

Fernway FX-36 E-Bike Battery

Jede veröffentlichte Version dieses Passes erhält einen Fingerabdruck, wird mit der vorherigen Version verknüpft und signiert. Würde nachträglich etwas im Eintrag geändert, stimmten die Fingerabdrücke unten nicht mehr überein.

Seit der Erfassung unverändert · Signaturen verifiziert
Aktueller Fingerabdruck (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Zuletzt erfasst3 Nov 2026, 16:52 UTC
Erfasste Versionen1
SignaturEd25519

Verlauf

  1. #1 · Veröffentlicht Signatur gültig
    Fingerabdruck: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
    Kette: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d

Selbst prüfen

  1. Laden Sie die Einträge als JSON und den öffentlichen Schlüssel herunter.
  2. Für jeden Eintrag ist der Kettenwert der SHA-256-Hash aus: Schemaname, Pass-ID, Eintragsnummer, Fingerabdruck, vorherigem Kettenwert und Zeitpunkt, jeweils in einer eigenen Zeile.
  3. Prüfen Sie die Ed25519-Signatur des Kettenwerts mit dem veröffentlichten Schlüssel. Jeder Eintrag muss außerdem den Kettenwert des vorherigen Eintrags angeben.
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")

Der Fingerabdruck umfasst den gesamten Eintrag, einschließlich eingeschränkter Informationen und eines Hashs jedes angehängten Dokuments. So belegt er, dass sich der Eintrag nicht verändert hat, ohne dessen Inhalt offenzulegen. Er zeigt, dass der Pass seit der Erfassung nicht verändert wurde; er bestätigt nicht, dass die darin enthaltenen Informationen korrekt sind. Dafür bleibt der Wirtschaftsakteur verantwortlich, der ihn veröffentlicht hat.