Разработчики изменили систему голосования так, что избиратель теперь может гарантированно расшифровать собственный голос только со своего устройства.
Однако издание «Медуза» разобралось в процедуре шифрования и проверило, что расшифровать голос может и постороннее лицо, если оно получит ключ для расшифровки.
«Новая система отличается детерминированным шифрованием: использование одних и тех же параметров приводит к формированию идентичных шифротекстов. Более того, отправитель и получатель формируют общий ключ (shared key), который пригоден как для шифрования сообщения, так и для его расшифровки, — пишет «Медуза». — То есть избиратель теперь не только может отправить зашифрованный выбор на сервер избиркома, откуда он попадет в блокчейн, но и успешно расшифровать его. Ему не нужно ждать начала официального подсчета голосов и публикации секретного ключа избирательной комиссии — достаточно сохранить свой секретный ключ, формируемый в браузере на странице электронного бюллетеня. Мы провели эксперимент, и оказалось, что раздобыть свой секретный ключ сравнительно легко».
Для сохранения своего электронного ключа нужно открыть «Инструменты разработки» в браузере, отыскать библиотеку election.js, найти там строку с генерацией секретного и публичного ключей, поставить после неё logpoint: 'voter secret key is', encryptor.keyPair.secretKey. И после этого голосовать.
«Медуза» опубликовала скрипт votes.js, позволяющий расшифровать голоса интернет-избирателей, сохранивших свои секретные ключи. Там уже введены ключи, nonce и зашифрованные сообщения двух избирателей — так что вы можете расшифровать их голоса для проверки.
«Медуза» считает, что сторонняя проверка голосов в теории позволяет работодателям принуждать к голосованию своих работников, проверяя, как они проголосовали. Для проверки можно установить на компьютере работника специальное расширение, которое подменит сгенерированные ключи на статичные.
Автор библиотеки TweetNaCl.js Дмитрий Честных предложил пути обхода запрета на использование одной и той же пары ключей: «Например, такое расширение может генерировать ключи детерминистически, взяв хэш от статичного секрета и имени (и какого-нибудь номера избирателя) — тогда это обнаружить будет сложно, потому что пары ключей будут разные, но тот, кто владеет секретом, может их заново сгенерировать… Расширение может просто писать ключи в центральную базу. Алгоритм Curve25519 очень быстрый, поэтому расшифровать миллионы голосов не составит труда… В любом случае это, конечно, полный бред, а не система электронного голосования», — сказал он.
ДИТ Москвы не видит проблемы в использовании детерминированного шифрования. В официальном сообщении они сравнивают извлечение секретного ключа с фотографированием своего бюллетеня. Здесь вы можете извлечь ключ и поделиться им с кем угодно. Точно так же вы можете сфотографировать свой бюллетень в кабинке — и потом показать фотографию кому-нибудь: «Но сделать это может только сам пользователь и только на своем устройстве, — пояснил начальник управления по совершенствованию территориального управления и развитию смарт-проектов правительства столицы Артем Костырко. — Единственный способ этого избежать — использовать какую-либо третью сторону, которая будет шифровать [сделанный избирателем] выбор вместо браузера избирателя. Но тогда никакого доверия к системе быть не может, потому что ты отправляешь свой голос незашифровано на третью сторону. Алгоритм шифрования (Эль-Гамаля), который упоминает «Медуза», позволяет точно так же расшифровать бюллетень, сохранив свои вероятностные параметры».
EviGL
Ну странная предъява от медузы и адекватный на неё ответ.
Изначальная статья явно нацелена на технически неподкованную аудиторию.
Да, текущий метод шифрования позволяет "взломать себя". Да, можно было бы применить какое-то асинхронное шифрование, чтобы расшифровать обратно зашифрованное тобой можно было только после публикации дополнительного ключа в конце голосования.
Но это никак не увеличило бы общую стойкость системы: если мы имеем полный доступ к браузеру жертвы, мы можем довесить свой обработчик на кнопку "голосую за" и отправить информацию налево.
А если цель, как написано в оригинальной статье, принудить к голосованию, то "стоять за плечом" или "установить следящее расширение" отлично работает вне зависимости от алгоритма шифрования: можно украсть информацию до того, как она шифруется браузером.
tmin10
Можно просто видео записать, сайт от этого никак не защитит.
amarao
Видео писать сложнее, чем заставить зависимого прислать что-то (или установить что-то).
AC130
Нет гарантии что жертва не подменит этот обработчик, и отправит налево нужную информацию, а сама проголосует другой кнопкой.
Можно записать видео и вообще не проголосовать. Гарантий правильного голоса, неправильного голоса, или вообще факта голосования, запись видео сайта не даёт. Интернет полнится шутками и мемами со скриншотами «забавных» переписок, и существенная часть этих скриншотов — фейк, созданный в графическом редакторе.
А вот как раз указать транзакцию с голосом и выдать ключ от неё — это гарантия. От чужой транзакции ключ юзер выдать не может — не подобрать за разумное время ключ от чужой транзакции. Выдать от своей транзакции ключ эквивалентно сказать как ты проголосовал, причём со 100% криптографической гарантией — не отвертишься никак.
esp8266
Ага, осталось только подсчитать сколькие из бюджетников способны на подобное.