Registrazione a prova di manomissione
Fernway FX-36 E-Bike Battery
Ogni versione pubblicata di questo passaporto riceve un’impronta, viene collegata alla versione precedente e firmata. Se qualcosa nella registrazione venisse modificato in seguito, le impronte qui sotto non corrisponderebbero più.
Inalterato da quando è stato registrato · firme verificateImpronta attuale (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Cronologia
-
#1 · Pubblicato Firma validaImpronta: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Catena: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d
Lo verifichi Lei stesso
- Scarichi le registrazioni in JSON e la chiave pubblica.
- Per ogni registrazione, il valore di catena è lo SHA-256 di: nome dello schema, ID del passaporto, numero della registrazione, relativa impronta, valore di catena precedente e ora, uno per riga.
- Verifichi la firma Ed25519 del valore di catena con la chiave pubblicata. Ogni registrazione deve inoltre indicare il valore di catena di quella precedente.
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")
L’impronta copre l’intera registrazione, incluse le informazioni riservate e un hash di ogni documento allegato, quindi dimostra che la registrazione non è cambiata senza rivelarne il contenuto. Mostra che il passaporto non è stato alterato da quando è stato registrato; non certifica che le informazioni contenute siano corrette, responsabilità che resta dell’operatore economico che lo ha pubblicato.