Záznam chránený pred manipuláciou
Fernway FX-36 E-Bike Battery
Každá zverejnená verzia tohto pasu má odtlačok, je prepojená s predchádzajúcou verziou a podpísaná. Ak by sa v zázname dodatočne čokoľvek zmenilo, nižšie uvedené odtlačky by už nesúhlasili.
Nezmenené od zaznamenania · podpisy overenéAktuálny odtlačok (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
História
-
#1 · Publikované Platný podpisOdtlačok: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Reťazec: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d
Overte si to sami
- Stiahnite si záznamy vo formáte JSON a verejný kľúč.
- Pre každý záznam je hodnota reťazca SHA-256 z týchto údajov, každý na samostatnom riadku: názov schémy, ID pasu, číslo záznamu, jeho odtlačok, predchádzajúca hodnota reťazca a čas.
- Overte podpis Ed25519 hodnoty reťazca pomocou zverejneného kľúča. Každý záznam musí zároveň uvádzať hodnotu reťazca predchádzajúceho záznamu.
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")
Odtlačok pokrýva celý záznam vrátane informácií s obmedzeným prístupom a hašu každého priloženého dokumentu, takže dokazuje, že sa záznam nezmenil, bez toho, aby odhalil jeho obsah. Ukazuje, že pas nebol od zaznamenania zmenený; nepotvrdzuje však, že informácie v ňom sú správne, za čo naďalej zodpovedá hospodársky subjekt, ktorý ho zverejnil.