Pull to refresh
0
0
Send message

Потому, что телефон это не PC/Windows и вы не можете на него "поставить" произвольную операционную систему. В Андроид (и в Линукс) нет API для драйверов — это просто неотделяемые куски ядра. Андроид в отличие от Windows это монолит.


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


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


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

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

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


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


которым не повезло оказаться в 90-е на прибалтике

Что значит "не повезло"? Их в Прибалтику под угрозой расстрела переселяли? Или они поехали с корыстными соображениями, за более высокой зарплатой и большим выбором товаров в магазинах, заведомо осознавая, что это временно оккупированная территория, но думая, что они сильнее, а кто сильнее тот и прав?


Что касается расизма в объявлениях, то непонятно, как вообще это можно считать нормальным.

Интересный способ. Но возникает вопрос:


Во-первых, это необходимость строгой синхронизации часов у передающей и принимающей стороны.

А нельзя ли обойтись без синхронизации часов, просто перебирая все возможные значения времени начала "информационного импульса"? Допустим, что один "информационный импульс" длится 2000 миллисекунд. Мы записываем эфир. Затем предполагаем, что импульс начинается с начала записи и пробуем декодировать. Не получилось — предполагаем, что импульс начинается с +1 миллисекунды от начала, снова пробуем декодировать. Не получилось — пробуем начать с +2 миллисекунд. И так перебираем все смещения до +2000 миллисекунд.


Такой алгоритм не позволит ли отказаться от часов?


И, конечно, хорошо бы указывать источник. Вы сами изобрели алгоритм или где-то "подсмотрели"?

Мне кажется, качество этой статьи невысокое. Она учит лишь умению бездумно копипастить код. Потому, что вы не аргументируете принятые решения, не объясняете ничего, а просто говорите: "скопируй этот код". Вы не учите.


Ну например, вы используете библиотеку tonic, но не объясняете даже, что она делает, а уж тем более, почему она выбрана из десятков других библиотек. А я не поленился и погуглил: это HTTP/2 сервер. Такую важную вещь вы не упомянули. А просто предложили бездумно ее использовать, не зная, что она делает.


Пойдем дальше. Почему вы выбрали протокол HTTP/2 для игры? Какие преимущества он дает? На мой взгляд, это плохой выбор, так как он использует TCP, а тот при потере пакета может подвиснуть на десятки секунд. В играх обычно используют UDP, и используют такой протокол, который выдерживает потерю пакетов.


Так как правильно использовать UDP, и с ним у нас возможна потеря пакетов, то посылать на сервер надо не события вроде "кнопка вверх нажата", а "ракетка переместилась в позицию Y". Иначе при потере пакета все рассинхронизируется.


Или, например, возьмем другой пример кода из первой части статьи:


[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>>

В статье нет объяснения, ни что значит первая аннотация, ни почему у main такой сложный тип возврата, что значит Box и что значит dyn. Ваша статья для новичков? Тогда надо объяснить. Или она для профессионалов, которые все это наизусть знают? Им она вряд ли нужна.


Кстати, странно, что main вообще что-то возвращает. Это же главная функция программы, и непонятно, кто будет обрабатывать этот dyn Box после ее завершения.


Или, например, вы пишете:


Оба поля обернуты в Arc<Mutex<>> потому что обращение к этим структурам будет многопоточным.

Зачем мьютекс в многопоточности — это понятно. Но зачем тут Arc (атомарно изменяющийся счетчик ссылок)? Опять же, объяснений нету.


Или, опять же, приведен сложный код без малейших объяснений:


let world = Arc::clone(&self.world).lock().unwrap().as_ref().unwrap().clone();

А точно так много функций нужно вызывать? И что они делают?


Далее, вы в клиенте и в сервере вы скопировали структуру Entity. Почему вы используете копипаст, а не вынесли общую часть в отдельный файл? Нелогично.


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


Далее, вы исходите из того, что ваш код будет вызываться ровно 60 раз в секунду. Но кто вам такое гарантировал в многозадачной ОС? Код может вызываться произвольное число раз в секунду и должен это учитывать. Например, если с момента предыдущего вызова прошло 2 кадра, то и ракетку надо сдвинуть не на 1, а на две позиции вверх. Опять же, ваш сетевой протокол такого просто не поддерживает.


И в заключение. Вы тут пытаетесь создать у не разбирающихся людей впечатление, что Раст — простой и удобный язык, и любой новичок, прочтя вашу статью, легко сможет написать игру. Как бы не так. Раст — сложный язык для профессионалов, а не для новичков. Если вы не знаете Си, Си++ (и всех его тонкостей с RAII, шаблонами, умными указателями), основ ассемблера, то лучше не лезьте в Раст. Раст рассчитан на опытных Си++ программистов, а не на новичков. Документация Раста очень многие вещи не объясняет или объясняет вскользь, рассчитывая что вы их уже знаете из опыта работы с Си++. Например, вы не найдете в документации нормального объяснения "умных указателей" для начинающих — ожидается, что вы знакомы с этой вещью, прежде чем браться за Раст.


Если вы новичок, вам больше подойдет Питон или Яваскрипт. Даже Го (который тоже не для новичков) будет проще Раста.


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


Страница говорит:


The str type, also called a ‘string slice’,...

Из этого можно только понять, что str — это некий тип, который по какой-то непонятной причине называют "string slice", хотя тут написано:


The slice type is written as [T]

Вот это я понять не могу. Если слайс обозначается как [T], то почему str — это слайс? Я не вижу в str квадратных скобок. Две документации просто противоречат друг другу. Одна утверждает, что у слайса есть квадратные скобки, другая — что str без квадратных скобок это тоже слайс. Как такое возможно?


Далее:


It is usually seen in its borrowed form, &str

Обычно str используется с амперсандом. А что будет, если мы используем его без амперсанда? Слово "обычно" подразумевает, что возможен и такой вариант. Где найти ответ?


Читаем далее:


A &str is made up of two components: a pointer to some bytes, and a length.

Хорошо, &str состоит из двух частей. Это понятно. А из чего состоит и что такое просто str? Где искать ответ на этот вопрос?


Или вернемся к обычным слайсам. Документация говорит:


Slice types are generally used through pointer types.
&[T]
Box<[T]>

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


&[T] это тип слайса. А что обозначает [T] без амперсанда? Это слайс или нет? Ответа нету.


Аналогично, документация не объясняет, почему в Box<[T]> амперсанда нету. Получается, что в каких-то случаях амперсанд нужен, а в каких-то нет, но какие тут действуют правила — непонятно.


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


  • &a — берет указатель и иммутабельно "одалживает" значение a
  • &T — обозначает тип указателя на определенный тип
  • &str — обозначает отнюдь не указатель на тип str, а специальную структуру из указателя и длины
  • &[T] — это я сам не понимаю, что такое: тип-слайс или тип указателя на слайс? В документации написано "'shared slice', often just called a 'slice'". Непонятно.
  • &[1, 2, 3] — это то ли указатель на массив, то ли слайс, я так и не понял. Знаю только, что его можно передать туда, где требуется &[T]

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

Нет, вы неправильно рассуждаете. Если мы одобряем принуждение ради некоего воображаемого "общественного блага", то мы можем на этом не остановиться:


  • для общественного блага необходимо, чтобы люди работали, а не бездельничали. Необходимо принуждать людей к работе (например, ввести штрафы и тюремные сроки для безработных более N месяцев).
  • для общественного блага необходимо, чтобы люди не просто работали, а работали много. Необходимо принуждать людей работать не менее 10-12 часов в сутки. На сон требуется 8 часов, так что у людей останется еще не менее 4 часов личного времени, что более чем достаточно. Нужно, чтобы люди работали как на вахте: проснулся, ушел работать, пришел, перекусил и лег спать. Только так можно обеспечить развитие экономики.
  • для общественного блага необходимо чтобы люди ехали работать на село, на Дальний Восток, на Крайний Север, развивать эти территории.
    Необходимо принуждать людей переезжать на эти территории. И, наоборот, ввести запреты для переезда из сел и малых городов в большие. Например, требовать документальное обоснование и подтверждение в местном исполкоме для желающих сменить место жительства.

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


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

Решением этой проблемы будут не новые ограничения, а строительство новых больниц. К примеру, в Москве в сжатые сроки построили ковидный госпиталь. Если его недостаточно, значит надо построить дополнительные. Или перепрофилировать какие-нибудь малополезные учреждения (вроде Дома Приемов Правительства или выставочных центров) в госпитали.


Ограничения не заставят эпидемию исчезнуть и никого не спасут от заражения. Просто она растянется на дольшее время. Сколько человек переболело за 2 года? Максимум процентов 10-20 от населения. Привилось 30 процентов. Ну тогда, получается, нам еще лет 5 жить с ограничениями. Причем все это время экономика будет ухудшаться, люди и бизнес будут терять доходы и это и так не в самой богатой стране.


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


По моему, дешевле построить дополнительный госпиталь, чем еще 5 лет гробить экономику.


Конечно, властям это выгодно: чем дольше длится эпидемия, тем дольше можно запрещать митинги и одиночные пикеты (особо опасные мероприятия). Но обычному человеку вряд ли это выгодно.

А я не понимаю, 1) зачем нужно кого-то заставлять прививаться и 2) почему не отменяются ограничения, хотя вакцина доступна всем желающим?


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


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


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


Или 1) я где-то ошибся, или 2) решения об ограничениях бессмысленные и идиотские, или 3) власти просто трусливые и боятся взять на себя ответственность, что если отменить ограничения и какой-то идиот-антипрививочник помрет, то вину возложат на них. Объясните, где ошибка в моих рассуждениях?


По моему, так все, что от властей требуется — это обеспечить любому возможность бесплатно получить прививку. Это сделано. Если кто-то решил не прививаться и помер из-за этого, то это явно не их вина. Что бояться? Отменяйте ограничения немедленно!

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


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


Покупателю выгоднее всего носить маску и анонимно расплачиваться наличными. Так он несет меньше всего рисков.


Надеюсь, покупатели будут рассуждать рационально, и ваш проект провалится и не окупится.

Вы не учли, что к "бесплатному обслуживанию" зачастую прилагаются платные СМС-уведомления. К примеру, у Сбербанка обслуживание карты бесплатно, но СМС-уведомления платные (60 р/мес), а без них вы не можете ни пользоваться личным кабинетом, ни платить картой в Интернете.


Аналогично у Альфа-карты СМС-уведомления стоят 99 р/мес или 1188 р/год. Не такая уж и бесплатная карта получается.


Кешбек я бы всерьез не рассматривал. Если вам обещают (как вы привели пример) кешбек в 30% то это значит, что услуга предоставляется с огромной наценкой и выгоднее поискать место, где она предоставляется с меньшей наценкой, чем переплачивать и надеяться, что вам что-то вернут.


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

Всё-таки CDN, в первую очередь, нужен для снижения задержки (RTT) для пользователей, находящихся физически далеко от вашего дата-центра.

Вот только большинство CDN рассчитано на иностранных пользователей, а не на россиян: у них может быть дата-центр в Европе, Азии, США, но нет центров в Калуге, Воронеже, Ростове — там, где живут пользователи российских сайтов. Соответственно, может получиться так, что CDN будет дальше от пользователя, чем арендованный в России сервер. Какой смысл в таком CDN? От иностранных CDN надо отказываться сразу. Плюс, как написано выше, используя иностранный CDN, вы рискуете попасть под бан Роскомнадзора и ваш сайт перестанет открываться.


Далее, если вы используете публичный бесплатный CDN, то вы не являетесь его клиентом и он вам ничего не обязан и не гарантирует. Я имею в виду ссылки вроде cdn.jsdelivr.net. Такое нельзя использовать в продакшене вообще — только для тестирования или разработки.


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

Я разбирал выложенный на Гитхаб код и могу ответить на некоторые вопросы.


Там было два блокчейна — публичный (который выложен) и приватный, который не публиковался. В приватный при подаче бюллетеня записывались:


  • хеш транзакции приема бюллетеня из публичного блокчейна
  • точное время подачи бюллетеня
  • идентификатор group_id (в зашифрованном виде, позже он расшифровывается), который одинаковый для одинаковых пользователей и таким образом позволяет найти бюллетени, поданные одним и тем же пользователем и учесть только последний. Алгоритм подсчета итогов есть в файле services/actual-ballots-service/src/transactions/tally_results.rs в коде приватного блокчейна.

Некоторым интересно, наверно, узнать, как получается group_id? Он формируется в "компоненте X". Он получался примерно таким образом: за основу берется sudir_id (id пользователя на сайте mos.ru, если я не путаю), он хешируется (HMAC) с добавлением какого-то ключа, отправляется в MDM (Master Data Management — код этой системы не опубликован), оттуда возвращается external_id, он хешируется еще раз с добавлением другого ключа, затем шифруется (обратимо) и этот id уже используется как group_id. При этом компонент X зачем-то логгирует отправленные и полученные из MDM данные.


Часть кода получения group_id есть в коде "компонента X", который для этого и предназначен. Так как кода MDM у нас нет, то восстановить полный алгоритм нельзя.


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


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


И тут возникает проблема, транзакции c method_id 1 и 4, содержат "voter_id" в виде "22443685531066461899103156899237857105006237160299631129744914447305194856993", а транзакции c method_id 5 и 6, содержат связанные поля voter_key и author в виде хеша

А вы не пробовали перевести это длинное десятичное число в шестнадцатеричную форму? Получается как раз 32-байтное 16-чное число.


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

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


method_id 9 — расшифровка голоса, таких записей в таблице "transactions" — 1319943, что значительно меньше выданных бюллетеней, они содержат информацию о расшифровке голоса в бюллетене, и эти данные содержатся в следующей таблице: "decrypted_ballots".
Почему их так мало, вопрос отдельный

Объясняют это тем, что подсчет долго шел, и чтобы его ускорить, отключили запись результатов расшифровки. Также говорят, что можно самостоятельно расшифровать результаты, используя приватный ключ голосования. Код на Раст с использованием библиотеки NaCl можно увидеть в https://github.com/moscow-technologies/blockchain-voting_2021/blob/main/blockchain/dit-blockchain-source.tgz в файле services/votings-service/src/schema/ballots_storage.rs


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

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


В то время, как последний блок был создан в 2021-09-19 21:19:07.902+03. Если это переголосования, а система должна блокировать возможность на 3 часа, тогда, это могло быть сделано только специальным ботом, который не учёл эту особенность.

Выдавать бюллетени перестали в 20:00, подавать бюллетени можно было до 20:15. Также по уверениям организаторов, бюллетени перемешивались и искуственно задерживались, чтобы нельзя было определить голосующего. Видимо, период задержки как раз и составлял до 10 минут. По концу голосования можно попробовать как-то определить параметры задержки.




Что касается недостатка данных — это верно. Не опубликован приватный блокчейн. Также, компоненты ведут подробные логи событий вроде: отправка СМС, успешная/неуспешная проверка кода, открытие бюллетеня, отправка бюллетеня, ошибки при отправке бюллетеня. Также, в "кабинет председателя" отправлялась информация об этих событиях (очень подробная: например, при создании бюллетеня в кабинет отправлялась ссылка на бюллетень и даже id сессии пользователя. Если председатель был быстр и злонамерен, он мог бы зайти в бюллетень раньше пользователя и сессия бы привязалась к нему, а пользователь бы получил отказ — см файл app/Component/Election/Keeper.php тут ).


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

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


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

В этих транзакциях нет информации о переголосованиях. То есть невозможно ни подсчитать точное число голосов за кандидатов, ни проверить, что от вашего имени не отправили второй голос.


Эти данные в приватном блокчейне, который не опубликован.

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


Картинки, я думаю, в несекретных чатах тоже не шифруются.

Мне кажется, лучше было бы, если бы пост на 100% был посвящен программе, которую вы пишете, ее описанию и особенностям. А не рассказу о том, как вы устанавливали линукс и какие языки программирования изучали. Хабр это все же не сборник историй "Жизнь замечательных людей".

Расскажите, как эта процедура помогла на выборах в Беларуси, Сирии, Туркменистане

Там эта процедура не выполнялась. Например, в Беларуси наблюдатели не допускались на участки и выборы проходили без наблюдения. И я не очень понимаю, чем бы тут помогло электронное голосование и криптография. Ну сделал бы Лукашенко голосование через сайт, и объявил что 99,9% проголосовали за него.


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


Условие защиты от мертвых душ, голосований и переголосований ботом — 100% явка,

То есть ваша система работает только в воображаемой ситуации при 100% явке. И не будет работать в реальности, где честная явка от 30% (муниципальные выборы) до 75% (президентские).


Далее, в вашей системе есть недоработка. Допустим, пользователь проголосовал и не видит своего голоса в блокчейне или видит подменный голос. Как он докажет, что он голосовал по-другому? Если он пойдет в суд, то будет его слово без доказательств против протокола ЦИК с подписями и печатями. Мало сделать блокчейн, должны быть предусмотрены законом способы его проверки. На этих выборах такого не было, и даже если бы вы увидели, что ваш голос не учтен, у вас не было никаких возможностей что-то доказать, так как законом не предусмотрено таких процедур. "Забыли" предусмотреть.


Также, ваша система не защищает от повторного голосования. Вы проголосовали за кандидата A и видите свой голос в блокчейне. А бот поменял ваш голос на голос за кандидата B и вы не можете этого увидеть, так как у вас нет ключа шифрования от второго голоса. И даже если вы бы моли увидеть, у вас нет никаких доказательств, что это не вы сами поменяли голос.


Доказательство выбора в суде — ответ сервера при подаче голоса, подписанный его ЭЦП.

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


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


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

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


Осталось всего ничего — найти еще 90 тыс. таких же мотивированных наблюдателей. Люди на выборы не хотят сходить, а вы им предлагаете такой подвиг совершить.

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


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

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

В бумажном голосовании есть продуманная процедура, которая позволяет удостовериться в честности подсчета. Вы "доверяете" криптографии, но сама по себе криптография ничего не гарантирует. Вот простые примеры:


  • регистрируются "мертвые души" и ведется голосование от их имени. Как вы можете доказать, что избиратель номер 1984646 — несуществующий человек? При этом не имея доступа к государственным базам в связи с законом об охране персональных данных?
  • в конце дня бот смотрит, кто еще не проголосовал, и голосует от их имени за кандидата X. Как вы обнаружите, что голосовал бот, а не реальный человек?
  • избиратель голосует, затем бот от его имени переголосовывает за кандидата X. Допустим, этот избиратель вы и допустим, что вы заметили, что ваш голос поменяли. Как вы докажете в суде, что не меняли голос? Какой документ вы можете предъявить в подтверждение своих слов?

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


Такой процедуры на сегодня нету.


Более того, как я понимаю, нигде в мире нет прозрачного электронного голосования. Везде оно опирается на "джентльменов", которым надо верить на слово.


Готового решения я тут предложить не могу.

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


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

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


Наблюдателям необходимо иметь возможность убедиться, что:


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

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


В данном случае список из 2 миллионов человек был доступен наблюдателям для визуального ознакомления (без возможности использовать средства автоматизации). В списке не было технических данных вроде IP-адреса, с которого отправлена заявка, МФЦ, через который подана заявка. Найти что-то подозрительное, или наоборот, убедиться, что все правильно, вручную в таком огромном списке малореально. Вручную нельзя делать выборки по списку, например, получить список телефонов, которые принадлежат более чем одному избирателю, или получить статистику распределения избирателей по участкам (чтобы сверить с количеством исключенных на конкретном участке), по адресам, по IP-адресам. Как проверить без автоматизации, например, что все 2 миллиона человек имеют правильную прописку? Никак.


Закон 67-ФЗ гарантирует возможность ознакомления со списками (это важный пункт, вчитайтесь в него внимательно):


  1. Член комиссии с правом решающего голоса и член комиссии с правом совещательного голоса:

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

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


Также, мне кажется, то, что у наблюдателей (ЧПСГ) нет доступа к техническим данным о заявках (IP-адреса), а у кого-то он есть, нарушает норму закона. Хотя тут можно сказать, что "а эти данные не у комиссии, а у ДИТ, а он по законам вам давать их не обязан".


Далее, важный момент — документальное подтверждение фактов и промежуточных итогов. Представьте, что в 12 часов вы видели в блокчейне одни блоки, а в 13 часов вы увидели совсем другие. Вы не можете пойти в суд с заявлением "я видел, там хеш поменялся". В суд нужно идти с документами, а у вас их нету. Если бы ЦИК хотел быть более прозрачным, то они бы каждые N часов составляли и выдавали всем копию акта, в котором указаны параметры блокчейна на текущий момент. Но такого не было, значит в случае подмены блокчейна у вас не было бы никаких бумажных следов. Другой вариант — цифровая подпись, но это опять же должен быть не хеш, а квалифицированная подпись по всем нормам закона, но такого не было.


ЦИК еще заявляет, что записи в блокчейн распечатывались на принтерах, но если у вас нет заверенной копии этих распечаток, то это ничего не меняет.


Теперь про процесс голосования. В процессе голосования избиратель 1) авторизуется через госуслуги 2) подтверждает свою личность по СМС 3) получает бюллетень. Это оставляет след из данных: IP-адрес, с которого заходили, ФИО с госуслуг. У наблюдателей не было доступа к этим данным, хотя по закону (см. выше) они имеют право знакомиться с "документами и материалами" комиссии.


Записи о голосовании якобы велись на блокчейне.

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


Судя по тем осколкам описаний, что удалось найти, верификацией блоков занимались всего 4 узла валидатора. Кто это были? ДИТ и ЦИК? Почему всего 4?

Потому что у них приватный блокчейн и они никого к нему не пускали.


У наблюдателей, как я понимаю, был доступ к "ноде наблюдателя". Это компьютер с Swagger UI, из которого вручную набирая на клавиатуре, без средств автоматизации, можно отправлять запросы к блокчейну. Не знаю, к какому — публичному или приватному. Опять же, вручную полноценно проверять огромный блокчейн невозможно.


В 20:00 у наблюдателей истек сертификат для отправки запросов. Таким образом, они были лишены возможности наблюдать за установлением итогов голосования. Хотя закон гласит:


Статья 30:


  1. Наблюдатели вправе:

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

.


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

Потому что в публичном блокчейне нет информации о переголосованиях. Она в приватном блокчейне.


Переголосование тоже плохо проверяемая технология. Например, как проверить, что граждане переголосовывали сами, а не кто-то делал это от их имени?


Бумажное голосование предусматривает много способов защиты от фальсификаций и возможностей для контроля. При разработке электронного про них "забыли".

Бумажная система дает возможность наблюдать, но если у людей есть желание. Если нет желания — то на нет и суда нет.


Электронная не дает такой возможности. Ее разрабатывает власть, которая заинтересована не в честных выборах, а в контролируемых. Поэтому она никак не может быть лучше бумажной. Возможностей наблюдения там не будет предусмотрено, уязвимости — будут. Оттого, что в электронной системе будут рисовать Единой России более правдоподобные (но все равно поддельные) 70%, а не 80%, ничего не поменяется.


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


Что-либо поменяется только если будет бумажная система + активное наблюдение. Например, выборы в Мосгордуму в 2019 году: единороссы еле-еле получили 50% мест, хотя претендовали на все. А сейчас благодаря электронной системе они получили 100% округов в Москве.


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


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

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


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


У наблюдателей из средств наблюдения был лишь доступ к просмотру блокчейна (непонятно, какого: публичного или приватного) через Swagger UI. То есть, нужно вручную вбивать с клавиатуры все параметры запроса и вручную с экрана читать ответ, без средств автоматизации. И доступ был отключен в 20:00, как только голосование закончилось.


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


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


Плюс более мелкие "оплошности". Например, не было такого, что ЦИК каждые N часов подписывает официальный документ вида "на X часов в блокчейне Y блоков, хеш равен Z". Без такого документа вы не можете ничего опротестовать в суде, так как ваши заверения "я скачал дамп и хеш там был равен X, а не Y" документом не являются и судья лишь посмеется над ними. Все эти хеши и дампы не имеют никакой юридической силы, юридическую силу имеют только правильно оформленные документы с подписью и печатью — а их оформление не было предусмотрено.


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


Выше привели заявление Путина, что электронное голосование будет внедряться дальше. Это можно понимать только как: "вам никто права голоса не давал. Какие нужны итоги, такие и нарисуем". Странно, что люди никак на это не реагируют, получается, они согласны с той ролью, которую им отвели? Или же большинство людей просто обмануты и верят, что голосование прошло честно?


Еще один момент, который меня огорчает — это отсутствие наблюдателей. В России всего 90 000 участков и если бы были 180 000 небезразличных, честных людей, наблюдающих за ними, итоги выборов были бы другие. Почему эти люди не нашлись? У нас в стране нет честных людей? У нас в стране всем безразлична честность выборов? Возможно, это были последние выборы, на которых можно было отстоять голоса.


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


@Farvardin, 23 августа:


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

И еще:


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

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


Или возьмем цитату из статьи @AnalogBytes:


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

Обещали: огромные возможности наблюдения. Фактически: приватный блокчейн московского голосования не публиковался, наблюдать за ним было невозможно. Зато были огромные возможности для фальсификаций с перерывом на обед. И наоборот, на "бумажных" избирательных участках в Москве удалось организовать наблюдение и установить объективные итоги голосования. По этой причине, наверно, бумажные выборы и заменяют на электронные.


Отвечу еще на один комментарий:


Предположим, я живу в Татарстане. Крупный регион, большие города есть. У ЕР 80%. Вы мне предложите доверить там бумаге (т.е. скажете, что 80% честно набрано) или голосовать электронно? Третьей опции-то нет.

В случае бумажного голосования вы можете пойти на участок и наблюдать за процессом и узнать реальный результат. В Татарстане 3 млн. избирателей, и значит, порядка 1500-3000 участков. Если вы соберете 6000 небезразличных людей (это 0,2% от числа избирателей), вы сможете организовать наблюдение на всех участках и получить достоверные данные.


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


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

Information

Rating
Does not participate
Registered
Activity