myproductpassport ← Terug naar het paspoort
Vastlegging met manipulatiedetectie

Fernway FX-36 E-Bike Battery

Elke gepubliceerde versie van dit paspoort krijgt een vingerafdruk, wordt gekoppeld aan de vorige versie en wordt ondertekend. Als achteraf iets in de vastlegging zou worden gewijzigd, zouden de vingerafdrukken hieronder niet meer overeenkomen.

Ongewijzigd sinds de vastlegging · handtekeningen geverifieerd
Huidige vingerafdruk (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Laatst vastgelegd3 nov. 2026, 16:52 UTC
Vastgelegde versies1
HandtekeningEd25519

Geschiedenis

  1. #1 · Gepubliceerd Handtekening geldig
    Vingerafdruk: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
    Keten: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d

Controleer het zelf

  1. Download de vastleggingen als JSON en de openbare sleutel.
  2. Voor elke vastlegging is de ketenwaarde de SHA-256 van: de schemanaam, de paspoort-ID, het vastleggingsnummer, de vingerafdruk, de vorige ketenwaarde en het tijdstip, elk op een eigen regel.
  3. Controleer de Ed25519-handtekening van de ketenwaarde met de gepubliceerde sleutel. Elke vastlegging moet ook de ketenwaarde van de vorige vermelden.
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")

De vingerafdruk omvat de volledige vastlegging, inclusief afgeschermde informatie en een hash van elk bijgevoegd document. Zo bewijst hij dat de vastlegging niet is gewijzigd, zonder de inhoud prijs te geven. Hij toont aan dat het paspoort sinds de vastlegging niet is aangepast; hij bevestigt niet dat de informatie erin juist is. Daarvoor blijft de marktdeelnemer die het heeft gepubliceerd verantwoordelijk.