Второй вариант вполне неплох, мы такой опрос проводили по результатам курса «Алгоритмы и структуры данных». Коды были распечатаны на листочках, и студентам предлагалось вытягивать по одному листочку, не глядя. Это позволило соблюсти анонимность (и от друзей-студентов тоже), а также каждому проголосовавшему студенту увидеть, что его голос был учтён. Коды считались одноразовыми, и принимались только первые ответы с конкретным кодом, т.к. указание кода являлось частью опроса. Хотя всё равно часть листочков осталась валяться в аудитории после завершения занятия.
Недостаток системы – студенты не могут быть уверенными, что я не исказил результаты опроса, подмешав фиктивных участников голосования (но это и не предусматривалось).
Рискну предложить такой алгоритм:
- Преподаватель в начале процедуры анкетирования выбирает какой-либо довольно длинный текст, и публикует его хеш (например, какой-нибудь SHA-2).
- Оглашается алгоритм генерации кодов для анкетирования. Входом алгоритма считается секретный текст (хеш которого известен), и некоторая строка достаточной длины. Обязательное условие – алгоритм генерирует ограниченное число кодов. Тут всё просто, можно банальный XOR реализовать для начала текста и этой строки.
- Заинтересованные студенты на занятии записывают, к примеру, по одному слову каждый, из этих слов составляется строка для генерации кодов.
- Преподаватель генерирует коды, и предлагает студентам тянуть листочки с кодами. Пока исходный текст не оглашен, студенты знают только его хеш и коллективно придуманную строку, воспроизвести коды не могут.
- По завершению анкетирования преподаватель оглашает исходный текст, что позволяет каждому студенту убедиться в том, что его код действительно был создан по заданным правилам.
- Если все студенты проголосовали, и никто не возмущался по поводу кодов (нет такого или кто-то уже голосовал с таким кодом) – всё хорошо.
Так можно добиться и анонимности, и однократного голосования.
Сложновато это, конечно, для анкетирования, но можно попробовать как-то это оптимизировать.
Да, и этот алгоритм, кажется, может быть доработан для избежания как вредоносных действий преподавателя (например, успеть проголосовать по какому-то коду раньше студента), так и студентов, имеющих возможность обвинить преподавателя в том, что им выдали неверный код.