Защитен от подправяне запис
Fernway FX-36 E-Bike Battery
Всяка публикувана версия на този паспорт получава отпечатък, свързва се с предходната версия и се подписва. Ако нещо в записа бъде променено впоследствие, отпечатъците по-долу вече няма да съвпадат.
Непроменен, откакто е записан · подписите са потвърдениТекущ отпечатък (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
История
-
#1 · Публикуван Валиден подписОтпечатък: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Верига: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d
Проверете сами
- Изтеглете записите като JSON и публичния ключ.
- За всеки запис стойността на веригата е SHA-256 на: името на схемата, идентификатора на паспорта, номера на записа, неговия отпечатък, предходната стойност на веригата и времето, по едно на ред.
- Проверете подписа Ed25519 на стойността на веригата спрямо публикувания ключ. Всеки запис трябва също да посочва стойността на веригата на предходния.
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")
Отпечатъкът обхваща целия запис, включително информацията с ограничен достъп и хеш на всеки прикачен документ, така че доказва, че записът не е променян, без да разкрива съдържанието му. Той показва, че паспортът не е променян, откакто е записан; не удостоверява, че информацията в него е вярна, за което отговорност носи икономическият оператор, който го е публикувал.