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.

  1. 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.

    O kluczu do głosowania można myśleć jako o karcie do głosowania, a zaślepianiu i odślepianiu jak o wkładaniu i wyjmowaniu karty z koperty.

  2. Tworzenie kart

    Karta to liczba o nie większa od \(n\):

    \(m\) — karta,
    \(k\) — koperta.

    Dodatkowo muszą spełniać warunek:

    \[\gcd\left( k, n \right) = 1 \text{.}\]
  3. Zaślepianie

    Otrzymane 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.

  4. Podpisanie

    Karta w kopercie jest wysłana do podpisu, pomimo że serwer wie od kogo dostał kopertę, 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 klienta.

  5. 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 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.

  6. 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 przyznany, gdy klucze do głosowania są podpisane, ponieważ nie istnieje możliwość zweryfikowania do kogo należy dany klucz.