Фил
@usher2 Кулин навёл на статью французского криптоаналитика о криптостойкости электронного голосования в Мосгордуму. Вкратце:
всё не очень.
Суть протоколов электронного голосования в следующем: избиратель может не просто проголосовать, но и проверить, был ли записан его электронный бюллетень так, как он проголосовал, и был ли он посчитан в итоге голосования. Для этого применяются методы криптографии с открытым ключом: открытым ключом, известным всем, можно зашифровать данные, а закрытым ключом, известным только одной стороне, можно расшифровать их. Часть протокола голосования основывается на том, что открытым ключом шифруется заполненный бюллетень, а закрытым ключом он расшифровывается для подсчёта.
Исходный код элементов протокола был выложен на GitHub, что и позволило исследователю проверить его на стойкость. Основных
технических проблем две с половиной. Во-первых, используемая длина ключа, основной параметр защищённости данных, недостаточна. В данном случае можно из открытого ключа посчитать закрытый за считанные минуты на домашнем компьютере. Во-вторых, генерируемые пары открытых и закрытых ключей немного коррелируют, что позволяет узнать один бит информации в шифрованном сообщении. Вроде бы, один бит это не так много, но на каком-нибудь референдуме бюллетень содержит ровно один бит информации, положительный или отрицательный ответ на поставленный вопрос. Во-вторых-с-половиной, протокол, хоть и частично опубликован, неочевиден и производит не совсем понятные манипуляции с данными (вроде троекратного шифрования разными, но слишком короткими ключами). Отдельно стоит упомянуть про
организационные проблемы: код использует отчасти самописные библиотеки криптографии, зачем-то прикручен блокчейн Ethereum, а сам протокол толком не документирован. Впрочем, для обвинительного вердикта хватает одного только пункта «во-первых». Зная открытые ключи, можно расшифровать все шифрованные бюллетени, буквально не отходя от компьютера. Единственное, что для этого нужно, это доступ к базе шифрованных голосов. Если же она хранится в публично доступном блокчейне, то у нас совсем плохие новости.
Авторы кода признали проблему, пусть и в типичном корпоративном стиле «это только для тестов, мы и так уже вот-вот собирались шифровать по-настоящему», что похвально. Не очень похвально, что протокол всё так же плохо задокументирован и, видимо, авторы пропустили мимо ушей ремарку о небезопасном методе генерации ключей. Это позволяет сделать не очень приятные выводы о компетентности авторов реализации. В очередной раз сработал закон, сформулированный знакомым автора этих строк: «В криптографии ты или с самого начала делаешь всё как следует, или ты облажался. Как правило, происходит последнее». Ватфор добавляет: прежде чем писать криптографию, посоветуйтесь со специалистами, иначе облажаетесь громко и со спецэффектами. Вдвойне обидно, что всё это происходит в стране с собственной и очень сильной криптографической школой. С другой стороны, нельзя не похвалить авторов за публикацию кода в открытом доступе, что и позволило найти ошибку в реализации сейчас, а не тогда, когда это уже было бы слишком поздно.
https://arxiv.org/pdf/1908.05127.pdf