Ocena Zajęć

Ocena zajęć ma na celu zebranie informacji na temat zajęć prowadzonych w Instytucie Informatyki UWr. Po uzyskaniu kluczy należy je zapisać w bezpiecznym miejscu, ponieważ można je uzyskać tylko raz. Mając klucze przechodzimy do wypełnienia ankiet, które jest anonimowe, co pozwala na całkowitą szczerość. Udział nagradzany jest 24 godzinnym bonusem do otwarcia zapisów w kolejnym roku akademickim.

Anonimowość zapewniona jest dzięki protokołowi ślepych podpisów. Klucze można pobrać w serwisie po zalogowaniu lub używając przykładowego klienta. W komentarzach zawarte są szczegóły implementacyjne.

Cały proces jest przeprowadzony w następujący sposób:

Kroki przeprowadzone są dla wszystkich dostępnych dla studenta ankiet.

Przygotowanie
Serwer posiada dla każdej ankiety klucze RSA:
  • \((e, n)\) — klucz publiczny ankiety,
  • \((d, n)\) — klucz prywatny ankiety.
Student będzie potrzebował klucza publicznego ankiety do zaślepiania i odślepiania kluczy do głosowania. Można o tym myśleć jak o karcie do głosowania — zaślepianie i odślepianie odpowiada wkładaniu i wyjmowaniu karty z koperty.
Tworzenie kart
Student wybiera liczby \(m\) i \(k\) mniejsze od \(n\):
  • \(m\) — karta,
  • \(k\) — koperta.
Zaślepianie
Wylosowane karty wkładamy do kopert: \[\tilde{m} \coloneqq \text{sha256}^\ast(m) \text{,}\] \[t \coloneqq \tilde{m} \cdot {k}^{e} \bmod n \text{,}\] gdzie \(\text{sha256}^\ast(x)\) to funkcja \(\text{sha256}\) hashująca reprezentację dziesiętną liczby \(x\) w ASCII, bez wiodących zer.
Podpisanie
Karta w kopercie jest wysłana do podpisu. Pomimo że serwer wie od kogo dostał kopertę (i weryfikuje, że jest to osoba uprawniona do wzięcia udziału w odpowiedniej ankiecie), to nie zna karty \(m\). Podpisuje wykonując następującą operację: \[s \coloneqq {t}^{d} \bmod n \text{.}\] Tak podpisane dane są odsyłane do studenta.
Odślepianie
Wiedząc, że: \[s = {t}^{d} = (\tilde{m} \cdot {k}^{e})^{d} = {\tilde{m}}^{d} \cdot {k}^{e \cdot d} = {\tilde{m}}^{d} \cdot k \pmod {n} \text{,}\] obliczamy z użyciem rozszerzonego algorytmu Euklidesa: \[ \dfrac{ s }{ k } = \dfrac{ {\tilde{m}}^{d} \cdot k }{ k } = {\tilde{m}}^{d} \cdot k \cdot {k}^{-1} = {\tilde{m}}^{d} \pmod {n} \text{.}\] Wyjmujemy karty z kopert. Dzięki arytmetyce modulo, która zadziała jak kalka, karty również będą podpisane.
Wypełnianie ankiet
Otrzymane podpisane karty zapisane są w ustalonym formacie. Należy je zapisać, a następnie wylogować się i w dowolnym czasie, z dowolnej maszyny, wejść do serwisu i bezpiecznie odpowiedzieć na pytania. Ostatecznie przy wypełnianiu ankiet wysyłamy \(\tilde{m}^d\) i \(m\). Karta jest poprawna, gdy: \[{(\tilde{m}^d)}^{e} = \text{sha256}^\ast(m) \text{.}\] Bonus zostaje studentowi przyznany w momencie podpisywania zaślepionych kart, ponieważ nie istnieje możliwość zweryfikowania do kogo należy dana karta do głosowania w momencie wypełniania ankiet.