Обсуждение системы голосования, разработанной ДИТ Москвы

    Открытые исходники


    Недавно в открытый доступ были выложены исходники системы голосования, которая по всей видимости, и будет применяться на электронном голосовании по Конституции в Москве и Нижнем Новгороде.


    Данным посланием хабражителям я хотел бы открыть обсуждение того, что получилось у разработчиков, и как нам теперь с этим жить.


    Введение и просьба о помощи


    Эта разработка Департамента информационных технологий (ДИТ) г.Москвы, предыдущая версия которой вероятно, уже знакома некоторым из читателей: как я понимаю, именно она применялась на выборах муниципальных депутатов в прошлом году.


    В силу недостатка времени, очень кратко и поверхностно ознакомившись с предъявленными исходными текстами, а также пройдя тестовое голосование, я прошу хабр-сообщество о помощи в более глубоком анализе этого программного обеспечения с точки зрения его технических, административных, программных, сетевых и других уязвимостей, которые могут исказить волеизъявление граждан, доверивших свой голос этой системе.


    Мои заметки


    Что мне удалось понять к данному моменту из этих исходников, а также из других источников.


    Платформа


    Lumen PHP-Framework — веб-оболочка
    Exonum — разновидность блокчейна


    Как работает


    Вот как я понимаю работу системы.


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


    Код бюллетеня формирует транзакцию с голосом и передает ее на сервер, для включения в журнал транзакций. Транзакция зашифрована и подписана, что призвано защитить тайну голосования и неизменность голоса.


    В рамках обработки транзакции, выполняется печать (зашифрованной?) квитанции регистрации голосующего и квитанции с (зашифрованным?) голосом (согласно разъяснениям, на разных принтерах в разное время, чтобы исключить деанонимизацию по времени).


    Ключ шифрования формируется перед началом голосования, делится на части и раздается лицам из числа наблюдателей.


    После завершения голосования, ключ собирается и вводится в систему, что позволяет расшифровать транзакции и подсчитать голоса.


    Возможные уязвимости


    Доверяя использованным инструментам, я бы указал на следующие вероятные уязвимости, вытекающие из архитектуры системы и особенностей ее развертывания.


    Уязвимость 51%


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


    Регистрация голосующих


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


    Подтверждение личности на сайте mos.ru


    Данная уязвимость имеет более обширный контекст, нежели рассматриваемая система голосования.


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


    Заключение


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


    UPD


    Подкаст с разработчиками (один из них — автор коммитов в репозитории)


    UPD2


    Разбор ранней версии, оттуда можно кое-что почерпнуть, доступно только через прокси/VPN

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 80

      +9
      А блокчейн и журнал транзакций хотя бы публичны? Или джентльменам верят на слово?
        +5

        пока я так понимаю, что предлагают поверить на слово :) Хотя как мне кажется, есть возможность надавить

          +14
          Тогда эта система не имеет никакой ценности. Нет математической надежности от подделки — эта система ничем не отличается от обычной онлайн-голосовалки. Да и вся эта история попахивает каким-то фарсом изначально.
            +1

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

              +2
              Беда новых технологий в том, что 95% (а скорее 98-99%) людей и в том числе, казалось бы, весьма образованных, вообще не поймут, о чём вы тут говорите. Тётеньки из избиркома или судья в принципе не поймут и не въедут, что такое вычислительная сложность, про атаку 51% и прочее… И даже слушать не станут. Как там обычно в судебных решениях пишут: «Нет оснований не доверять показаниям [сотрудников полиции]...»
                0

                Есть такое дело, но у Голоса например есть представитель в рабочей группе по электронному голосованию, туда входит собственно и разработчики, так что он может озвучить выработанную позицию непосредственно компетентному адресату

              +1
              Простите, но скорее СМС голосования, ну вы понимаете о чём я.
          +24
          Уязвимость 51%
          Эта уязвимость давно и хорошо известна всем, кто даже не очень хорошо знаком с блокчейн-системами. Она заключается в том, что когда когда в одних руках сосредоточено управление более чем 50% узлов формирования блоков, система становится зависимой от честности владельца этих узлов. Нет никаких признаков, что у развернутой для голосования системы узлы формирования блоков распределены между независимыми вычислительными центрами. Это с высокой вероятностью означает, что развернутая система подвержена данной уязвимости.

          Все не так просто, Exonum это приватный блокчейн и использует Византийский консенсус, там будет всего несколько валидаторов (точно меньше 100), которые будут принимать блоки, чтобы переписать историю нужно завладеть 2*n/3+1 узлами. Только вот тут проблема сразу, что кажется, что все узлы валидаторы будут принадлежать ДИТ, поэтому осуществить подобную атаку легче легкого и что самое печальное — никто не сможет и близко доказать, что история блоков была переписана.


          Чтобы защититься от такой модели угроз в Exonum встроен механизм анкоринга, который периодически записывает хеши блоков в Bitcoin blockchain, который можно сказать, что поднимает неуязвимость Exonum до уровня Bitcoin, то есть хеш exonum блока был записан в Биткойн блокчейн, то уже невозможно откатить историю и остаться незамеченым.
          А вторая линия защиты — это независимые узлы аудиторы, которые просто реплицируют блоки от валидаторов и проверяют, что бизнес логика правильно работает.


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

            +2

            спасибо, очень полезная информация!

          • UFO just landed and posted this here
              0

              по ссылке — ветка voting2020 которая видимо, и будет использована нынче

              • UFO just landed and posted this here
              +21

              Какой смысл проверять блокчейн и его обвязку, если верификация избирателя происходит через Госуслуги? Даже если блокчейн работает хорошо, атакующий, особенно имеющий административный ресурс, может просто создать себе ещё избирателей. Мы не можем верифицировать, что на системах в день голосования будет именно этот код. Все это сводит смысл подобных проверок кода к нулю, к сожалению

              • UFO just landed and posted this here
                  –4

                  ну вот по мере сил и понимания, сделали опенсорс, если я правильно трактую действия разработчиков. Дальше — наша очередь, разбираться что они там наваяли

                  0

                  да, регистрация — одно из самых уязвимых мест

                    +6

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

                      0

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

                        +1

                        Ну так это легко обходится голосованием в последний момент, когда голос уже нельзя будет изменить. Нет, наверное какую-то схему, позволяющую митигировать проблему, придумать можно, но вот только она сделает саму процедуру недоступной большинству пользователей. Плюс есть ситуация каких-нибудь воинских частей, тюрем и тп, где, в принципе, доступ к процедуре голосования легко модерировать. Проголосовал один раз и досвиданья. А при оффлайн голсовании наблюдателям в такие места таки удается иногда попадать.

                          +1

                          Ну, в таких местах я полагаю, и оффлайн не особо помогает.

                            +2

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

                          0

                          должен заметить, что в обсуждаемой системе этой возможности нет

                            0
                            Можно просто попросить человека передать свои credentials и проголосовать за него. А заодно и пароль сменить, чтобы отменить не смог до конца голосования.
                              0

                              Ну, в точности так же можно и забрать у человека бумажный бюллетень. В этом смысле, эл. голосование ничуть не хуже.

                                +1
                                Не совсем. Бумажный бюллетень человеку выдают на участке, и будет странно, если он его получит, но не будет голосовать, а уйдёт с ним, а потом придёт другой человек, и, не подходя к сотрудникам участка, уже имея пачку бюллетеней, начнёт складывать их в урну. А ведь его ещё и сфотографировать в процессе могут.

                                А тут целому отделу людей на работе начальник может сказать — передайте мне свои пароли, иначе премию не заплачу.
                                  0

                                  Это повод для уголовного преследования как минимум за шантаж. В идеале можно просить премию в пятикратном размере чтобы про это никому не рассказывать.
                                  А с бюллетенями есть продолжение — их потом считают и в этом месте могут быть грубые нарушения. Наблюдатели от этого не спасают. Судя по отзывам — их рапорты поступают в /dev/null

                        –11
                        Latest commit
                        51aa430
                        on 7 Sep 2019

                        blockchain-voting
                        В данном репозитории для ознакомления представлен код системы электронного голосования, который будет использоваться на выборах в Московскую городскую Думу.

                        Цели и задачи репозитория
                        Репозиторий создан для ознакомления с исходным кодом системы. Несмотря на то, что направленность системы — электронные выборы, просим оставлять комментарии и открывать проблемы по техническоим вопросам. Все комментарии относящиеся к политическим высказываниям, будут удаляться.


                        я так понимаю автору даже лень было открыть и посмотреть что там опубликовано
                          +5

                          я же специально прямую ссылку на ветку поставил.
                          Active branches
                          voting2020
                          Updated 5 days ago by a-borodenkov

                          +1

                          Интересно, они тесты принципиально не пишут?

                            +1

                            Написано на "давай-давай" видимо...

                            0
                            Вот смотрю "blockchain-voting\elec2020\ballot\public\js\forms\mgik\election.js"
                            На сервер (/election/vote) отправляется содержимое транзакции. В транзакции голос, зашифрованный на ключе самого сервера. Где тут анонимность? Поправьте, кто знает, если не прав.

                            Заголовок спойлера
                                    //выбранный вариант
                                    var choice = parseInt($button.data('value'));
                            
                                    var encryptionKey = window.ditVotingParams.publicKey;
                            
                                    var encryptedBox = encryptor.encrypt(
                                        util.numberToLeBytes(choice),
                                        util.hexadecimalToUint8Array(encryptionKey),
                                        );
                            
                                    var rawStoreBallotTx = signer.getSignedTransaction(
                                        votingId,
                                        districtId,
                                        util.uint8ArrayToHexadecimal(encryptedBox.encryptedMessage),
                                        util.uint8ArrayToHexadecimal(encryptedBox.nonce),
                                        util.uint8ArrayToHexadecimal(encryptedBox.publicKey)
                                        );
                            
                            ...
                                    $.ajax({
                                        url: window.location.origin + '/election/vote',
                                        type: 'post',
                                        dataType: 'json',
                                        data: ({
                                            rawStoreBallotTx: rawStoreBallotTx,
                            ...
                                        }),
                            


                            Что возвращает signer.getSignedTransaction смотрю в:
                            «blockchain-voting\elec2020\frontend-library-source\frontend-lib\src\transactionSigner.js»,
                            «blockchain-voting\elec2020\frontend-library-source\blockchain-connector\src\transactions\storeBallot.js»,
                            «blockchain-voting\elec2020\frontend-library-source\blockchain-connector\src\transactionRequest.js»
                              0

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

                                0
                                Вот, видимо, обработчик election/voice записывает транзакцию в таблицу.
                                  0

                                  Что-то я заблудился, а идентификация голосующего — это вообще, какое из полей здесь? оно здесь точно присутствует?

                                    0
                                    Я исхожу из предположения, что сервер знает, кто к нему отправил голос. Хорошо бы, это кто-то опроверг. Кандидаты на идентификаторы это $guid, $sessId.
                                    Чтобы узнать сам голос, нужен доступ к ключу. Допустим, ключом владеют только наблюдатели. Но что мешает им открыть этот ключ?
                                      0

                                      то, что каждый из них владеет только одной частью ключа. На тестовом голосовании было 5 частей например.

                                        0
                                        Я исхожу из предположения, что сервер знает, кто к нему отправил голос.

                                        Ну, это не обязательно, на самом деле

                                    0
                                    А то, что анонимность обеспечивается наблюдателями это так и завялено где-то, не знаете? Это же очень странная анонимность. Здесь, про это точно нет. Но там и так много странного: «Расшифровываются голоса и подсчитывают результаты. Электронные голоса посчитают прямо в блокчейн-сети — это обеспечит безопасность данных»
                                      0

                                      анонимность если и обеспечивается, то шифрованием, не наблюдателями. Наблюдатели служат независимыми хранилищами частей ключа дешифровки. Это было упомянуто в рабочей группе например (см. ссылку в посте).

                                  –1
                                  Интересно глянуть
                                    0
                                    надо было на лампе писать :)
                                      +7
                                      Я делал в свое время исследования по применимости блокчейн-голосования, и есть несколько пунктов, которые достаточно критичны для того, чтобы в блокчейне там был хоть какой-то смысл:
                                      • SSI (Self-Sovereign Identity). Для тех, кто не знаком — грубо говоря, в этой концепции вы сами генерируете себе ключ, которым подписываете транзакции, где вам нужно себя идентифицировать и управляете уровнем раскрытия данных. Доверие в этом случае создается за счет того, что соответствие вашей личности и ключа подтверждают несколько независимых регистраторов. В системе, где ключи для подписи вам выдает государство — понятны все риски
                                      • Сохранение тайны голоса. Есть схемы zero-knowledge proof'ов, в которых можно считать агрегаты без раскрытия каждой отдельной записи. Не могу сказать точно, но кажется что это не используется и даже не планируется в данном конкретном голосовании
                                      • Механизм резистентности системы к процессу подкупа/принуждения к голосованию. Решается опять же через криптографию, где либо учитывается только последний голос (голосовать можно несколько раз), либо отсутствию возможности расшифровки голоса в принципе. Подкуп в таком случае становится резко невыгодным т.к. нельзя проконтролировать покупаемый голос. К сожалению, мы видим, в каких объемах идет мягкое и жесткое принуждение к голосованию на предстоящих выборах, и в том числе я на 95% уверен что при необходимости голоса будут расшифрованы и «неправильно» проголосовавших ждут последствия.
                                      • Публичный аудит и открытый API для создания альтернативных клиентов для голосования. Если нет публичного аудита — то ценность блокчейна сводится практически к нулю. Отсутствие альтернативных клиентов сосредотачивает риски на «официальном» клиенте — он может показывать то, что надо, а не то, что есть на самом деле
                                      • Постквантовые алгоритмы шифрования. Это может казаться уже паранойей, но за условные 20 лет мир может шагнуть очень сильно в направлении квантовых вычислений, и (что более страшно) скатиться в режим где всех неугодных будут забивать камнями.

                                      По пункту 1 я могу сказать, что сейчас это развивается семимильными шагами (но еще нет надежной инфраструктуры масштабов стран), пункты 2 и 3 в целом решаемы, пункт 4 находится исключительно на административном уровне (разрешить/не разрешить), пункт 5 (в сочетании с 2 и 3) делает это абсолютно невозможным.
                                        0
                                        1. Насколько я понимаю, в данной системе каждый голос подписывается и шифруется ключом, который вырабатывается перед голосованием, разделяется на части и хранится у наблюдателей до конца процедуры. Поскольку подписание выполняется непосредственно на странице бюллетеня прямо в браузере, я бы считал, что на сегодняшний момент, это достаточный уровень доверия. Конечно, SSI лучше, но такая схема мне представляется пока тоже вполне пригодной. По крайней мере, в таком виде, она еще долго не будет узким местом с точки зрения доверия всей системе.


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


                                        3. Да, эта система неустойчива к понуждению, так как не содержит никаких механизмов противодействия (хотя как обсуждается выше, переголосования тоже может быть недостаточно).


                                        4. Публичный аудит — его часть в виде аудита кода по кр.мере — мы сейчас и пытаемся осуществить, так что разработчиков следует имхо поблагодарить за эту возможность. Я думаю, что мы также должны добиваться использования анкоринга, независимых узлов аудита, а также создания сети независимых узлов валидаторов (о них — в одном из первых каментов).


                                        5. Думаю, это будет решаться в рамках развития самих инструментов блокчейна.


                                        +9
                                        На мой взгляд порочен сам подход. Частный блокчейн с ключами в руках владельца, которому мы не доверяем это уже смешно. Печать на разных принтерах со случайной задержкой это тоже смешно, когда есть логи транзакций, а владельцу мы заведомо не доверяем. Не может быть никаких ключей шифрования у недоверенной стороны.
                                        Более того я считаю описанный подход «бюллютень-голос-сохранение — подсчет» порочным для электронного голосования.
                                        Избиратель должен просто сам увеличить нужный ему счетчик на 1. Все. Да это должно быть защищено в том числе и от накруток. Но в итоге у избирателя должен остаться признак «проголосовал», а у избиркома набор готовых результатов. Все промежуточные стадии должны быть защищены, зашифрованы в оперативной памяти и исчезнуть сразу после изменения счетчика. Контроль это совпадение суммы счетчиков и количества проголосовавших.
                                          0

                                          Хорошее замечание. Наверно, концептуально это действительно лучше.


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

                                            +3
                                            А ничего не сделать. Когда концепция изначально неправильная — реализацию не исправить.
                                            Государство считает что должно защитить голосование от злоумышленников и реализует продукт в рамках данной концепции.
                                            Граждане считают, что главный злоумышленник и есть государство и защищаться нужно именно от него.
                                            Я пока не знаю, что такое «zero-knowlege» из комментария выше, но звучит хорошо и правильно. Open-source платформа, интегрированная с госуслугами на основе этого самого «zero-knowlege» после большой открытой общественной экспертизы. Вот тогда лично я задумаюсь об онлайн голосовании. А пока что это все «придуманный способ обмана» (с) не я.
                                            Государство генерирует ключ шифрования для меня. Ничто не мешает ему подписывать нужный результат моим ключом прямо на серверной стороне и учитывать, а мой голос тут же расшифровывать и в открытом виде складывать в отдельную табличку и отсылать куда нужно. А то что данного кода там нет прямо сейчас… ну не нужно путать пиар с реальностью. Моя паранойя не одобряет.
                                          –2
                                          Пригласите уже Виталика Бутерина и он вам всё разъяснит. )))))
                                            +1

                                            Я был бы весьма рад, если бы он вступил в эту дискуссию.

                                            –1

                                            В статье допущен ряд серьезных технических неточностей. Разберем их.


                                            Exonium — разновидность блокчейна

                                            Правильно Exonum.


                                            Уязвимость 51%. Эта уязвимость давно и хорошо известна всем, кто даже не очень хорошо знаком с блокчейн-системами. Она заключается в том, что когда в одних руках сосредоточено управление более чем 50% узлов формирования блоков, система становится зависимой от честности владельца этих узлов.

                                            Видимо, всем, да не всем. Сразу видно поверхностное владение материалом. Давайте рассмотрим подробнее, что же там внутри.


                                            В файле https://github.com/moscow-technologies/blockchain-voting/blob/voting2020/elec2020/dit-blockchain/services/votings-service/Cargo.toml можно обнаружить следующую информацию:


                                            exonum = "0.12.1"
                                            exonum-derive = "0.12.0"
                                            exonum-merkledb = "0.12.0"
                                            exonum_sodiumoxide = "0.0.22"

                                            Стоит отметить, что Exonum написан на языке rust. Согласно документации по консенсусу https://exonum.com/doc/version/latest/architecture/consensus/ этот блокчейн использует BFT. И то и другое — это плюсы данной системе.


                                            Есть серьезное отличие BFT от PoW. Второй тип подвержен атакам >50%. Коммит в этой системе не означает окончательного принятия блока, т.к. в последующей момент он может перетереться более длинной цепочкой.


                                            BFT работает совершенно иначе: если число “плохих” < ⅓ от общего набора нод, то консенсус проходит. В противном случае он блокируется при условии, что “плохих” нод < ⅔. Если же число превосходит ⅔, то можно закомитить любую информацию.


                                            Как правило BFT используют приватные ноды, а значит можно не переживать по поводу атак. Для приватных нод вообще можно использовать обычный консенсус. Но для голосования и межбанковских транзакций использовать BFT консенсус — то, что доктор прописал: быстро, эффективно, надежно. Rust дает преимущества в безопасности работы с памятью, а также преимущества в эффективном выполнении.


                                            Чем хорош Exonum? Во-первых, есть спецификация: https://exonum.com/doc/version/latest/advanced/consensus/specification/


                                            Помимо этого, есть формальное доказательство https://bitfury.com/content/downloads/wp_consensus_181227.pdf


                                            Я не вдавался в детали, но выглядит все крайне серьезно и скрупулезно. Тот факт, что ДИТ стал использовать уже проверенные алгоритмы, а не делал свой лисапед — похвальный факт. Здесь я их полностью поддерживаю.


                                            Выше уже указывали на проблемы приватного блокчейна. Если не будет возможность читать блоки — то тогда сам по себе блокчейн не нужен, т.к. всегда можно подделать цепочку, начиная с нуля. Поэтому если будет доступен блокчейн в реальном времени в режиме read-only — то можно будет легко доказать, а были ли изменения, или нет. При этом сама информация может быть зашифрована вплоть до самого последнего момента. А затем в самом конце предоставляется ключ и можно будет проверять сам контент.


                                            Однако сама процедура валидации блокчейна — это хороший вопрос, но по исходникам вряд ли что-то можно узнать, т.к. это вопрос дейплоймента и доступа к данным.

                                              +1
                                              Поэтому если будет доступен блокчейн в реальном времени в режиме read-only — то можно будет легко доказать, а были ли изменения, или нет. При этом сама информация может быть зашифрована вплоть до самого последнего момента. А затем в самом конце предоставляется ключ и можно будет проверять сам контент.

                                              Без анкоринга это будет весьма сложно, потому что всегда можно прикинуться шлангом и сказать, что это у вас у всех неправильные блоки. Впрочем, Exonum то как раз умеет в анкоринг, только его нужно настроить.


                                              Но что меня в сырцах смущает, так это полное отсутствие тестов, как это так вообще жить можно?

                                                +1

                                                Если блок будет подписан публичным ключом — то невозможно будет прикинуться шлангом. Например, каждый валидатор может подписывать свои сообщения и свои подтверждения своими ключами, и эти подписи включить в блокчейн. Тогда подпись будет означать, что реальный валидатор принимал участие в формировании блока, а значит нельзя будет "прикинуться шлангом".

                                                  0

                                                  Еще как можно, они могут вести вторую цепочку, подписанную этими же ключами, а потом выдать за оригинал. Кто им запретит?

                                                    –1

                                                    Запретит им это, приватный ключ валидатора. То, что они подписали в первой цепочке, нельзя использовать для подписи чего либо ещë. В этом смысл открытого/закрытого ключа.

                                                      +1

                                                      Они валидаторы своими ключами, которыми владеют подписывают каждый блок, что им мешает еще вторую цепочку вести?

                                                0

                                                Спасибо за детальный разбор. Я действительно, знаком с блокчейн-системами весьма поверхностно.


                                                О "проблеме 51%" я пишу скорее как о названии. Мне уже написали выше, что ключевым соотношением в данном случае, является 2/3, что впрочем, не отменяет основного вывода: при монопольном контроле всех узлов, подмена цепочки возможна и не отслеживаема.


                                                Я предлагаю сейчас "Голосу" настаивать на развертывании независимых узлов аудита. Не уверен, что они успеют об этом заявить до "голосования" по Конституции, но к осеннему единому дню голосования точно должны успеть.


                                                Правописание поправлю.

                                                +2
                                                Я не понимаю ответ на такой вопрос, без которого, как мне кажется, всё остальное бессмысленно: как убедиться, что сервер в день голосования будет выполнять заявленный код? Если сервер — чёрный ящик, который может внутри делать что угодно, то как минимум непонятно, как сохранить тайну голосования. Как максимум, возникает ещё много других вопросов вроде «вбросов билютней».
                                                  0

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

                                                    0
                                                    как убедиться, что сервер в день голосования будет выполнять заявленный код?

                                                    Поверить на слово. Очевидно же.
                                                      0

                                                      Судя по сарказму, вы считаете, что этого не достаточно, предлагайте свой вариант.

                                                    0

                                                    Хотелось бы поднять вопрос о тайне голосования. Оно действительно нужно? Почему нельзя открыто заявлять о своих взглядах и политических интересах? Если дело в страхе за собственную безопасность, зачем вообще эти голосования если не для антуража?


                                                    Я понимаю, что ещë живы воспоминания о днях, когда попасть в карательный дурдом или ещë дальше, за непопулярные взгляды было вполне реально. Но и то реально, что мы можем не говорить за кого проголосовали, а они — кто на самом деле победил.


                                                    У меня нет идей как сделать так, чтобы нельзя было ботоводить, можно было проверить свой голос и сохранить тайну голосования, без оговорок на чью-то честность. А у вас?

                                                      0

                                                      У нас за определенные взгляды хейтят, причем обьекты хейта постоянно меняются. Никто же не хочет, чтобы через 20 лет за обычные сейчас взгляды человека вдруг затравят.

                                                        0

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


                                                        Даже если эти меры принесут плоды через десять лет, то через двадцать — всë точно будет хорошо и меня не поместят в учреждение для слушателей нездоровой мелодии.


                                                        Пока проблема остаëтся частной и заметается под ковëр — там она и останется. Открытые голосования лишь вскроют дефект, а не создадут его.

                                                          0

                                                          Система голосования не призвана бороться с социальными дефектами, но она должна им противостоять, чтобы минимизировать их влияние на свободное волеизъявление голосующих. Реальность такова, что люди не идеальны.

                                                            0

                                                            Борьба с социальными дефектами не цель открытого голосования, а побочный квест. Также социальные дефекты не повод создавать чёрный ящик с обязательным доверием третьим лицам. В данный момент хоть и скрыт голос каждого отдельного избирателя, но есть информация по участку в целом, а вместе с ним приходит коллективная ответственность, которую вы не рассматриваете.


                                                            Реальность такова, что вместо демократии мы имеем проксикратию с простором для фальсификаций. А ещё нам страшно что-то менять, ведь мы боимся последствий.


                                                            Но тут я конечно лукавлю. Реальность субъективна и я не понимаю как подстраиваться под субъективные понятия.

                                                              0

                                                              Есть системы позволяющие проверить свой голос, лет 10 назад видел описание, проверить может только голосовавшие, почему не внедряют, вопрос :) но такая система позволяет собрать ключи с зависимых людей и проверить исполнение указаний :)

                                                                –1

                                                                Заметьте с текущей защитой, человек может, обмануть принудителей и проголосовать иначе, но может — не значит будет. Всё же вся эта затея с анонимным из страха голосованием, вне зависимости от возможностей работает на уровне инстинктов и человек которому страшно потерять свою работу [или чего там ещё у него], даже если имеет возможность игнорировать принудителей безнаказанно, не станет этого делать на всякий случай. А значит принудители безнаказанно продолжают принуждать принуждаемых. Своих целей добиваются, а доказать их нечистоту уже нельзя, т.к. всё анонимно. И выходит, что система которая должна была защищать от недемократичных элементов, наоборот — защищает их.

                                                            +1

                                                            В идеальном мире было бы конечно лучше, чтобы голосование было открытым, но я вообще не знаю как бы сделать чтобы при переходе к такому варианту все не превратилось в ад.

                                                              +2

                                                              Предлагаю оторваться от реальности, на которую мы не можем повлиять, и посмотреть на мир сквозь утопические очки. Какими могут быть выборы?


                                                              Во первых электронными. Во вторых по любому поводу и сколь угодно частыми. В третьих бессрочными. Они могут сохранять свойства проксикратии в качестве дополнительной, но не основной фичи.


                                                              Что всё это значит?


                                                              Проксикратия — это форма демократии без возможности организации частых выборов по разным поводам (это дорого и долго), а значит вместо реального решения по разным вопросам, выбирается «прокси» — доверенный представитель, который наделён правом решать за остальных.


                                                              Электронность — это цифровые выборы, а значит удалённые, в любое время и в любом месте. Что нам это даёт? Это удешевляет саму процедуру проведения голосования. Во вторых мы можем голосовать за абсолютно любого человека, по признакам не противоречащим конституции (привет изберкомократия).
                                                              Во вторых если взять в пример поправки в конституцию, то я буду голосовать против, т.к. согласен не со всеми пунктами, и если есть хоть один пункт с которым я не согласен — я не могу проголосовать за изменения. А ведь мог бы отметить пункты с которыми я точно согласен, с остальными либо не согласиться, либо проигнорировать если они не понятны.
                                                              Также мы можем голосовать в принципе за любую инициативу. Мы можем ограничивать круг голосующих лиц, например районом, если решение целесобразно только для них.


                                                              Бессрочность — на примере назначения доверенного лица (прокси). Мы могли бы подвести итоги в определённый день и час, избрав очередного прокси которому мы доверяем. Оказывается, что доверять ему было неразумно и мы отзываем свой голос. Как только такое проворачивает критическая масса электората, становится вопрос о смещении текущего прокси и назначении нового, не дожидаясь окончания оговоренного срока полномочий.


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


                                                              P.S. На этом предлагаю закончить мой полёт фантазии и начать ваш, на тему реализации с сохранением анонимности и прочим.
                                                              Если проводить аналогию с автомобилями, то в настоящее время реализуются гибридные электромобили с ДВС, чтобы иметь совместимость с легаси окружением. Но я верю, что мы перешагнём этот рубеж и сможем использовать всю силу цифровизации для создания более реальной демократии.
                                                              Единственная чего я опасаюсь, это как бы не вышла идиократия.
                                                              Но это совсем другая история.
                                                              В конце концов на ошибках учатся и когда люди начнут понимать, что их выбор реально на что-то влияет, они станут выбирать более осознанно.
                                                                +2

                                                                на тему проксикратии см.также fluid democracy, cloud democracy

                                                                  0

                                                                  Вообще некое рациональное зерно в этом всем есть, собственно, в эту сторону в целом и сейчас ведутся работы, насколько я помню.
                                                                  Другое дело — что вот в таком тезисном виде это больше похоже на прототип ЯП, который, пока дорастет до состояния 1.0 stable release пройдет 7 кругов багов, обрастет легаси: его хорошо бы выкинуть, но, блин, уже коммьюнити пользуется и т.д. и т.п.
                                                                  По этому все-таки в целом, стараются модифицировать то, что есть, или экспериментировать в песочницах (a la поднятие общедомовых чатов на уровень институтов).


                                                                  Проксидемократия чем-то отличается от репрезентативной? :)


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


                                                                  А вот если он все время будет сидеть в тисках поппулизма (ничего плохого в популизме не вижу) — может и какие-то важные вопросы (вроде той же защиты прав ЛГБТ в РФ) будут десятилетиями оставаться за бортом.

                                                                    +1
                                                                    В этот срок политик вполне может принять какие-то контр-интуитивные решения, подорвав доверие избирателей к себе, но при этом, если решения сработают в долгосрочной перспективе — получить мандат повторно.

                                                                    Я думаю, чтобы не подрывать доверие, они должны лучше объяснять, что именно они делают и зачем. Как дантист например.


                                                                    В долгосрочной перспективе тоже не без багов. Решения могут сработать по иным причинам, а лавры достаться непричастным отрядам яжеговорил.

                                                            0

                                                            Поскольку тайна голосования скрепно охраняется в большинстве стран мира — в этом есть какой-то смысл. А, насколько я понимаю, смыслов в этом несколько:
                                                            ⋅ исключить любое потенциальное давление в момент голосования. Уже несколько блогеров намедне вспоминали нарушение в СССР тайны голосования фактически разделением на голосующих против и за фактом того, что человек зашел в кабинку. При соблюдении тайны человек может проголосовать как угодно, даже если до кабинки его сопроводил конвой.
                                                            ⋅ предоставить «момент решения» (его влияние в электронной версии несколько снижено). Вроде как, многие избиратели принимают решение о том, как голосовать не загодя, а находясь в кабинке. И именно эти 1-2 минуты и дают возможность выдохнуть и это решение принять
                                                            ⋅ обезличивание результатов. В текущей системе фиксируется факт выдачи бюллетеня, но нет сопоставления бюллетень-избиратель


                                                            В электронной версии я не вижу особых причин считать предложенные нормы противоречащими:
                                                            ⋅ [проблема ботоводов] система авторизации по идее должна работать за УИК, который выдает бюллетень: он должен установить факт того, что избиратель реален и может голосовать там, где он голосует, после чего выдать или не выдать разрешение на голосование (условный токен). При этом о том, как избиратель проголосовал она знать не должна.
                                                            ⋅ [проблема проверки голоса] система хранения хэширует токен, выданный системой авторизации, и потом предоставляет результат по запросу. Тайна голосования при этом не нарушается, потому что нельзя по хэшу востановить личность, и нет обязательной проверки голоса. В то же время, это позволяет непосредственно каждому желающему произвести наблюдение за своим голосом, и в случае желания — зафиксировать нарушение. А нет такого желания — пожалуйста, токен в печь — и никто ничего не узнает.


                                                            А вот честность — как раз предмет этой дискуссии — а именно: кто обеспечивает консенсус относительно выполнения системы «а» и системы «б» своих функций (наблюдатели на обычных участках)

                                                              –1
                                                              ⋅ предоставить «момент решения» (его влияние в электронной версии несколько снижено). Вроде как, многие избиратели принимают решение о том, как голосовать не загодя, а находясь в кабинке. И именно эти 1-2 минуты и дают возможность выдохнуть и это решение принять

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

                                                                0

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

                                                                  +1
                                                                  Трамп победил благодаря особенностям избирательной системы США. По факту за него проголосовало на несколько млн человек меньше чем за Хиллари :)
                                                              +2
                                                              Оно действительно нужно?
                                                              Странный вопрос. Даже в Америке в 2016 году согласно (открытым, без тайны голосования) опросам побеждала Клинтон, а на самом деле победил Трамп. Что уж говорить о России.
                                                                0

                                                                Так там победа по правилам, которые Обаму до этого вполне устраивали, да и всю верхушку правящих элит в США т.к. в принципе лишают возможности поучаствовать в этой игре(кроме как в качестве шоуменов) любому человеку не из элит (или не представляющему их).

                                                              0

                                                              Результаты обсуждения — в новой статье

                                                                0

                                                                связь между голосующим и его голосом — это связь между ид транзакции и ее содержимым.


                                                                ид транзакции голосования вероятно содержится в или следует из рег данных голосующего.


                                                                https://www.golosinfo.org/articles/144459

                                                                  Only users with full accounts can post comments. Log in, please.