Второй раз за месяц найдена уязвимость в московской системе электронного голосования
Пусть и
простые числа длины порядка 1024 бита.
— группа квадратичных вычетов по модулю
,
. Для шифрования система выбирает
,
— открытый и
— секретный ключи (
). Результат шифрования голоса
имеет вид пары
,
-случайное число.
Если квадратичный вычет, то при любом
второй компонент шифротекста тоже квадратичный вычет (аналогично — если не квадратичный вычет). Это дает возможность отличать различные голоса с помощью критерия Эйлера. Для этого нам достаточно возвести шифротекст в степень
и проверить равен ли результат единице (в этом случае — это квадратичный вычет).
Например, номера кандидатов 1, 3 и 4 — квадратичные вычеты, а 2- нет. То есть, мы можем анализируя блокчейн по мере его обновления подсчитывать количество голосов за кандидата 2.
Атака будет работать даже тогда, когда вместо номеров кандидатов будут произвольные идентификаторы, правда с меньшей вероятностью успеха.