myproductpassport ← Обратно към паспорта
Защитен от подправяне запис

Fernway FX-36 E-Bike Battery

Всяка публикувана версия на този паспорт получава отпечатък, свързва се с предходната версия и се подписва. Ако нещо в записа бъде променено впоследствие, отпечатъците по-долу вече няма да съвпадат.

Непроменен, откакто е записан · подписите са потвърдени
Текущ отпечатък (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Последно записано3 ное 2026, 16:52 UTC
Записани версии1
ПодписEd25519

История

  1. #1 · Публикуван Валиден подпис
    Отпечатък: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
    Верига: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d

Проверете сами

  1. Изтеглете записите като JSON и публичния ключ.
  2. За всеки запис стойността на веригата е SHA-256 на: името на схемата, идентификатора на паспорта, номера на записа, неговия отпечатък, предходната стойност на веригата и времето, по едно на ред.
  3. Проверете подписа 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")

Отпечатъкът обхваща целия запис, включително информацията с ограничен достъп и хеш на всеки прикачен документ, така че доказва, че записът не е променян, без да разкрива съдържанието му. Той показва, че паспортът не е променян, откакто е записан; не удостоверява, че информацията в него е вярна, за което отговорност носи икономическият оператор, който го е публикувал.