Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
| lehrkraefte:blc:informatik:glf22:crypto:joker-chain [2023/11/07 14:42] – [Joker einlösen] Ivo Blöchliger | lehrkraefte:blc:informatik:glf22:crypto:joker-chain [2024/05/07 14:49] (current) – [JokerChain] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== JokerChain ====== | ||
| + | Eventuell eine JavaScript-Version? | ||
| + | ===== Setup und Verwendung ===== | ||
| + | ==== Nötige Software ==== | ||
| + | |||
| + | * git (plus OpenSLL, ist in git for Windows dabei), Python und VisualStudio Code, siehe [[lehrkraefte: | ||
| + | |||
| + | ==== Setup der JokerChain ==== | ||
| + | Screencast dazu auf dem [[https:// | ||
| + | * git bash starten | ||
| + | * in geeigntes Verzeichnis gehen: '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Erster Test: '' | ||
| + | * Schlägt fehl, weil ein package fehlt. Also dieses installieren mit | ||
| + | * '' | ||
| + | * Und dann gleich noch pip updaten mit | ||
| + | * '' | ||
| + | * Bereits existierende Schlüssel ins Verzeichnis kopieren oder | ||
| + | * Neue Schlüssel anlegen (nur wenn noch keiner vorhanden): '' | ||
| + | * Die Datei '' | ||
| + | * Die Datei '' | ||
| + | |||
| + | ==== Update der Chain ==== | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ==== Joker einlösen ==== | ||
| + | * '' | ||
| + | ==== Joker transferieren ==== | ||
| + | * '' | ||
| + | ==== Transaktionen und Kontostand anschauen ==== | ||
| + | * '' | ||
| + | ==== Weitere Optionen ==== | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ====== Technische Umsetzung mit openssl ====== | ||
| + | Das Python-Script '' | ||
| + | ===== Schlüsselerzeugung ===== | ||
| + | In Git-Bash: | ||
| + | <code txt> | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | ===== Unterschrift ===== | ||
| + | ==== Unterschreiben ==== | ||
| + | |||
| + | in Git-Bash: | ||
| + | <code txt> | ||
| + | openssl dgst -sha256 -sign secret-private-key-joker.pem -out signature.bin ZU_SIGNIERENDE_DATEI | ||
| + | openssl enc -base64 -in signature.bin -out signature.base64 | ||
| + | </ | ||
| + | [[https:// | ||
| + | |||
| + | ==== Verifizieren ==== | ||
| + | <code txt> | ||
| + | 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 [[https:// | ||
| + | |||
| + | Die Datei enthält nur ASCII-Zeichen und Zeilenumbrüche sind \n (keine \r\n) | ||
| + | |||
| + | ===== Generelle Einträge ===== | ||
| + | <code txt> | ||
| + | # Titel (Art des Eintrags) | ||
| + | ## Name der Daten | ||
| + | ... (Daten) | ||
| + | ## Evtl. weitere Einträge | ||
| + | </ | ||
| + | |||
| + | ===== Root-Eintrag (Admin, Verwalter) ===== | ||
| + | * Public-Key vom Verwalter, muss der erste Eintrag in der Datei sein. | ||
| + | <code txt> | ||
| + | # root | ||
| + | ## publickey | ||
| + | publickey data | ||
| + | ## keyhash | ||
| + | fe736c7d89a8b | ||
| + | </ | ||
| + | Darauf muss eine rootsignature folgen: | ||
| + | ===== Einträge validieren ===== | ||
| + | <code txt> | ||
| + | # rootsignature | ||
| + | ## timestamp | ||
| + | Datum und Zeit der Unterschrift. | ||
| + | ## signature | ||
| + | Signatur der ganzen Datei bis und mit der Zeile davor (inkl. ## signature\n) | ||
| + | </ | ||
| + | |||
| + | ===== User-Konto mit Jokern anlegen ===== | ||
| + | <code txt> | ||
| + | # user | ||
| + | ## publickey | ||
| + | publickey data | ||
| + | ## keyhash | ||
| + | fe736c7d89a8b | ||
| + | ## tokens | ||
| + | list of joker tokens | ||
| + | </ | ||
| + | Darauf muss eine ''# | ||
| + | ===== Überweisung ===== | ||
| + | <code txt> | ||
| + | # 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. | ||
| + | |||
| + | ===== Joker Einlösen ===== | ||
| + | <code txt> | ||
| + | # usejoker | ||
| + | ## sender | ||
| + | hash | ||
| + | ## token | ||
| + | token | ||
| + | ## usedate | ||
| + | JJJJ-MM-TT | ||
| + | ## timestamp | ||
| + | timestatmp | ||
| + | ## signature | ||
| + | Signatur der ganzen Datei bis und mit ## signature\n | ||
| + | </ | ||
| + | |||