Merge branch 'master' of git.verdigado.com:NB-Public/abstimm-id

This commit is contained in:
Sven Seeberg 2020-11-30 10:30:59 +01:00
commit 1b34b8353a
Signed by: sven.seeberg
GPG key ID: 29559DD5A83806B5
5 changed files with 17 additions and 31 deletions

View file

@ -7,24 +7,24 @@ Die Berechnung findet vollständig im Browser statt. Es werden keine Daten zurü
# Hintergrund
Dieses Werkzeug ist eine mögliche Ergänzung für https://git.verdigado.com/Netzbegruenung/polls, um Abstimmergebnisse datenschutzfreundlich validieren zu können.
Dazu wird allen an einer Abstimmung teilnehmenden Personen eine Liste ausgehändigt, die alle abgegebenen Stimmen enthält. Allerdings sind die Namen pseudonomisiert. Mit Hilfe der Liste kann in Summe das Gesamtergebnis geprüft werden. Außerdem können einzelne Stimmen (stichprobenartig) validiert werden, in dem im Abstimm-ID-Rechner die Abstimm-Runde und ein Name einer abstimmenden Person eingegeben werden. Mit Hilfe der erzeugten Abstimm-ID kann in der Ergebnisliste geprüft werden, wie die entsprechende Person abgestimmt hat.
Dazu wird allen an einer Abstimmung teilnehmenden Personen eine Liste ausgehändigt, die alle abgegebenen Stimmen enthält. Allerdings sind die Namen pseudonymisiert. Mit Hilfe der Liste kann in Summe das Gesamtergebnis geprüft werden. Außerdem können einzelne Stimmen (stichprobenartig) validiert werden, indem im Abstimm-ID-Rechner die Abstimm-Runde und ein Name einer abstimmenden Person eingegeben werden. Mit Hilfe der erzeugten Abstimm-ID kann in der Ergebnisliste geprüft werden, wie die entsprechende Person abgestimmt hat.
Der Vorteil der Methode ist, dass alle Personen sofort das Gesamtergebnis mit ihrer eigenen Stimme nachvollziehen können, sowie stichprobenartig Stimmen anderer Personen. Um das Abstimmverhalten anderer Personen prüfen zu können, muss der Namen der anderen Personen bereits bekannt sein. Es sind also alle Stimmen einzeln nachvollziehbar, ohne dass eine Liste aller Namen verteilt wird. Außerdem ist der Rechenaufwand zum Erzeugen einer Abstimm-ID so hoch gewählt, dass zum Deanonymisieren einer Abstimm-ID mindestens ungefähr 10 Sekunden nötig sind.
Der Vorteil der Methode ist, dass alle Personen sofort das Gesamtergebnis mit ihrer eigenen Stimme nachvollziehen können, sowie stichprobenartig Stimmen anderer Personen. Um das Abstimmverhalten anderer Personen prüfen zu können, muss der Name der anderen Personen bereits bekannt sein. Es sind also alle Stimmen einzeln nachvollziehbar, ohne dass eine Liste aller Namen verteilt wird. Außerdem ist der Rechenaufwand zum Erzeugen einer Abstimm-ID so hoch gewählt, dass zum Deanonymisieren einer Abstimm-ID eine Zeit in der Größenordnung von 10 Sekunden nötig ist.
Um eine Manipulation der Ergebnislisten zu verhindern, wird eine Signatur der Ergebnisliste empfohlen, beispielsweise mittels PGP.
# Argon2 Parameter
* Memory: 4096 KiB
* Time: 1000
* Hash Length: 32
* Memory: 262144 KiB (= 2^18 KiB)
* Iterations: 5
* Hash Length: 16
* Parallelism: 1
* Argon2id
Auf Linux-Systemen kann das Ergebnis mit folgendem Befehl reproduziert werden:
Auf Linux-Systemen (das Paket `argon2` muss installiert sein) kann das Ergebnis mit folgendem Befehl reproduziert werden:
`echo -n "Max Mustermann" | argon2 "Abstimmung 1" -p 1 -k 4096 -t 1000 -l 32 -id`
`echo -n "Max Mustermann" | argon2 "Abstimmung 1" -p 1 -k 262144 -t 5 -l 16 -id`
Auf der Unabhängigen Website https://antelle.net/argon2-browser/ kann ebenfalls das Ergebnis verfiziert werden.
Auf der unabhängigen Webseite https://antelle.net/argon2-browser/ kann ebenfalls das Ergebnis verfiziert werden.
# Lizenz
Copyright 2020 Netzbegrünung e.V.

File diff suppressed because one or more lines are too long

View file

@ -5,25 +5,25 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Abstimm-ID Rechner</title>
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z">
<link rel="stylesheet" href="bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z">
<link rel="icon" href="https://blog.netzbegruenung.de/files/2017/04/favicon_32.png" type="image/png" />
<link rel="shortcut icon" href="https://blog.netzbegruenung.de/files/2017/04/favicon_32.png" type="image/png" />
</head>
<body style="background: #fff;">
<script>
function calculate_hash() {
$("#hash_target").html("Berechne, bitte warten ...");
document.getElementById("hash_target").innerHTML = "Berechne, bitte warten ...";
setTimeout(function() {
argon2.hash({
pass: $("#input_name").val().toLowerCase(),
salt: "Abstimmung " + String($("#vote-round").val()),
time: 1000,
mem: 4096,
hashLen: 32,
pass: document.getElementById("input_name").value.toLowerCase(),
salt: "Abstimmung " + String(document.getElementById("vote-round").value),
time: 5,
mem: 262144,
hashLen: 16,
parallelism: 1,
type: argon2.ArgonType.Argon2id
}).then(function(h){
$("#hash_target").html("<p class='font-weight-bold'>Abstimm-ID:</p><code>" + String(h.hashHex) + "</code>");
document.getElementById("hash_target").innerHTML = "<p class='font-weight-bold'>Abstimm-ID:</p><code>" + String(h.hashHex) + "</code>";
}).catch(e => console.error(e.message, e.code));
}, 5);
}
@ -76,7 +76,7 @@
</div>
<div class="p-3">
<h3>Warum dauert das Berechnen einer Abstimm-ID so lange?</h3>
<p>Die Rechenzeit für die Abstimm-IDs ist sehr hoch angesetzt. Auf neuen Geräten dauert es ungefähr 10 Sekunden, auf älteren Geräten kann es allerdings Minuten brauchen. Ziel ist es, dass Ausprobieren vieler Logins mit einem hohen technischen und damit finanziellen Aufwand zu verbinden. Könnte man in Bruchteilen einer Sekunde hunderte oder tausende Logins ausprobieren, wäre es sehr leicht, alle Personen zu deanonymisieren.</p>
<p>Die Rechenzeit für die Abstimm-IDs ist sehr hoch angesetzt. Auf neuen Geräten dauert es ungefähr 10 Sekunden, auf älteren Geräten kann es allerdings Minuten brauchen. Ziel ist es, das Ausprobieren vieler Logins mit einem hohen technischen und damit finanziellen Aufwand zu verbinden. Könnte man in Bruchteilen einer Sekunde hunderte oder tausende Logins ausprobieren, wäre es sehr leicht, alle Personen zu deanonymisieren.</p>
</div>
</main>
<footer class="footer font-small special-color-dark pt-4 pb-4 text-center mt-5" style="background-color: #f5f5f5;">
@ -84,8 +84,6 @@
<span class="text-muted"><a href="https://git.netzbegruenung.de/NB-Public/abstimm-id/">Quellcode</a> &mdash; <a href="https://blog.netzbegruenung.de/impressum/">Impressum</a></span>
</div>
</footer>
<script src="jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"></script>
<script src="bootstrap/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV"></script>
<script src="node_modules/argon2-browser/lib/argon2.js" integrity="sha384-Z86p2Vj2/KfDVUq4dbOvqv+BH37O7bui9MZj38/J7SBN9YBeJNoWVzmq7NdtLmAb"></script>
</body>
</html>

File diff suppressed because one or more lines are too long