lehrkraefte:blc:informatik:glf22:crypto:joker-chain

JokerChain

  • git (plus OpenSLL, ist in git for Windows dabei), Python und VisualStudio Code, siehe Anleitungen hier

Screencast dazu auf dem Web oder auf Stream

  • git bash starten
  • in geeigntes Verzeichnis gehen: cd pfadangabe
  • cd jokerchain
  • Erster Test: python jokerchain.py
    • Schlägt fehl, weil ein package fehlt. Also dieses installieren mit
    • pip install requests
    • Und dann gleich noch pip updaten mit
    • pip install –upgrade pip
  • Bereits existierende Schlüssel ins Verzeichnis kopieren oder
    • Neue Schlüssel anlegen (nur wenn noch keiner vorhanden): python jokerchain.py -n
    • Die Datei public-key-joker.pem an ivo.bloechliger@ksbg.ch senden.
    • Die Datei secret-private-key-joker.pem sicher verwahren und mindestens ein Backup erstellen.
  • cd ins Verzeichnis, wo das Pythonprogramm jokerchain.py gespeichert ist.
  • git pull (lädt die neueste Version herunter).
  • python jokerchain.py -d 2022-08-29 wobei das Datum in diesem Format (JJJJ-MM-TT) und in der Zukunft liegen muss.
  • python jokerchain.py -t c001f4c3 wobei nach -t ein existierender Hash eines anderen Nutzers stehen muss. Achtung, die Überweisung eines Jokers an den Admin zählt nicht als Einlösen!
  • python jokerchain.py
  • python jokerchain.py -h Hilfe anzeigen
  • python jokerchain.py -v … Verbose: Anzeigen was, das Programm so alles tut.

Technische Umsetzung mit openssl

Das Python-Script jokerchain.py führt die im folgenden erklärten openssl-Kommandos aus. Es ist im Prinzip möglich, alle Manipulation auch «von Hand» auszuführen und so neue valide Einträge zu erstellen.

In Git-Bash:

openssl ecparam -name prime256v1 -genkey -noout -out secret-private-key-joker.pem
openssl ec -in secret-private-key-joker.pem -pubout -out public-key-joker.pem

in Git-Bash:

openssl dgst -sha256 -sign secret-private-key-joker.pem -out signature.bin ZU_SIGNIERENDE_DATEI
openssl enc -base64 -in signature.bin -out signature.base64

Quelle

openssl enc -base64 -d -in signature.base64 -out signature.bin
openssl dgst -sha256 -verify public-key-joker.pem -signature signature.bin SIGNIERTE_DATEI

Dateiformat

Die «Blockchain» ist im «Markdown» Format gespeichert. Damit lässt sich die Datei ebensogut maschinell verarbeiten wie von Menschen gelesen werden.

Die Datei enthält nur ASCII-Zeichen und Zeilenumbrüche sind \n (keine \r\n)

# Titel (Art des Eintrags)
## Name der Daten
... (Daten)
## Evtl. weitere Einträge
  • Public-Key vom Verwalter, muss der erste Eintrag in der Datei sein.
# root
## publickey
publickey data
## keyhash
fe736c7d89a8b

Darauf muss eine rootsignature folgen:

# rootsignature
## timestamp
Datum und Zeit der Unterschrift.
## signature
Signatur der ganzen Datei bis und mit der Zeile davor (inkl. ## signature\n)
# user
## publickey
publickey data
## keyhash
fe736c7d89a8b
## tokens
list of joker tokens

Darauf muss eine # rootsignature folgen.

# transfer
## sender
keyhash
## token
token
## receiver
keyhash
## timestamp
timestamp
## signature
Signatur der ganzen Datei bis und mit ## signature\n

Hinweis: Der Sender kann auch der Admin sein, der damit neue Joker erschaffen kann. Das ist nötig, wenn z.B. ein Joker eingelöst wurde, die Schülerin aber wegen Krankheit gar nicht anwesend war. Oder sich der Lehrer mal wieder zu spät bewusst wird, dass die Miniaufgabe «ungeeignet» war.

# usejoker
## sender
hash
## token
token
## usedate
JJJJ-MM-TT
## timestamp
timestatmp
## signature
Signatur der ganzen Datei bis und mit ## signature\n
  • lehrkraefte/blc/informatik/glf22/crypto/joker-chain.txt
  • Last modified: 2023/11/07 15:42
  • by Ivo Blöchliger