myproductpassport ← Powrót do paszportu
Rekord z wykrywaniem manipulacji

Fernway FX-36 E-Bike Battery

Każda opublikowana wersja tego paszportu otrzymuje odcisk cyfrowy, jest powiązana z wersją poprzednią i podpisana. Gdyby cokolwiek w rekordzie zmieniono później, poniższe odciski cyfrowe przestałyby się zgadzać.

Bez zmian od zarejestrowania · podpisy zweryfikowane
Bieżący odcisk cyfrowy (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Ostatnio zarejestrowano3 lis 2026, 16:52 UTC
Zarejestrowane wersje1
PodpisEd25519

Historia

  1. #1 · Opublikowany Prawidłowy podpis
    Odcisk cyfrowy: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
    Łańcuch: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d

Sprawdź samodzielnie

  1. Pobierz rekordy w formacie JSON oraz klucz publiczny.
  2. Dla każdego rekordu wartość łańcucha to SHA-256 z: nazwy schematu, ID paszportu, numeru rekordu, jego odcisku cyfrowego, poprzedniej wartości łańcucha i czasu, każde w osobnym wierszu.
  3. Sprawdź podpis Ed25519 wartości łańcucha za pomocą opublikowanego klucza. Każdy rekord musi też wskazywać wartość łańcucha rekordu poprzedniego.
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")

Odcisk cyfrowy obejmuje cały rekord, w tym informacje zastrzeżone oraz skrót każdego załączonego dokumentu, dzięki czemu dowodzi, że rekord się nie zmienił, nie ujawniając jego treści. Pokazuje, że paszport nie został zmieniony od chwili zarejestrowania; nie poświadcza, że zawarte w nim informacje są prawidłowe, za co nadal odpowiada podmiot gospodarczy, który go opublikował.