Loeschcode pruefen

Auf dem Laufzettel eines Besuchers stehen die Foto-ID und der Loeschcode. Ob die beiden zusammengehoeren, sagt dir diese Schnittstelle: die Antwort ist {"valid":true} oder {"valid":false}, mehr nicht. Sie antwortet unter http://fotofix/api/pruefen im Saal und unter fotofix.classic-computing.de/api/pruefen im Internet.

Mit TLS: der Code direkt

Ueber HTTPS darf der Code selbst in der Anfrage stehen:

GET https://fotofix.classic-computing.de/api/pruefen?id=MUSTER&code=PQ4M7XKD

{"valid":true}

Ohne TLS: Nonce und Proof

Ueber Port 80 - im Saal, und fuer jede Maschine ohne TLS - bleibt der Code vom Draht fern. Hol dir eine Nonce, hashe den Code, hashe noch einmal mit der Nonce davor, und schicke das Ergebnis:

GET /api/pruefen?id=MUSTER

{"nonce":"5f8a2c0d9b1e47f6a3d0c8b7e6f5a4d3"}

proof = sha256hex( nonce + sha256hex(code) )

GET /api/pruefen?id=MUSTER&nonce=5f8a...&proof=<64 Hexziffern>

{"valid":true}

Beide Hashes sind SHA-256 ueber ASCII, als Hexstring in Kleinbuchstaben; der Code steht dabei so im Hash, wie er auf dem Zettel steht: Grossbuchstaben und Ziffern. Eine Nonce gilt zwei Minuten, fuer genau eine Antwort, und nur fuer die Foto-ID, fuer die sie ausgegeben wurde.

Als Shell-Rezept:

BASE=http://fotofix.classic-computing.de
NONCE=$(curl -s "$BASE/api/pruefen?id=MUSTER" | sed 's/.*"nonce":"//;s/".*//')
HASH=$(printf %s PQ4M7XKD | sha256sum | cut -d' ' -f1)
PROOF=$(printf %s "$NONCE$HASH" | sha256sum | cut -d' ' -f1)
curl -s "$BASE/api/pruefen?id=MUSTER&nonce=$NONCE&proof=$PROOF"

Zum Ausprobieren

Das Foto MUSTER hat den veroeffentlichten Loeschcode PQ4M7XKD - an dem Paar kannst du deinen Client pruefen, und loeschen laesst sich das Musterfoto damit nicht.

Antworten

200  {"valid":true}   Foto-ID und Code gehoeren zusammen
200  {"valid":false}  falscher Code, unbekannte Foto-ID, geloeschtes Foto,
                      oder eine verbrauchte oder abgelaufene Nonce
400  {"error":"..."}  ID nicht sechs Zeichen A-HJ-NP-Z2-9, oder nonce/proof
                      unvollstaendig
403  {"error":"..."}  der Code selbst ueber Port 80 - nimm Nonce und Proof
429  {"error":"..."}  zu viele falsche Antworten fuer eine Foto-ID; warte
                      eine Minute

The same in English: the API answers whether a photo id and a deletion code belong together. Over HTTPS send the code itself (?id=...&code=...); over plain HTTP fetch a nonce (?id=...), then send ?id=...&nonce=...&proof=sha256hex(nonce + sha256hex(code)), lowercase hex over ASCII. A nonce lasts two minutes, answers once, and is bound to its id. MUSTER with code PQ4M7XKD is the published pair to test against.

Zurueck zur Foto-ID-Eingabe