Änderungen von Dokument Digitale Mitgliederverwaltung

Zuletzt geändert von Daniel Herrmann am 2026/02/22 21:17

Von Version Icon 13.1 Icon
bearbeitet von Daniel Herrmann
am 2025/08/16 09:32
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version Icon 15.1 Icon
bearbeitet von Daniel Herrmann
am 2025/08/16 19:55
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Icon Seiteneigenschaften
Inhalt
... ... @@ -443,6 +443,52 @@
443 443  
444 444  Aus diesem Grund nutzen wir einen speziellen QR Code in einem für den Makerspace spezifischen Format, welches nachstehend detailliert beschrieben wird.
445 445  
446 +{{code language="json"}}
447 +{
448 + "payload": {
449 +        "timestamp": "YYYY-MM-DDTHH:mm:ss",
450 + "correspondent": "Daniel Herrmann (#250)",
451 + "type": "mksp-doc-sepamandat",
452 + "tags": [
453 + "tag1",
454 + "tag2"
455 + ],
456 +"storage_path": "Mitgliederverwaltung"
457 + },
458 + "sig": "signature over the entire payload block"
459 +}
460 +{{/code}}
461 +
462 +Die beiden Einträge **payload** und **sig** sind **Pflichtfelder**. Innerhalb der Payload muss der **timestamp** **vorhanden** sein, alle anderen Felder sind optional, jedoch muss mindestens eins angegeben werden. Der QR Code kann dann - insbesondere bei der Digitalen Unterschrift oder bei Workflows, wo die Formulare ohnehin on demand erzeugt werden bereits mit allen Daten bestückt werden. In Paperless gibt es dann ein Postconsume Script, welches den QR Code ausliest, die Signatur prüft und - falls die Signatur korrekt ist - automatisch die Meta-Daten übernimmt.
463 +
464 +=== {{id name="DigitaleMitgliederverwaltung-Signatur"/}}Signatur ===
465 +
466 +Die Signatur wird kryptographisch mit Hilfe asymmetrischen Verschlüsselung erzeugt. Wir erzeugen ein RSA 2048 Key Pair. Der öffentliche Schlüssel steht Paperless zur Verfügung, sodass Paperless die Signaturen verifizieren kann. Der private Teil des Schlüssels wird von den Makerspace-Systemem verwendet, welche die Formulare erzeugen. Im Detail:
467 +
468 +* **Key-Pair**: 2048 bit Schlüssellänge, RSA, 65537 Exponent
469 +* **Signatur**: SHA256 Signatur, PKCS1v15 Padding
470 +* (((
471 +**Payload**: Als Payload wird nur der Inhalt der Payload verwendet, als **JSON String ohne Whitespaces, byte encoded in UTF-8.** Das oben genannte Beispiel würde die Signatur über den folgenden String erstellen:
472 +\\
473 +
474 +{{code language="json"}}
475 +{"payload":{"correspondent":"Daniel Herrmann (#250)","type":"SEPA Mandat","tags":["tag1","tag2"]},"timestamp":"YYYY-MM-DDTHH:mm:ss","sig":"this-would-be-the-signature-appended-to-the-data"}
476 +{{/code}}
477 +
478 +
479 +Als Referenz, die in Python wäre der Input der Signatur:
480 +\\
481 +
482 +{{code language="python"}}
483 +import json
484 +
485 +input_data = {'payload': {'correspondent': 'Daniel Herrmann (#250)', 'type': 'SEPA Mandat', 'tags': ['tag1', 'tag2']}, 'timestamp': 'YYYY-MM-DDTHH:mm:ss', 'sig': 'this-would-be-the-signature-appended-to-the-data'}
486 +signature_data = json.dumps(input_data, separators=(',', ':')).encode('utf-8')
487 +{{/code}}
488 +)))
489 +
490 +\\
491 +
446 446  == {{id name="DigitaleMitgliederverwaltung-TechnischesSetup"/}}Technisches Setup ==
447 447  
448 448  Owner: zwei Owner
Icon Confluence.Code.ConfluencePageClass[0]
Id
... ... @@ -1,1 +1,1 @@
1 -202866865
1 +202866868
URL
... ... @@ -1,1 +1,1 @@
1 -https://wiki.makerspace-darmstadt.de/spaces/PROJ/pages/202866865/Digitale Mitgliederverwaltung
1 +https://wiki.makerspace-darmstadt.de/spaces/PROJ/pages/202866868/Digitale Mitgliederverwaltung