Электронная избирательная система
В этой записи я приведу модель электронной избирательной системы, которая может быть воплощена на практике. В нашем примере она заточена под проведение выборов, однако ее можно использовать для любой другой цели. Ничего конкретно моего здесь нет, все эти элементы были придуманы задолго до меня и частично многие из них уже вводятся на практике.
Замечу, что электронные системы голосования уже существуют и применяются, в том или ином виде, в таких странах как Австралия, Бельгия, Бразилия, Канада, Индия, Италия, Нидерланды, Норвегия, Франция, Швейцария и Эстония.
Электронная система голосования, которую мы рассмотрим, является достаточно развитой, поэтому нам придется рассмотреть несколько важных аспектов, которые ее составляют. Первый, это непосредственно методы криптографии. Я постараюсь опустить практически весь математический аппарат и просто донести суть. Второй аспект это необходимое для нее оборудование, в частности электронный паспорт. Третий, это непосредственно сам механизм работы системы.
1. Криптография
Криптография, если вкратце, это наука о шифровании данных. Одна из тех наук, которые объединяют чистую математику и самое практическое применение. Вся криптография основана на нерешенных математических проблемах, настолько сложных, что их нельзя решить "в лоб" с помощью компьютерной скорости вычислений. Как известно каждому, кто серьезно изучал алгоритмы, существуют такие задачи, которые не смог бы решить ни один суперкомпьютер за сотни и тысячи лет. Криптография находит такие задачи и "превращает в них" передаваемые данные, делая их недоступными для использования третьими лицами.
Криптография не занимается решением проблем компьютерного пиратства, поскольку она защищает данные от расшифровки, а не от копирования.
Криптография исходит из того, что канал передачи данных ненадежный, то есть очевидно заранее что он целиком прослушивается и вся информация из него записывается, тем не менее польза от этой записи будет нулевая. Таким ненадежным каналом является, скажем, интернет. "Защищенный канал SSL" защищен именно средствами криптографии, хотя сам канал физически такой же, как и для всех остальных данных которые получаются и передаются через интернет.
Методы криптографии можно условно разделить на два больших раздела. Эти симметричная криптография (с закрытым ключом) и асимметричная (с открытым).
Мы рассмотрим оба, но для начала надо объяснить, что такое ключ. Ключ это некий аналог пароля, только выбирает его не пользователь, а система. Сам по себе ключ всегда может быть представлен, как очень большое число. Для его генерации всегда используется генератор случайных чисел, в идеале он должен быть настоящим, но на практике чаще используется псевдо (но специальный, более надежный).
Принцип симметричной криптографии очень простой: есть два пользователя, у них есть один и тот же ключ, о котором они секретно договорились до этого. Данные шифруются с помощью этого ключа, передаются и при получении расшифровываются с помощью этого же ключа, вот и весь секрет. Следует учитывать, что по характеру зашифрованных данных невозможно узнать вообще хоть что-то о самих данных (кроме их относительного размера), поскольку данные в зашифрованном виде выглядят, как совершенно рандомный белый шум. Алгоритмы шифрования далеки от тривиальных и содержат в себе гораздо больше элементов, чем сам ключ и данные (речь не идет о примитивных методах шифрования, вроде применения логических операций с данными и ключом). Одним из популярных методов шифрования такого типа является AES256, который с современным уровнем развития технологий невозможно взломать в принципе (это просто невозможно математически). То есть если ваши данные зашифрованы этим алгоритмом, даже никакое ФСБ или ФБР их не расшифруют.
Если кому интересно, как это работает, полная спецификация алгоритма, безусловно, является открытой и с ней можно ознакомиться здесь: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
Единственным слабым местом этой системы является возможная утечка ключа. Если утерян ключ, то информация тривиально расшифровывается (небольшие персональные изменения поверх алгоритма для опытных криптологов, как правило, не представляют никакой проблемы).
Ассиметричная криптография ставит вопрос более интересно - как сделать так, чтобы надежность была такой же, как в симметричной криптографии, но при этом чтобы не было необходимости пользователям встречаться до этого и устанавливать всякие ключи? Иначе говоря, как сделать так, чтобы ВЕСЬ процесс проходил через тот же ненадежный канал, но при этом данные были бы так же сохранены. Этот вопрос успешно решен.
Наиболее частым примером такой системы является метод Диффе-Хеллмана созданный в 1976 году и являющийся первой системой криптографии с открытым ключом. Приведу его и я.
Есть два пользователя - A и B, которые публично (то есть через тот же самый открытый канал - а кроме него ничего и нет) договариваются о двух числах p и x, причем p это случайное простое число, а x это первообразный корень по модулю p.
После этого A генерирует случайное число a и отправляет B число (x^a)mod p. B, в свою очередь, генерирует свое случайное число b и отравляет A число (x^b)mod p. Пользователь A, зная a и обладая (x^b)mod p может очень легко вычислить (x^ab)mod p. Пользователь B, зная b и обладая (x^a)mod p может очень легко вычислить (x^ab)mod p, то есть они оба могут легко вычислить этот общий элемент. А вот тот, кто прослушивает канал и обладает (x^a)mod p и (x^b)mod p вычислить этот элемент не может. Точнее может, но это компутационально нетривиальная проблема для которой неизвестен эффективный алгоритм, а вычислять его в лоб даже на суперкомпьютерах займет, ну скажем, месяцы после которых переданные данные перестанут быть актуальными.
Общий элемент (x^ab)mod p может использоваться как закрытый ключ для шифрования данных.
Как правило, методы симметричной и ассиметричной криптографии используются в тандеме в реальных криптографических системах. С помощью ассиметричной криптографии устанавливается ключ, который используется в симметричной. Необходимо использовать оба метода, поскольку ассиметричная криптография работает гораздо медленнее, чем симметричная.
Метод Диффи-Хеллмана, описанный выше, на практике не применяется и служит, главным образом, как иллюстрация. На практике чаще всего применяется другой метод, известный под названием RSA. Это более сложный метод, который при использовании ключей большего размера (от 1024 бит) обеспечивает практически такой же уровень надежности, как AES. В отличии от методов симметричной криптографии, методы ассиметричной криптографии требуют более частого и периодического обновления (хотя сроки актуальности алгоритма исчисляются десятками лет). Поэтому сейчас планируется переход с RSA на более современные методы эллиптической криптографии, которые позволят обеспечивать такой же, либо более высокий уровень надежности при значительном меньшем размере ключа. Хотя замечу, что RSA будет безопасным еще десятки лет.
Главное, что следует понять из всего этого, это то, что эти алгоритмы очень, очень надежные, поскольку они основаны на математических проблемах, которые не могут решить ведущие математики всего мира. Никакие военные ведомства каких бы внутренних экспертов они не имели, не могут соперничать с ведущими мировыми специалистами в этих областях и десятками университетов, где занимаются работами в направлении взлома старых и разработки новых алгоритмов. Криптографическое коммьюнити является экстремально открытым, все алгоритмы находятся в публичном доступе и до их допуска в соответствующие стандарты для применения в государственных и частных системах их тестирует все международное сообщество, пытаясь найти в них как теоретические слабости, так и используя все возможные практические методы взлома. До стандартов добираются только те алгоритмы, в которых не найдено ни одной даже теоретической возможной слабости (а уж если кому-то удалось взломать или просто дойти до каких-то практических результатов во взломе, то этот алгоритм снимается сразу же).
Однако поскольку я сам отлично понимаю, что такое "гарантия 100%" и почему ее нельзя достигнуть, то надо упомянуть здесь о двух (и только двух) возможностях взлома этих алгоритмов:
1. Находится некий гений, который все-таки находит слабость в алгоритме, которую до него пропустили сотни, если не тысячи, специалистов и он разрабатывает метод по его взлому. Вероятность этого равна практически нулю, поскольку, во-первых, как показывает история всех великих и не великих открытий, очень часто примерно в одно и то же время открытие совершается несколькими людьми (и еще несколько работают где-то в том же направлении). Так что если будет найдена уязвимость, то ее обнаружат почти наверняка и когда ее обнаружат, я могу сказать, что к ней отнесутся очень серьезно как на уровне самого сообщества, так и на уровне множества организаций, которые используют эти методы в своей работе. А во-вторых, этот гений должен будет еще и отказаться от мгновенного и мирового признания криптографического и математического сообществ и всех связанных с этим регалий (и денежных премий, а так же в перспективе пожизненного улучшения качества жизни) ради сомнительной возможности попытаться что-то взломать и тут же стать преступником довольно большего масштаба. К тому же для проведения такого взлома в любом случае нужны будут значительные материальные средства, которых у большинства попросту нет.
2. Изобретается квантовый компьютер. В силу самого принципа своей работы, квантовые компьютеры очень легко решают задачи, которые обычные современные компьютеры не могут решить в принципе. Работы по созданию квантового компьютера ведутся, но до достижения хоть каких-нибудь результатов еще пока очень, очень далеко, да и не все люди верят в то что квантовый компьютер вообще возможен.
Должен сказать, что в случае изобретения квантового компьютера, вся нынешняя система онлайн-банкинга и прочего, рухнет в одночасье, поскольку все их методы защиты (которые описаны выше) будет более-менее просто взломать (не говоря уже о защите всяких там Гмейлов).
Замечу, что квантовые компьютеры НЕ смогут решать NP-задачи, однако ни один из современных методов криптографии не использует NP-задачи (и не совсем понятно, как их можно использовать с этой целью).
Напоследок, следует рассказать о такой важной части любой криптографической системы, как хэш-функции. Эти функции применяются не только в криптографии, но и повсеместно вообще в информатике (например, CRC-функция это по сути простая хэш-функция), например, для подтверждения корректной передачи файлов. В криптографии чаще всего они используются для электронной подписи.
Что же такое хэш-функция? По сути это математическая функция, которая обрабатывает поток входящих данных и превращает его в строку текста фиксированной длины (причем этот текст состоит из строго определенных до этого символов, например только букв латинского алфавита и цифр). Особенность функции заключается в том, что в теории для каждого потока данных эта строка является уникальной. Хотя на самом деле это не так, поскольку длина-то строки фиксированная, а возможных данных для обработки бесконечное число, однако хэш-функции сделаны так, что вероятность найти два файла, которые бы дали один и тот же результат, практически равна нулю... К тому же особенность всех хороших хэш-функицй заключается еще и в том, что малейшее изменение хотя бы одного байта в файле приводит к "эффекту лавины", то есть результат функции меняется как минимум на половину. То есть даже если и найдутся два каких-то файла, которые дадут одинаковый результат, это будут очень разные файлы, один из них, скорее всего, будет очень большим, а другой гораздо меньше. Но файлы в рамках более-менее одного размера всегда и абсолютно всегда будут давать совершенно разные хэш-функции.
В нашем примере хэш-функции будут активно использоваться в избирательной системе, например в момент голоса, когда через хэш-функцию пройдет поток данных типа "имя избирателя" + "имя выбранного кандидата" + "точное время выбора" + "какой-нибудь текст, введенный избирателем" (опционально, это уже чтобы совсем исключить возможность проведения расчета всех возможных хэш-функций до выборов) и полученный хэш будет подтверждением того, какой именно выбор был сделан и когда именно.
2. Электронный паспорт
В любых выборах президента или правящей партии участвуют, как правило, только граждане данной страны. Для того, чтобы проведение электронных выборов было более надежным, им требуется электронный паспорт, хотя его наличие позволит легко решить и ряд других задач.
Что такое электронный паспорт? Предлагаю посмотреть на его реализацию на примере Испании... Сам паспорт представляет собой пластиковую карту подобную банковской. На ней имеется фотография владельца, напечатаны его данные, такие как имя, дата рождения, пол и социальный статус (который может быть статусом иммигранта, иммигранта с правом на работу, иммигранта с правом голоса на выборах, либо же гражданина, который еще и имеет право быть избранным). На обратной стороне имеется фотография отпечатка пальца владельца и ряд цифр с зашифрованными данными.
Однако самым интересным для нас является электронный чип, встроенный в карту. По сути дела это так называемый компьютер "с внешним источником питания", то есть он может работать только при подключении карты к другому устройству, которое и обеспечит его электричеством. Сам компьютер обладает всеми элементами, какие есть у обычных компьютеров, у него есть процессор с тактовой частотой около 4 Мгц, оперативная и постоянная память (часть которой можно перезаписать, а часть хранит данные перманентно) и своя маленькая операционная система.
Тут важно понять только одно - все это необходимо для того, чтобы карта могла осуществлять все необходимые операции со своей памятью, а так же операции необходимые для криптографических алгоритмов. То есть все это происходит внутри карты, без помощи всяких внешних устройств (хотя они подают питание на нее), а с внешним миром принцип ее общения такой же, как у вашего компьютера, который общается с другими через сеть (только вместо обычной сети для карты имеется специальный ридер для ее общения с чем необходимо).
Карта по сути дела полностью заменяет обычный паспорт и позволяет переносить с собой вообще все имеющиеся у человека документы, таким образом полностью избавляя людей от бумажной волокиты. Она так же может служить для того, чтобы врачи, скажем, скорой помощи могли быстро узнать всю медицинскую историю пациента. Сами документы могут быть записаны на карту только через правительственные сайты (либо компьютеры правительственных учреждений) с использованием описанных выше криптографических алгоритмов, причем расчет каждого алгоритма на стороне пользователя выполняется именно самой картой, а не его компьютером. Пользователь так же может ставить свою электронную подпись на любых документах, которая имеет такое же юридическое значение, как настоящая, а подделать ее гораздо сложнее. Подлинность правительственных сайтов может быть установлена с помощью тех же методов, что и сейчас, то есть посредством серверов, которые проверяют эти сайты на подлинность по многим параметрам, начиная от ip-адреса и заканчивая различными секретными параметрами этих сайтов, причем число серверов может исчисляться десятками.
Для доступа к карте (чтобы провести какие-либо операции через нее, либо посмотреть, что на ней есть) пользователь может использовать обычный пин-код, вроде тех, которые используются для банковских карт с теми же правилами (три неправильных ввода, и карта блокируется, идите в милицию для разблокировки или получения новой). Это можно сделать с помощью обычного компьютера и специального кард-ридера, который подключается через USB-порт. При этом сам пин-код вводится не через компьютер, а через этот внешний кард-ридер (у него есть своя цифровая клавиатура), так что никакие кейлоггеры этот пин-код не перехватят в принципе. Все криптографические операции, как уже было сказано выше, так же проводятся в самой карте, без малейшего участия компьютера пользователя и его операционной системы (это просто одна из частей незащищенного канала).
Электронный паспорт, несомненно, будет введен в будущем в подавляющем большинстве стран и уже вводится во многих странах Европы. Его наличие значительно упростит документооборот и сделает жизнь гораздо приятнее, легче и надежнее.
Однако, так как я говорю не только преимуществах, надо написать и о возможных уязвимостях.
Первая уязвимость, это возможное создание скрытых методов проникновения к данным карты в обход пин-кода еще на стадии ее производства. Если система введена верно, такого не должно быть в принципе (к каждой карте можно получить доступ только с помощью пин-кода; у каждой карты свой уникальный закрытый ключ, к которому нет доступа вообще ни у кого и он генерируется только внутри самой карты).
В принципе, если во время производства карт используется грамотный контроль со стороны как правительственных, так и неправительственных организаций, независимых экспертов, правозащитников, то вероятность подобных фокусов практически равна нулю.
Вторая уязвимость заключается в том, что в случае хищения карты, данные с нее можно будет считать физически, непосредственно из самой микросхемы памяти (хотя это крайне нетривиальный процесс). Эту уязвимость можно исключить используя алгоритм шифрования вроде AES и зашифровывая им абсолютно все данные на карте, за исключением тех, которые могут срочно понадобится без обязательного ввода пин-кода (например, для тех же врачей скорой помощи).
Как видим обе возможных уязвимости не являются очень опасными и их значительно меньше, чем уязвимостей и недостатков связанных с обычными бумажными паспортами.
3. Избирательная система
Как же можно реализовать на практике избирательную систему с помощью вышеописанных компонентов?
Предположим, что у нас проходят выборы президента или правящей партии. Выборы осуществляются через интернет и чтобы принять в них участие достаточно зайти на специальный сайт, залогиниться и просто поставить галочку рядом с именем понравившегося кандидата и нажать на кнопку, после этого подтвердив свой выбор так же своей электронной подписью. В том случае, если у человека нет компьютера и/или доступа в интернет, он просто идет на избирательный участок, где стоят обычные компьютеры и все необходимое.
У каждого гражданина уже имеется электронный паспорт, а так же особый идентификационный номер с пин кодом (это НЕ номер паспорта и НЕ пин-код карты). Они выдаются при получении документов.
Чтобы залогиниться на сайт используется этот идентификационный номер и пин-код. Он просто служит для того, чтобы к некоторым функциям системы электронного документооборота был еще более быстрый доступ, без необходимости использовать электронный паспорт. Но для любой серьезной операции уже необходим паспорт.
Каждому гражданину уже присвоен случайный номер (из настоящего генератора случайных чисел), который различается для каждых выборов. После логина этот номер сразу же виден. Нужно это вот для чего - на том же сайте есть публичный лист, где перечислены все эти номера и написано какой номер голосовал за какого кандидата (либо еще пока не голосовал). Никто не знает, кому именно принадлежит каждый конкретный номер, кроме своего собственного и при желании каждый может посмотреть свой номер в этом листе и убедиться, что там указан именно тот кандидат, за которого он голосовал. Этот же лист используется для подсчета результатов в реальном времени. Конечно, при желании каждый может рассказать другим, какой именно номер ему достался, но это происходит только по собственному желанию.
Для того, чтобы проголосовать, необходимо активировать карту посредством ввода пин-кода, она уже соединится с сервером и посредством криптографии подтвердит (электронная подпись), что владелец действительно сделал этот выбор. Этот выбор будет подтвержден датой и точным временем и его копия заверенная подписью будет хранится на карте (по желанию пользователя), либо на компьютере пользователя (мера против последующего изменения выбора пользователя).
Программное обеспечение, установленное на сервере, является Open Source, то есть его сможет скачать и проверить на наличие программных ловушек любой желающий. Чтобы гарантировать, что установленная на сервере версия является именно выложенной в сети задолго до выборов, компиляция будет происходить непосредственно перед выборами из этого же самого кода в присутствии независимых экспертов и наблюдателей, которые смогут проверить код с помощью хэш-функций, которые они сами же и принесут. Вообще у них будет полный доступ к оборудованию и всему программному обеспечению на сервере.
Когда выборы закончатся, функция голосования будет отключена и результат будет известен мгновенно (собственно, его можно будет видеть в реальном времени). Публичный лист с результатом голосования навсегда останется в сети и будет заверен хэш-функцией (еще одна защита от последующих изменений). Естественно, любой желающий сможет скачать этот лист в любой момент как после, так и во время выборов, заверить его собственной хэш-функцией, пересчитать результаты самому и так далее.
Поэтому никакие хакеры этой системе сделать ничего не смогут, даже если они как-то взломают сервер и начнут насильно менять результаты, это тут же будет замечено, а выборы остановленными. Максимум, что они смогут сделать, это заддосить систему, но это так же вероятно, как ддос google.com или youtube.com. Собственно, мощность серверов будет значительно ниже мощности серверов этих сайтов, поскольку выполняемая ими функция значительно легче, а вот надежность будет такой же или даже выше.
Таким образом система так же полностью защищена от подтасовок, поскольку вычисляется в реальном времени, и каждый может проверить факт того, что его голос был засчитан и каждый при желании сможет публично подтвердить свой голос и группа сомневающихся граждан всегда сможет проверить более-менее массировано правильность подсчета их голосов, причем с подтвержденным криптографическими методами доказательством факта их голоса.
Жду ваших комментариев, вопросов и предложений по взлому системы.
20 Комментариев
Рекомендуемые комментарии