Files
one-time-code-js-2/README
2020-09-22 11:48:45 +02:00

114 lines
4.4 KiB
Plaintext

# one-time-code.js
Dies ist ein Programm zum erzeugen von anonymen Schlüsseln. Diese werden automatisch den Teilnehmern zugesendet.
Zudem wird ein asymetrisch verschlüsselter Safe erstellt.
## Zweck
Für ananoyme Wahlen muss sichergestellt werden, dass:
1. Nur berechtigter Personen abstimmen können
2. Jeder Wähler nicht rückverfolgbar ist
3. Jeder Wähler nur einmal abstimmen kann
Punkte 1. und 2. Lassen sich mit dieser Anwendug realisieren.
## Funktionsprinzip
Diese Anwendung muss auf zwei Systemen installiert sein. Beide Systeme dürfen nicht aufeinander Zugreifen können und müssen von verschiedenen Personen bedient werden.
Die beiden Systeme sind:
- System A & Person A: Hier werden die Schlüssel erzeugt, benutzern zufällig zugewiesen und versendet.
- System B & Person B: Hier wird das Schlüsselpaar erzeugt und hier kann der Safe entschlüsselt werden.
- Person C: Erhält von Person A die gültigen Codes und verifiziert die eingehenden Wahlzettel.
Da Person A die SChlüssel-Nutzer Zuordnung zu keinem Zeitpunkt kennt, kann sie auch die selbe Person wie Person C sein.
### Schritt 1
Auf System B wird ein Schlüsselpaar erzeugt. Dies besteht aus dem Öffentlichen und Privaten schlüssel.
- Der Öffentliche schlüssel dient zur Verschlüsselung der Daten und kann nicht zum entschlüsseln verwendet werden.
- Der Private schlüssel dient zur entschlüsselung des Safes und darf System B NIEMALS verlassen.
Dazu wird z.B. folgender Befehl ausgeführt:
`ts-node .\index.ts --privkey private.key --pubkey public.key --genkey
Der erzeugte Öffentliche schlüssel muss an Person A übergeben werden. Diese nutzt den Schlüssel auf System A zum verschlüsseln des Passwortsafes.
### Schritt 2
Auf System A werden jetzt die Codes erzeugt und an die Nutzer versendet.
Die Nutzer-Schlüssel zuweisung erfolgt temporär auf System A, ist jedoch nicht auslesbar und wird unmittelbar im Passwortsafe gespeichert.
Person A führt folgenden Befehl aus:
`ts-node .\index.ts --config config.json --pubkey public.key --send --safe .\out\credentials.json --mails mail.txt -html template.html
Dabei wird eine Liste mit den Mails und Namen sowie der schlüssel übergeben.
Der Ausfbau der mail.txt ist:
```
<mail>;<name>
<mail>;<name>
...
```
Es werden drei Ausgaben erzeugt:
- List aller Codes
- Eine RegEx vorlage für alle Codes
- Safe-Datei
Die Speicherorte der Code-Files werden in der config.json angegeben.
Der Safe wird an Person B weitergegeben.
Das Programm versendet automatisch Mails an alle Personen. Die HTML Vorlage wird mit --html angegeben.
In der Vorlage werden folgende Zeichenketten ersetzt:
`{{code}}
=> Genereirter Code
`{{name}}
=> Name
`{{mail}}
=> Mail
Der SMTP-Relay-Server wird in der config.json angegeben.
Geenaue Doku: https://nodemailer.com/smtp/
### Schritt 3
Ggf. muss der Safe entschlüsselt werden. Beispielfälle wären:
- Teilnehmer hat keinen Zugriff auf das Mailkonto
- Teilnehmer hat seinen Code vergessen
- Mail wurd durch den Spamfilter entfernt
Person B muss dann mit dem Privaten Schlüssel den Safe auslesen und dem Teilnehmer seinen Code zukommen lassen.
Dazu muss golgender Befehl ausgeführt werden:
ts-node .\index.ts --privkey private.key --decrypt --safe .\out\credentials.json
## Config-Datei
{
"mail":{
"host": "<mailserver>",
"port": <mailport>,
"secure": <use ssl>,
"auth": {
"user": "<mail-user>",
"pass": "<mail-password>"
},
"tls": {
"rejectUnauthorized": false,
"ciphers":"SSLv3"
}
},
"mailFrom": "<absender name>",
"outFileCodes": "<ausgabedatei codes>",
"outFileMatch": "<ausgabedatei regex>"
}
## Syntax
==> Schlüsselpaar Erzeugen
`ts-node .\index.ts --privkey <path-to-private-key> --pubkey <path-to-public-key> --genkey
z.B. `ts-node .\index.ts --privkey private.key --pubkey public.key --genkey
==> Codes Erzeugen und versenden
`ts-node .\index.ts --config <path-to-config-key> --pubkey <path-to-public-key> --send --safe .\out\credentials.json --mails <path-to-mail-list> -html <path-to-html-template>
z.B. `ts-node .\index.ts --config config.json --pubkey public.key --send --safe .\out\credentials.json --mails mail.txt -html template.html
==> Safe entschlüsseln
`ts-node .\index.ts --privkey <path-to-private-key> --decrypt --safe .\out\credentials.json
z.B. `ts-node .\index.ts --privkey private.key --decrypt --safe .\out\credentials.json