myproductpassport ← Volver al pasaporte
Registro a prueba de manipulaciones

Fernway FX-36 E-Bike Battery

Cada versión publicada de este pasaporte recibe una huella digital, se vincula a la versión anterior y se firma. Si posteriormente se modificara algo en el registro, las huellas digitales siguientes dejarían de coincidir.

Sin modificaciones desde su registro · firmas verificadas
Huella digital actual (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Último registro3 nov. 2026, 16:52 UTC
Versiones registradas1
FirmaEd25519

Historial

  1. #1 · Publicado Firma válida
    Huella digital: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
    Cadena: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d

Compruébelo usted mismo

  1. Descargue los registros en JSON y la clave pública.
  2. Para cada registro, el valor de cadena es el SHA-256 de: el nombre del esquema, el ID del pasaporte, el número de registro, su huella digital, el valor de cadena anterior y la hora, uno por línea.
  3. Compruebe la firma Ed25519 del valor de cadena con la clave publicada. Cada registro debe indicar también el valor de cadena del registro anterior.
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")

La huella digital abarca todo el registro, incluida la información restringida y un hash de cada documento adjunto, por lo que demuestra que el registro no ha cambiado sin revelar su contenido. Muestra que el pasaporte no se ha modificado desde que se registró; no certifica que la información que contiene sea correcta, lo cual sigue siendo responsabilidad del operador económico que lo publicó.