Kvitteringer for Puls

Hver gang Puls regnes, skrives én kvittering. Den kan ikke endres, og den gjør at du kan sjekke at tallene på siden er de som ble regnet.

Slik henger det sammen

  1. Maskinen som regner, signerer. Når tallene er regnet, lages en signatur av tallfila. Signaturen kan bare lages av den maskinen, men sjekkes av alle med kontrollnøkkelen under.
  2. Nettsiden sjekker før den viser. Tjeneren som leverer tallene til Puls sjekker signaturen hver gang. Holder den ikke, vises ingenting.
  3. Hver regning får en kvittering. Når tallene ble regnet, fingeravtrykket (sha256) av tallfila og signaturen. Kvitteringer overskrives aldri og slettes aldri. Regnes et døgn på nytt, blir det en ny linje, ikke en stille endring.
  4. Råmeldingene bak tallene er låst. Det jernbanen meldte, lagres slik det kom, i et lager der ingen, heller ikke vi, kan slette eller endre en fil på fem år.

Dette beviser at tallene kommer uendret fra maskinen som regnet dem, og når. Det beviser ikke at det jernbanen meldte var riktig, og ikke at metoden er riktig. Metoden står på Puls.

Kvitteringene

Henter kvitteringene …

Sjekk selv

Du trenger en datamaskin med curl og openssl (Mac og Linux har begge). Hent tallfila og signaturen, og sjekk dem mot kontrollnøkkelen:

curl -s -H "X-TrainRadar-Client: sjekk" -D hoder.txt -o puls.json https://api.trainhub.no/v1/puls-signert
sha256sum puls.json                                   # skal være lik fingeravtrykket i kvitteringen
grep -i x-trainhub-signatur: hoder.txt | cut -d' ' -f2 | tr -d '\r' | base64 -d > sig.bin
echo "KONTROLLNØKKEL" | base64 -d > nokkel.der    # nøkkelen under
openssl pkeyutl -verify -pubin -keyform DER -inkey nokkel.der -rawin -in puls.json -sigfile sig.bin

Svarer openssl «Signature Verified Successfully», er fila den maskinen regnet. Endres én byte i fila, feiler sjekken.

Kontrollnøkkel (Ed25519, offentlig; den kan sjekke signaturer, ikke lage dem):

henter …