Медуза, паспорта и говнокод — почему номера паспортов всех участников интернет-голосования попали в Интернет

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

    Кстати, Минкомсвязь до сих пор исключает ЛЮБУЮ возможность утечки паспортных данных избирателей

    Между тем распределение серий паспортов выглядит вот так:

    image

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

    Что произошло?


    9 июля появляется материал Медузы Власти фактически выложили в открытый доступ персональные данные всех интернет-избирателей где они рассказали про архив degvoter.zip.

    Как найти архив degvoter.zip?


    Я нашел так. Внимательный поиск через Yandex привел меня к странице:
    vudu7.vuduwiki.duckdns.org/mk.ru/https_check.ege.edu.ru.html

    Там был найден текст «Https checkvoter.gosuslugi.ru degvoter.zip». Датировка на тот момент была 7.7.2020 (до публикации Медузы!), сейчас этот текст уже «переехал» на начало страницы и датировка изменилась.

    Сам архив был убран с сайта госуслуги, но его копия сохранилась в web.archive.org, откуда его скачали все заинтересованные в исследовании лица в том числе и я. Чтобы понять почему так произошло рекомендую обратиться к первоисточнику — файлу robots.txt на сайте ГосУслуги.

    Что внутри degvoter.exe?


    Сама программа degvoter написана на C# и представляет из себя написанное «на коленке» WinForms приложение, которое работает с sqlite базой данных. Файлы в архиве датированы 2020-06-30 22:17 (30 июня 2020 года). Видно, что приложение писалось в кратчайшие сроки, ибо на Камчатке в этот момент уже было 1 июля 7:17, а тот факт, что участки открывались там в 8:00 говорит о том, что дедлайн был как никогда близок (хорошо что электронно голосовали только Москва и Нижний Новгород).

    Код проверки паспорта:

    image

    Приложение как с архитектурной точки зрения, так и с криптографической — адовейший говнокод. И вот почему:

    Описание просчетов архитектуры и принципа атаки на восстановление индентификаторов паспортов


    В комплекте с программой находилась локальная БД в которой находилась таблица passports с двумя полями num и used. Где num было SHA256(<серия>+<номер>).

    Очень часто, когда программист без соответствующего опыта подходит к вопросам криптографии, он делает кучу однотипных ошибок. С одной из таких ошибок относится применение хэш-фукнции без какой либо обвески. Идентификатор паспорта состоит из 4-ех циферной серии и 6-циферного номера [xxxx xxxxxx]. Т.е. у нас 10^10 вариантов. Номер телефона, к слову, состоит также из 10 цифр [+7(xxx)xxx-xx-xx]. В масштабах современного цифрового мира это не такие большие цифры. Так один Гбайт – это больше 10^9 байт, т.е. 100Гбайт хватит чтобы записать все варианты. Вполне вероятно что их банально можно перебрать. Я измерил что в однопоточном режиме современный Intel Core i5 процессор перебирает все sha256 хеши для одной серии паспорта за 5 секунд (000000-999999). И это на стандартной реализации sha256 без каких либо дополнительных ухищрений. Т.е. полный перебор всего пространства на обычном компьютере займет меньше дня. Если же учесть, что перебор можно вести в несколько потоков, то средненький процессор справится с такой задачей за несколько часов. Это является демонстрацией факта непонимания разработчиком системы принципов использования хеш-функций. Но даже правильное применение хэш-функций при такой архитектуре не спасает паспортные данные от раскрытия, если противник имеет неограниченные ресурсы. Ведь человек получивший доступ к БД может за конечное время получить идентификаторы паспортов, т.к. проверка одного паспорта должна проходить конечное время. Весь вопрос только в ресурсах (хотя если бы здесь просто применили хэширование в пару миллионов раундов, даже такое спорное архитектурное решение, как распространение БД вместе с приложением, не привело бы к такому громкому эффекту, т.к. позволило бы защититься хотя бы от журналистов). Медуза всего лишь продемонстрировала некомпетентность людей, проектировавших эту часть системы.

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

    Архитектура на коленке


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

    Хэш в базе не должен вычисляться непосредственно из идентификатора паспорта. Это делается для того, чтобы хэши в базе нельзя было подобрать, используя существующие таблицы для перебора. Во-первых, нужно использовать стойкую-хеш функцию. Главный вопрос в том, КАК её нужно использовать. Возможных реализаций тут много, но по сути всё сводится к применению алгоритма в котором будут три параметров: тип хеш-функции, количество итераций, а также значение(я) которое нужно использовать для подмешивания к хэшу (оно будет общее для всех хешей). Конечное требование – внутри каждой итерации должен быть использована стойкая хеш-функция, а скорость вычисления хэша должна быть несколько единиц в секунду. Даже завладев БД с сервера злоумышленнику в этом случае потребовалось бы значительное время на восстановление всех данных.

    Каждое из клиентских приложений будет представлять из себя просто поле ввода + Http-клиент, которые отправляет запрос на сервер.

    Сервер работает только по HTTPS и только во время голосования и имеет ограничение в 1 RPS с IP. В качестве ограничителя RPS используем Redis, куда пишем в качестве ключа IP-адрес и TTL в одну секунду. Есть значение – запрос с IP не разрешен, нет значения – запрос с IP разрешен. Это даст возможность избежать перебора извне.

    Написанное таким образом наше, буквально из говна и палок, решение окажется на порядок более защищенным чем текущее degvoter. При этом разница во времени написания невелика и с сам процесс написания кода может быть распараллелен на 3 человек (сервер, win-client,android-client).

    Разберем возможные сценарии утечек.

    У нас есть следующие точки где можно получить информацию о системе

    1. Исходный код серверной части
    2. Скомпилированные файлы серверной части
    3. Серверная БД
    4. Клиентские приложения

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

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

    Выводы


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

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

    Утилита для демонстрации возможности восстановления персональных данных DegvoterDecoder находится в репозитории, посвященном анализу данных голосования. По-умолчанию она настроена на 8 потоков. В случае если вы уже скачали архив degvoter.zip и вы программируете на C# – вы без труда разберетесь в принципе её работы.

    github.com/AlexeiScherbakov/Voting2020
    AnalogBytes Conference
    Компания

    Комментарии 399

      +4
      у нас 10^10 вариантов

      значение(я) которое нужно использовать для подмешивания к хэшу (оно будет общее для всех хешей)

      А вот тут проблема, где хранить это общее значение? Как минимум сервер в нем нуждается и если соль утекла, останется вычислить хеши все тех же 10^10 вариантов.
        +4

        С самим номером и хранить соль. В чём суть — на каждый номер нужно будет полный перебор запускать, на каждый 10^10 вариантов проверить

          +4
          Если соль уникальная для каждого номера, тогда ок.
            +4

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


            Уникальная соль работает, когда она уникальная для какого-то одного идентификатора (логин), а перебирать надо другой (пароль).

              +1
              Подведу итоги:
              1. Уникальную соль на базе номера нельзя сделать, потому что это принципиально ничего не меняет
              2. Уникальную соль не на базе номера, например гуид или время, тоже нельзя, потому что как потом идентифицировать?
              3. Не уникальная соль может утечь с базой.
              Какие варианты остались?
                +5

                Неуникальная соль для борьбы с радужными таблицами + сложный долгий хеш.

                  +1
                  Ну да, какой-нибудь bcrypt/scrypt или PBKDF2.
                  +1
                  В качестве уникальной соли можно использовать, например, ФИО или дату выдачи паспорта.
                    0
                    А найти её там как, если нехешированный номер паспорта не хранится?
                      0
                      Да-да, пока вы отвечали, я уже понял, в чем тут проблема.
                        +1
                        Спросить у пользователя? Он ведь знает свое ФИО и дату рождения…
                          0
                          Да, да. Просто взять из паспорта любое поле в качестве соли. Дату рождения, выдачи, имя, фамилию, все вместе. Член УИК при проверке должен видеть паспорт перед собой по процедуре.
                            +2
                            Член УИК при проверке должен видеть паспорт перед собой по процедуре.

                            или не паспорт....


                            http://cikrf.ru/izbiratel/interesting/labzin/otv.html


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

                              +1
                              Справедливо, но авторы (менеджеры проекта) вот этого всего (судя по результату) то же не предусматривали.
                              +3
                              взять из паспорта любое поле в качестве соли. Дату рождения, выдачи, имя, фамилию, все вместе.
                              Во-первых, термин «соль»/«синхропосылка»/«IV»/… это данные, которые хранятся совместно с результатом криптографической операции, т.е. этот термин в данном контексте неприменим. Заметим так же, что хотя идея расширить область перебора сама по себе разумная, но в такой трактовке область перебора увеличивается незначительно, поэтому она ничего дополнительного не гарантирует. Скажем, если у нарушителя уже есть паспортная база РФ или её существенная часть (сотовые операторы, банки, и т.п.), всего ж, с точностью до порядка, 150 млн. записей.

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

                              Наверное, оставаясь в сравнительно “обезличенном” виде, можно было бы добавить собственно номера паспорта: дата выдачи, код подразделения, номер ранее выданного паспорта, но смысл такого добавления всё равно неясен.
                                +1
                                Во-вторых, действительный номер паспорта, в обезличенном виде, «персональными данными» не является

                                Тогда зачем Минкомсвязи устроило истерику «у нас там не номера, а непонятные значки» и «мы ничего не публиковали, кто устроил утечку, тот и виноват»?

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

                                  У Минкомсвязи (в истерике) и МВД могут быть разные мнения на сей счёт. А уж Медуза? Ну Медуза, уж придумает о чём написать, причём на любую тему, это ж её хлеб с маслом.
                                  0
                                  Вы абсолютно правы, написал не очень подумав. Более, как мне кажется, хорошая схема решения.
                                    0
                                    Да, там, термин «соль» применён корректно.

                                    В той схеме неплохо, что и рабочий код, и код подбора, могут работать в одинаковых условиях, т.е. многопоточно, векторно, и т.п. (с точностью до коэффициента, рабочий код проверяет ~1/2 базы, код опробования всю базу, но, вероятно, код опробования более оптимизирован)

                                    Но назвать «ту схему» «решением» — нельзя.

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

                                    Как бы, если взглянуть на возможности потенциальных нарушителей к опробованию номеров по сравнению с возможностью компьютеров избирокома или наблюдателей:
                                    • Вычислительные возможности одного суперкомпьютера, скажем, Сбербанка в 105 раз выше;
                                    • «Кул-хакеры» собирают ботнеты из 106 узлов таких же компьютеров;
                                    • Более крутых, наверное, можно и не обсуждать.


                                    При этом, если взглянуть на график распределение серий паспортов, можно заметить, что для раскрытия 80..90% номеров паспортов требуется осуществить не более 107 опробований. Т.е. если член избиркома или наблюдатель проверяет номер паспорта за ≃1 секунду, то более менее крутой нарушитель раскроет 80% номеров за ≃200 секунд.

                                    Таким образом, задачу защиты собственно номера паспорта «та схема» не решает.

                                    Мало того, «та схема» не решает и задачу защиты от критики со стороны пристрастных аудиторов. В самом деле, с точки зрения аудитора безопасности даже уже один раскрытый номер паспорта это уже вполне себе результат. Но, учётом того, что доля удалённо голосующих ≈ 5...10%, то каждые 10...20 опробований будут выдавать очередной номер паспорта (т.е. каждые 20...40 с даже для точно такой же машинки, как в УИКах).

                                    Лично я бы, за «решение» гипотетической задачи «защитить номера паспортов от раскрытия» мог бы начать думать бы, если бы потенциальный нарушитель мог бы восстановить номер паспорта с вероятностью не выше 10-2 в течении нескольких лет, как минимум миниморум. Ну, а поскольку, все мы люди, все ошибаемся, то для надёжного «решения» наши оценки сроков и вероятностей должны быть на много порядков лучше. Однако, ни в самой этой статье, ни в комментариях, увы, как мне кажется, нет ничего и близко к «решению» сей гипотетической «задачи».
                            –1

                            Суть в том что мы хэшируем не просто номер паспорта, а номер паспорта + что-то еще, чем усложняем перебор.

                          +5

                          Неуникальная соль — это вообще не соль, а перец.


                          Соль хранится вместе с хэшем. Откройте /etc/shadow на любом линуксе и посмотрите: там знаком $ разделены идентификатор типа хэш-функции, соль и сам хэш.


                          Смысл соли не в том, что она секретная — ровно наоборот. Смысл в том, чтобы удлиннить плейнтекст случайными данными настолько, чтобы rainbow tables ничего не дали.


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


                          Потому в дополнение к соли еще надо ооочень медленную и memory hard хэш-функцию. Argon2i, например. Этого бы вполне хватило, чтобы расшифровать было достаточно дорого и бессмысленно — в данном конкретном случае (нафиг нужны голые номера паспортов через три месяца, и зачем тратить десятки тысяч долларов на их расшифровку)?


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

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

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

                                0
                                С этого момента поподробнее. Как это у вас будет работать, извините?

                                Либо вы в миллион раз замедлите также и проверку каждого номера в приложении, либо ничего не замедлится и у переборщика…
                                  0
                                  Применительно к degvoter — никак не будет работать без требования впридачу к номеру паспорта ещё каких-нибудь данных для поиска соли в базе.
                                  Вы про это?
                                    0
                                    Я про то, что если в техзадании написано что вводится только лишь номер паспорта, то «ещё каких-нибудь данных» у вас нету. То есть придётся тупо перебирать уже в самой программе все варианты.
                                      0
                                      Претензии к тому, кто составлял такое ТЗ.
                                    0

                                    А в чем проблема с тем, что проверка номера паспорта в приложении займет пару секунд?

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

                                      Это если сделать много раундов. Если же делать один — то код усложнится, а устойчивость к взлому — не возрастёт. Зачем такое нужно?
                                        +2

                                        Для нормальной проверки из приложения какая разница, какая там соль?


                                        Как раз один хэш должен вычисляться 2-4 секунды на среднестатистическом современном CPU. Для проверки конкретного паспорта это вполне приемлемая задержка. А отбрутфорсить хэш уже будет настолько дорого, что это теряет всякий смысл.

                                          +2
                                          Для нормальной проверки из приложения какая разница, какая там соль?
                                          Нормальная проверка в приложении сводится к тому, что человек вводит номер паспорта (и только и исключительно его) — и получает ответ: голосовал человек или нет.

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

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

                                          А вы тут накрутили раундов столько, что у вас одна проверка две секунды занимает. Миллион раз по две секунды — это нифига не «приемлемое время для выдачи бюллютеня».
                                            0

                                            А, ну да, туплю :-)


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

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

                                              Радикальное решение — блум-фильтр, который можно настроить так, чтобы повторно проголосовать могли, скажем, 0.01% (или даже 1%: тут же важно, что блум-фильтр не даст вам простого способа определить кто именно может повторго головать, если у вас нет базы со всеми проголосовавшими, так что реальное влияние на результаты будет пренебрежимо мало).

                                              Но это требует обратной связи от разработчиков к постановщикам задач, что… в косконторе… нереально, увы.
                                                0

                                                Блум-фильтр — красивая идея, но всегда может возникнуть подозрение, что он настроен уж слишком специально. :-)

                                                  0
                                                  Это вообще большая проблема ещё с античных времён.

                                                  Но лучше всего её описывает Мерфи: Любая, даже самая сложная, проблема обязательно имеет простое, легкое для понимания, неправильное решение.

                                                  И дальше у вас дилемма: сделать то, что реально решает проблему — и получить полный ушат… ммм… «критики в прессе». Либо применить вот то самое… а потом ваши потомки будут вас проклинать «за развал страны».
                                              +1
                                              Алё, алё, алё! Для тех кто, в танке: типичный случай для данной программы — это не ситуация, когда паспорт в базе есть, а как раз наоборот — вариант, когда его там нет!

                                              Это не так: отметка о том, что человек зарегистрирован на электронное голосование (или откреплён на другой участок), у УИКа уже есть в бумажных списках. Незарегистрированных нет никакого смысла проверять программой.
                                                –1
                                                Миллион раз по две секунды — это нифига не «приемлемое время для выдачи бюллютеня».

                                                приемлемое. Думаете сотрудник УИК быстрее вписывает данные в реестр избирателей? Или давайте поговорим об эффективности "голосования на дому"?
                                                К тому же каждый участок формируется так, чтобы на нем было вполне внятное количество избирателей. Я не помню точных значений. Но вряд ли участок — это больше 10-20 тыс. избирателей, а скорее даже попросту несколько тысяч. На 5-6 членов УИК. Можете посчитать пропускную способность )

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

                                Я не безопасник, но уникальную соль можно получить из того что имеем.
                                В паспорте помимо номера есть и другие данные.


                                Солью может быть sha256(Последняя буква имени + Последняя буква фамилии)


                                Тогда итоговый хеш будет таким:
                                sha256(Номер паспорта + sha256(Последняя буква имени + Последняя буква фамилии))


                                Но я думаю самым разумным решением было бы не хранить эти данные дольше чем нужно (как и любые другие данные)


                                UPD: Уникальную в том смысле, что не общую соль для всех.

                                  +2
                                  Не, смотрите. Там член УИК вводит именно номер паспорта и больше ничего. Никаких других данных.
                                    0
                                    Сгенерировать соль из номера, будет достаточно.
                                      +3
                                      Так это и есть нестандартное применение хеша. Но этого недостаточно. Нужно чтобы хеширование шло в миллион раз медленней, чем просто вычисление одного sha256 хеша
                                        0
                                        Уязвимость не в том что sha256 слишком быстрый, уязвимость в том, что количество возможных вариантов конечно и не такое большое — 10^10. Нужно увеличить количество этих вариантов.
                                        Я бы взял хеш от номера, разбил бы его на 2 части, первую часть склеил с началом номера, вторую с концом и вычислил бы хеш от того, что получилось.
                                          +11

                                          Разве вы не изобрели просто новую хеш функцию?

                                            +6
                                            Посмотрите внимательно у вас всё равно количество входных данных осталось то же — 10^10. Просто усложнилась хеш-функция, которая стала составной. В этом как раз суть проблемы — соль неприменима в этом режиме использования.
                                              +1
                                              Да, вы правы. Проблема достаточно интересная, глубже, чем кажется на первый взгляд.
                                                +4
                                                Это как раз к вопросу почему при таких задачах нужны люди с опытом по криптографии/ИБ
                                                Правильно решить эту задачу может человек, который знаком не только с тем как работает хэш-функция, но и с методами атак на них.
                                                Вы же постепенно шаг за шагом задумываетесь о тех вещах, которые разработчик с соответствующим опытом уже знает :-)
                                                  0
                                                  Проблема стара как мир и имеет решение тривиальное до безумия. Тупо берёте произвольную соль и считаете SHA512(соль+номер) — миллион раз. Подбираете число повторений, чтобы вся ваша таблица обработалась за пару часов. Всё.

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

                                                      И да — возможно это не самое лучшее решение, да, но у исполнителей точно не было возможности на него влиять.
                                                  0
                                                  как раз в замедлении весь цимес. Если у вас скорость алгоритма 1 хэш в секунду, то вам на 1 паспорт понадобится 10^10 секунд, то бишь более 300 лет. Сверху все это солится как защита от радужных таблиц.
                                                    0
                                                    В замедлении свои минусы, нужно подобрать такое замедление, которое не задушит свой сервис, но при этом перебирать было бы достаточно долго.
                                                    Допустим одна секунда на хэш это многовато, допустим есть 100 миллионов избирателей с правом голоса, чтобы высчитать хеши для всех их нужно потратить более 1000 дней процессорного времени. Тогда чтобы уложиться в один день выборов, нужно не менее 1000 серверов только на вычисление хешей. Такие вот расчеты на коленке.
                                                      0
                                                      нужна 1000 потоков, а не серверов. Задержка не обязательно же лочит весь сервер. Поток вполне может отдавать управление на время ожидания
                                                        +1
                                                        Мне не известны хеш алгоритмы, которые в процессе вычисления чего то ожидают и процессор простаивает.
                                                          0
                                                          Думаю, из Rip van Winkle cipher можно сделать!

                                                          blog.valerieaurora.org/2007/10/24/amusing-cryptography-apocrypha-the-rip-van-winkle-cipher

                                                          :)
                                                            0
                                                            а кто мешает после отработки алгоритма подождать перед возвратом результата
                                                            result = sha512(input)
                                                            sleep 1
                                                            return result

                                                            условно
                                                              +1
                                                              Переборщик-то не будет ждать.
                                                                0
                                                                а, вы об этом кейсе. Я просто рассуждал в контексте того что предлагал ТС, когда вычисления и база на стороне сервера и требования к защите от перебора самих значений меньше.

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

                                                  Это тоже можно менять, например регламентом заставить вводить дату рождения

                                                  0
                                                  Я не безопасник тоже) Но такой вопрос, а чем не походят адреса ячеек памяти в которых хранятся данные? Уникальные для каждого. Или например какие-либо данные из кеша приложения, или другой области памяти? Тот же рандом символов.
                                                    0
                                                    Во-первых, ячейки памяти не уникальны, если только ОСь была скомпилена с рандомизацией памяти (что редко вообще делается). Данные из другой области памяти — тоже не рандом, можно использовать псевдорандом генератор, другой вариант микрофонные данные для тру рандома с компенсацией дискретизации. В любом случае соль нужна, можно даже использовать дату создания записи для соли. Вопрос в том, насколько это усложнит подбор. Если известна функция и общий набор данных подбор не такая сложная штука.
                                                      0

                                                      Если у нас нет идентификатора гражданина по которому можно сделать условный WHERE, то никакие другие поля той же строки таблицы, где записан хэш номера паспорта мы использовать не можем для проверки. Условие WHERE t.passport_hash = hash(CONCAT(t.created_at), :input)) будет работать недопустимо медленно на миллионах записей, а защиты толком не даст, если база утекёт. Только внешняя фиксированная соль, если из входных данных у нас только номер паспорта.

                                                        0
                                                        С номером паспорта никакая соль не спасет. Аргон или хотя бы бкрипт для замедления подбора. Соль нужна только для защиты от радужек. В данном да и в любом случае WHERE t.passport_hash = hash(CONCAT(t.created_at), :input)) принципиально равно WHERE t.passport_hash = hash(CONCAT(t.salt), :input)) потому что оба не предсказуемы и в таблицах не используются. На кой смысл тратить циклы на псевдорандом если можно получить аналог из данных, которые по-любому сохранять.

                                                        Аргон уже лучше. Но я бы для полной безопасности аргон на клиента закинул, тогда можно разделить сервер хранения данных и сервер авторизации (проверки входных данных — верен ли паспорт или нет).
                                                        В итоге пользователь ввел данные в клиент. Клиент отправил в сервер авторизации закриптованные данные ключом, что он может открыть (делается через общий публичный ключ). Сервер авторизации подтверждает данные аргоном на сервер записи данных. Сервер записи данных получает другой аргон от клиента и закриптованные данные. В итоге увод базу крипты ничего не получает, т.к. надо увести еще и базу авторизации.
                                                        Защитить сервер авторизации намного проще чем сервер с открытой базой данных вплоть до правил в железном фаерволе и отключить все остальное фаерволлом.
                                                          0
                                                          Защитить сервер можно, но что делать, если связь по каким-то причинам отсутствует? Как в таком случае проверить статус голосования?
                                                            0
                                                            Блокчейн? Прямое его предназначение. Первый голос будет считаться верным. Или я что-то не правильно понял?
                                                              +1
                                                              Приехали вы на дом для голосования. У вас на руках мобильный терминал с клиентской частью. А интернета, как назло, нету во всём городе. Какая-то зараза оборвала магистральный кабель, починят завтра утром. А перед вами гражданин, желающий проголосовать, и вам надо проверить, не проголосовал ли он уже электронно.
                                                                +2
                                                                Для того и есть блокчейн.

                                                                Мы его голос записываем с меткой секунд от текущего записанного блока (если его запись еще не в блокчейне). Как только синхронизируем блокчейн будет ясно.

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

                                                                И не нужно доверять. Если есть запись точь-в-точь секунда в секунду от блока такого-то — инвалидировать обе транзакции к чертям собачъим и маркировать как «еще не голосовал». Самая ранняя выигрывает.
                                                                  0
                                                                  Вот только голосование у нас тайное, и не записывается кто как проголосовал. Записывается только сам факт электронного голосования, чтобы не дать человеку проголосовать второй раз. При бумажном голосовании вообще известен только суммарный итог по участку. Как вы собираетесь не дать проголосовать дважды, если нет связи с базой уже проголосовавших электронно?
                                                                    0
                                                                    Это никак не мешает не учитывать сторону его голоса. Нам важен только факт его голосования.
                                                                      +1
                                                                      Хорошо. У вас есть результат по электронному участку, 100 за, 100 против. Есть результат по бумажному участку, 50 за, 50 против. Вы знаете, что три человека проголосовали дважды, как надо скорректировать результаты?
                                                                        +1
                                                                        Как сейчас это учитывается? Как сейчас уникальность голосования блюстят? Тебя проверяют на месте (авторизация), потом ты голосуешь без свидетеля (отправка транзакции) и уходишь. Верно?

                                                                        Ну так что мешает это реализовать электронно?
                                                                        Авторизация? Паспортные данные аргоном закрыты с солью. За кого проголосовал можно отдельно регистрировать, можно туда же или в отдельную бд. Условные саб-блоки можно вообще подписывать геоданными или ключом с улицей в зашифрованном виде. Методик туча, я не буду тут расписывать халявный алгоритм. Факт в том что подсчитать с криптографией можно лучше нежели сейчас и совсем необязательно привязывать голос к данным паспорта если можно подписывать тучу транзакций едино без указателя кто за кого проголосовал (грубо говоря как пункт голосования) (принцип работы шаффлера, монеро и зк-снаркс).
                                                0
                                                Полный перебор не нужен т.к:
                                                — номера паспортов не уникальны (не спрашивайте меня, я не отвечу), просто посмотрите на портал госуслуг и вспомните что там СНИЛС, а не номер паспорта. Подробностей тут не расскажу
                                                — в отличие от других кодов у него нет проверочного номера
                                                — первые 2 цифры серии паспорта — это код субъекта федерации(коды по ОКАТО), следующие 2 цифры серии — это номер года печати бланка, как правило соответствует или предшествует дате выдачи паспорта.
                                                — остальные цифры инкрементальны, но нет какого-то известного алгоритма как они распределялись по УФМС/ОВД для выдачи поэтому нельзя оценить по номерам паспортов, например, общее число выданных паспортов за год или дату выдачи конкретного.
                                                Об этом очень подробно написал Иван Бегтин у себя в ТГ канале.
                                                  +2
                                                  Сочетание «серия + номер» паспорта — уникально и однозначно определяет бланк паспорта. Но паспорт подлежит замене по возрасту, при утере, при смене имени и/или фамилии. При этом новый паспорт выдаётся на новом бланке, с другими серией и номером.
                                                  СНИЛС же выдаётся один раз и не меняется, поэтому может служить уникальным идентификатором.
                                                    +2

                                                    У человека может быть два СНИЛС. Так как Пенсионный фонд большой и неповоротливый, то разные его отделения используют разные СНИЛС. Это из практики и общения с ПФР.

                                                      0
                                                      Странно. У меня практика ровно противоположная. Мне оформляли первый раз СНИЛС в школе, где я подрабатывал. Потом я закончил универ и устроился на фуллтайм. Бухгалтер, не зная о школе, оформила СНИЛС ещё раз.

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

                                                      И это было много лет назад, больше 10… у них там регресс случился, что ли?
                                                    +2
                                                    Насчёт порядка нумерации паспортов надо наших солсберецких Петрова и Баширова спрашивать.
                                                      0
                                                      … следующие 2 цифры серии — это номер года печати бланка, как правило соответствует или предшествует дате выдачи паспорта.

                                                      Похоже у меня бланк из будущего.
                                                    0
                                                    Оно зашито в исполняемом коде сервера.
                                                    +3
                                                    Как правильно написано, серия и номер паспорта составляют всего 10 цифр. Сами по себе эти цифры не являются персональными данными, так что утечка этой базы никому ничем не грозит, да и защищать тут нечего.
                                                      +8
                                                      Именно. Она ничем не грозит. Но существование подобных программ с точки зрения программирования — это стыд и позор.
                                                      Второе — это чисто PR-проблема, если бы люди разобрались как работают хэши, сейчас бы мы Медуза не заявляла про то что паспортные данные попали в сеть. А ведь достаточно было всего лишь сделать сделать например миллион вложенных итераций хэша SHA256.
                                                        +10

                                                        Ну вроде простейший прямолинейный кусок кода, 10 лет не писал на C# и всё понятно). Вы сами говорите, что это ничем не грозит. Ну те, кто это делал думали также. В чём их проблема и почему стыд и позор тогда?

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

                                                          Сейчас же все огребают от заголовка «Медузы» про утечку «паспортных данных» — и сильно страдает паблисити, т.к. большинство людей словосочетание «паспортные данные» понимает как набор паспортных данных, а не один только номер.
                                                            +4
                                                            Сейчас же все огребают от заголовка «Медузы»

                                                            Но это уже совсем другая проблема («учёный изнасиловал журналиста»)
                                                              0
                                                              No man is an island entire of itself; every man
                                                              is a piece of the continent, a part of the main;
                                                              if a clod be washed away by the sea, Europe
                                                              is the less, as well as if a promontory were, as
                                                              well as any manner of thy friends or of thine
                                                              own were; any man's death diminishes me,
                                                              because I am involved in mankind.
                                                              And therefore never send to know for whom
                                                              the bell tolls; it tolls for thee.


                                                              Не бывает изолированной проблемы в вакууме, это всегда цепочка проблем, гасить которую чем раньше — тем проще и лучше.
                                                            0
                                                            Личные данные как никак утеряны. Как минимум пользователям не хочется чтобы их данные вот так вот просто могли утекать от гос органов.
                                                            Да и в + к клиент-серверной — обновлять проще, поддерживать тоже, а также на ходу менять алгоритмы шифрования и обеспечивать безопасность не только данных, но и приложения. + найдутся люди которые захотят и серв ломануть, возможность подловить или найти себе специалистов (но это так скорее вымысел).
                                                            0
                                                            А ведь достаточно было всего лишь сделать сделать например миллион вложенных итераций хэша SHA256.

                                                            А можно тут по подробнее? Просто для не посвещенных не очень понятна фраза «миллион вложеных итераций»
                                                            Т.е. для вычисления hash делаем не
                                                            hash = sha(номер+соль), а
                                                            i = 1 000 000;
                                                            hash = номер + соль
                                                            while(i --> 0) hash = sha(hash);
                                                            ?
                                                            И уже учтенные значения вычисляем так же и сравниваем hash?
                                                              0
                                                              И уже учтенные значения вычисляем так же и сравниваем hash?
                                                              В смысле — проверяем на каждом шага из миллиона? Нет. Просто тупо вычисляем sha(sha(sha(...))) миллион раз.

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

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

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

                                                              PS: если защищать там нечего, почему тогда база не plaintext?
                                                                +4

                                                                Почему это не являются? По ним можно однозначно идентифицировать человека? Можно. Всё, это ПД.

                                                                  +4

                                                                  То есть если я сейчас здесь напишу десять неких цифр, например, 2003 812958, то все — я на ваших глазах персональные данные разгласил? Ну-ну.

                                                                    +11
                                                                    Нет, потому что это просто набор цифр без всякого контекста. Но в том случае, о котором сейчас идёт речь — контекст есть. То есть уже сам факт наличия или отсутствия определённого номера паспорта в этом множестве несёт дополнительную информацию. Например, работодатель-редиска может проверить, голосовал ли его сотрудник.
                                                                      +3

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

                                                                        +1
                                                                        Хорошо. Берем случайные цифры, идентифицируем по ним человека и что? Мы получили доступ к ПД? Безо всякого доступа к данным электронного голосования, реверса хешей и всей это ненужной работы?

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

                                                                        Тогда возникает вопрос — а где на самом деле идет реальная утечка ПД?

                                                                        Насколько я понимаю, проблема в электронном голосовании, да еще с растяжкой по времени совсем иная. Проблема в том, как показала практика, что тут открывается большой простор для махинаций — люди (и это не единичный случай) голосовали по 2-3 раза в разных местах. И это мы еще не знаем сколько там было фейковых голосов, которые были просто вброшены в электронную систему.
                                                                          +3
                                                                          Факт голосования тайной не является.

                                                                          То, что избиратель пришёл на участок, взял бюллетень и опустил его в урну, не только видят от единиц до десятков человек, но ещё и снимается на камеры.
                                                                            +1

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

                                                                              +2
                                                                              То, что избиратель пришёл на участок, взял бюллетень и опустил его в урну, не только видят от единиц до десятков человек, но ещё и снимается на камеры.

                                                                              или не опустил в урну, или опустил в урну (если это не КОИБ) пустой лист, а бюллетень вынес с собой? Или сделал бюллетень недействительным — например, путем заполнения его "не по инструкции"

                                                                                +1
                                                                                Что вам мешает проделать это всё на электронном голосовании?
                                                                                  +2

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

                                                                                    0

                                                                                    Была новость, что кто-то через веб-консоль заслал навалидный бюллетень, то есть испортил его.

                                                                                      +1

                                                                                      Я видел в результатах РОВНО 1 НЕВАЛИДНЫЙ электронный бюллетень. Вообще с трудом представляю как это возможно ) Но это только говорит об уровне разработки, в которой на беке нет валидации аргументов )

                                                                                        +2
                                                                                        Смотрите: перед отправкой бюллетеня на сервер он шифруется открытым ключом системы голосования, при этом закрытый ключ в этот момент вообще никому не известен, он был сгенерирован до начала голосования, разделен на части и роздан 5 «хранителям ключа» — так что «провалидировать аргументы на беке» при всем желании в ходе голосования будет невозможно, от пользователя приходит зашифрованное сообщение, которое бекенд должен просто сохранить, никак не проверяя (ну разве что длину его можно проверить в этот момент).
                                                                                          +1

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

                                                                                            +2
                                                                                            Нет, ни в коем случае. Любой нормальный протокол тайного голосования требует шифрования на стороне клиента. Утечка по сайд-каналам (через внедренный со стороны пользователя js, например) — это гораздо меньший риск, чем вот такое явное «нетайное» голосование с шифрованием только на бекенде.
                                                                                              0

                                                                                              О, правильно говорите, но тогда алгоритмы фронта и бека должны быть открыты. Почему я должен верить в то, что там действительно правильно реализованное шифрование, а не условный XOR? Или у тов. майора нет ключа дешифровки (причем у него он появился случайным или намеренным образом)?

                                                                                                0
                                                                                                > Почему я должен верить в то, что там действительно правильно реализованное шифрование, а не условный XOR?

                                                                                                github.com/moscow-technologies/blockchain-voting/tree/voting2020/elec2020 — изучайте.

                                                                                                > Или у тов. майора нет ключа дешифровки (причем у него он появился случайным или намеренным образом)?

                                                                                                Закрытый ключ разделен на части и роздан 5 «хранителям ключа». Или вы считаете, что Мелконянц из «Голоса» тут же сдал свою часть ключа кому надо?
                                                                                                  0
                                                                                                  github.com/moscow-technologies/blockchain-voting/tree/voting2020/elec2020 — изучайте.

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


                                                                                                  Или вы считаете, что Мелконянц из «Голоса» тут же сдал свою часть ключа кому надо?

                                                                                                  почему я вообще должен ему доверять ?

                                                                                                    0
                                                                                                    > гарантии того, что в проде тоже самое, что и на гитхабе?

                                                                                                    Как минимум клиентскую часть проверить на соответствие опубликованной вы можете.

                                                                                                    > почему я вообще должен ему доверять?

                                                                                                    Почему вы вообще должны кому-либо доверять? Я бы вообще спросил так: почему вы с такими параноидальными вопросами пишете комментарии на Хабре, а не живете натуральным хозяйством на заимке в тайге?
                                                                                                      0

                                                                                                      отвечу так — "если вы параноик, то это не значит, что за вами не следят" (с) /ну, про не-параноика тоже верно)

                                                                                                    +1
                                                                                                    Толку от этой ссылки? У нас нет возможности проверить соответствует ли ее содержимое тому коду который реально работал на фронте и бэке, да и закладки в чужом и недокументированном коде искать тяжелая и неблагодарная работа. Я уже писал Вам что реальной проверкой стало бы создание альтернативного фронта, но серьезных возможностей для подобного действия создано не было.
                                                                                                      –1
                                                                                                      > создание альтернативного фронта

                                                                                                      Вы только что создали строчку в таблице оценки рисков — потому что тут же будут созданы не один, и не два, а несколько сотен «альтернативных фронтов», которые будут:

                                                                                                      — голосовать всегда «за»;
                                                                                                      — голосовать всегда «против»;
                                                                                                      — записывать 100500 параметров пользователя, вплоть до размера ноги и клички собаки;
                                                                                                      — просить от пользователя номер банковской карты и три цифры на обороте;
                                                                                                      — делать много чего странного.

                                                                                                      Готовы это обсудить?
                                                                                                        +1
                                                                                                        Не вижу с этим проблемы. Пользователь в любом случае вынужден доверять какому-то источнику проверившему за него фронт. В моем варианте у пользователя будет выбор кому доверять. В существующем выбора нет — пользователь должен слепо верить организаторам.
                                                                                                          0
                                                                                                          Я просто оставлю здесь ссылку на комментарий ниже: habr.com/ru/company/analogbytes/blog/510512/#comment_21850458
                                                                                                            0
                                                                                                            К чему Вы это? С проблемой описанной по ссылке можно бороться только разрешением множественного голосования, это совершенно независимая тема.
                                                                                                              0
                                                                                                              Я к тому, что вы комментарием выше предложили максимально облегчить создание такого «скомпрометированного клиента».
                                                                                                                +2
                                                                                                                Скомпроментированный клиент в любом случае будет создан. Это следует принять как аксиому и строить систему исходя из этого — она должна иметь возможность с такой ситуацией справиться. Security through obscurity никогда не работает. Выкладывание исходников вообще худший вариант в этом смысле — создать скомпроментированный вариант из рабочего гораздо проще чем рабочий из скомпроментированного.
                                                                                                                  0
                                                                                                                  > Security through obscurity никогда не работает.

                                                                                                                  У вас есть возможность объяснить эту азбучную истину представителям ЦИК?
                                                                                                  +2
                                                                                                  Когда про электронное голосование рассуждают технари, то они нарушением тайны голосования считают перехват трафика по дороге к бэкенду. Но на практике гораздо более вероятное нарушение тайны электронного голосования — это начальник за плечом.
                                                                                                    +1

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

                                                                                                      +1
                                                                                                      Техническими средствами с этим можно бороться давая возможность пользователю голосовать более одного раза. Либо выдавая ему два пароля (истинный и ложный) которые он сможет использовать и которые будут для стороннего наблюдателя неотличимы, но в зачет пойдет только голос с истинным паролем. Либо просто засчитывая только последний поданный голос. Второе по всей видимости проще и понятнее, но первое интереснее тем что там можно разрешить пользователю проверять зачли ли его голос.
                                                                                                        +1
                                                                                                        Просто технические обсуждения того, на клиенте или на сервере лучше шифровать голоса для обеспечения тайны голосования, напоминают выбор замка для сарая, у которого нет задней стены.
                                                                                                          0
                                                                                                          Ну в существующей схеме — да. Но для более совершенных реализаций это вполне актуальный вопрос.
                                                                                                        +1
                                                                                                        Я думаю что на практике как раз проще организовать перехват трафика по дороге к бэкэнду. В этом сценарии начальнику достаточно посадить пользователя голосовать на заранее скомпроментированном устройстве. В текущей схеме голосования, к примеру, по моим прикидкам достаточно установить на компьютер специальный корневой сертификат для организации MITM атаки и разместить аппарат для проведения этой атаки в локальной сети. Сертификаты поставят сильно заранее «для поддержки отечественного шифрования», «меры обеспечения безопасности» и тому подобных вещей — сами по себе они не криминальны. А дальше директор предприятия получит от неизвестных небольшую коробочку которую нужно просто воткнуть в сеть и предложит сотрудникам проголосовать на территории предприятия. Это проще чем стоять у них за спиной и практически не обнаружимо на уровне голосующих сотрудников и наблюдателей.
                                                                                                          +1
                                                                                                          этом сценарии начальнику достаточно посадить пользователя голосовать на заранее скомпроментированном устройстве.

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

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

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

                                                                                                                +1
                                                                                                                Для схемы с двумя паролями — да. Для схемы с зачетом последнего голоса достаточно просто проголосовать повторно с другого (не скомпроментированного) устройства.
                                                                                                            +1
                                                                                                            Проще? Заставить, я не знаю, директора какого-нибудь ФГУП-а или даже просто школы установить корневой сертификат, заготовить стопку коробочек и развезти по предприятиям?

                                                                                                            Проще написать директору приказ по ведомству «Обеспечить возможность голосования сотрудников», на словах добавив «Ну вы же понимаете...» Дальше пусть сам выкручивается.
                                                                                                              +1
                                                                                                              Стопку коробочек заготовят другие, директор просто получит одну по почте или в руки. Корневой сертификат поставит местный админ один (1) раз задолго до дня голосования в рамках какого-нибудь приказа по улучшению безопасности.
                                                                                                            0
                                                                                                            А у вас правда во время голосования за плечом стоял начальник?
                                                                                                            0
                                                                                                            Кстати, а как «нормальный протокол тайного голосования» может обеспечить то, что регистрируемые голоса вносятся живыми людьми, а не ботофермой с тысячей аккаунтов и не скриптом на соседней машине в сети ЦИКа, которому даже аккаунты не нужно создавать, достаточно доступа на запись в базу/блокчейн?
                                                                                                              0
                                                                                                              > ботофермой с тысячей аккаунтов

                                                                                                              У вашей ботофермы есть тысячи подтвержденных аккаунтов в госуслугах, со всеми положенными вещами вроде СНИЛС и ИНН?

                                                                                                              > скриптом на соседней машине в сети ЦИКа, которому даже аккаунты не нужно создавать, достаточно доступа на запись в базу/блокчейн

                                                                                                              При разделении регистрации и голосования между двумя ведомствами (условно Ростелеком и избирком соответственно) избирком может, и рад бы вбросить — но не имеет доступа к регистрации, а Ростелекому (или другому оператору системы регистрации) голосование либо параллельно (какие-нибудь выборы муниципальных депутатов по району Новое Бенево), либо должно контролироваться наблюдателями по спискам избирателей.
                                                                                                                0
                                                                                                                Это точно так же как ЦИК формально независим от властей, а УИКи имеют большую независимость от ЦИКа. На самом деле мы видим явно централизованные фальсификации. Внедрение ещё одного игрока при нашей порочной системе поможет слабо, хотя чем больше здесь децентрализации — тем лучше.
                                                                                                                  +1
                                                                                                                  > явно централизованные

                                                                                                                  Не совсем, тут довольно много заинтересованных сторон (и что для вас покажется совсем удивительным — некоторым нужны именно неискаженные результаты).
                                                                                                                    +1
                                                                                                                    Это не отменяет того, что указ на фальсификации явно централизованный. На местах — да, выкручиваются как могут. Есть кластеры регионов с очень похожим почерком фальсификаций, а есть те, где фальсификаций меньше. Есть те, где подсчитано более-менее честно (с 2012 по 2019 год таким честно считающим регионом была Москва). Но если бы это были перегибы на местах — графики у Шпилькина были бы совершенно другие.

                                                                                                                    Т.е. у нас целые институты и ветви власти превращены в декорации (Дума, суды, ЦИК и т.д.), но это не означает полной однородности.
                                                                                                                      0
                                                                                                                      Я просто еще раз притащу сюда эту ссылку: www.rbc.ru/politics/18/02/2019/5c6999559a79474507b8e6e5 (и нет, измерение KPI — это не «централизованный указ на фальсификации»).
                                                                                                                        +2
                                                                                                                        По-моему KPI — это просто прикрытие. Формальный повод. Примерно как гопники когда грабят просят вначале закурить или телефон позвонить. Ибо мне очень сложно представить почему на вскрытые нарушения центральная власть демонстративно закрывает глаза и раз за разом показывает что попавшихся с поличным трогать не будет.
                                                                                                                  0
                                                                                                                  У вашей ботофермы есть тысячи подтвержденных аккаунтов в госуслугах, со всеми положенными вещами вроде СНИЛС и ИНН?

                                                                                                                  tvrain.ru/teleshow/vechernee_shou/baev-510779
                                                                                                                    +1
                                                                                                                    Вообще-то этот сюжет послужил поводом для того, что все зарегистрированные после 5 июня учетные записи не были допущены к голосованию (решение разовое, неудачное, и в будущем, конечно, регистрацию на mos.ru, для которой никакого подтверждения не требуется, использовать вряд ли будут). И да, для «ботофермы» это слишком дорого.
                                                                                                        0
                                                                                                        Там можно было даже в теории написать слово из трех букв в кодировке 1251. Но человек просто испортил бюллетень :-)
                                                                                                          0
                                                                                                          Из четырех букв даже, если null-terminated не обязательно делать. А еще можно было написать целых 24 буквы — и ничего тем самым не испортить!
                                                                                                            0
                                                                                                            Не, nonce это не считается как ответ. Плюс его видят все. А тут голос будет зашифрован
                                                                                                  0
                                                                                                  Это позволяет зафиксировать(и то без каких-либо гарантий) факт присутствия человека на участке, а не факт голосования.
                                                                                                    0
                                                                                                    Не хотели бы вас расстраивать, но урны для бюллетеней давно стоят открытые всем взглядам. Кабинок и ширм нет.

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

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

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

                                                                                                      Т.е. такая возможность может быть даже полностью законной, но она напрямую влияет на то, кто у нас оказывается во власти.
                                                                                                  0
                                                                                                  Номер паспорта — это ПД, потому что так они определены в ФЗ-152 («персональные данные — любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных)»).

                                                                                                    0
                                                                                                    Ваш ник на этом ресурсе тоже косвенно относится к физическому лицу.
                                                                                                      0
                                                                                                      Еще раз — если я написал вот 10 цифр подряд в комментарии выше, означает ли это, что я разгласил чьи-то персональные данные?
                                                                                                        +1
                                                                                                        Хватит спорить, а? Вы оба правы, на самом деле. Один номер паспорта — это персональные данные. И его разглашение, есть есть шансы узнать чей он — это большая проблема.

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

                                                                                                        Роскомнадзор чётко пишет о том, что при обработке обезличенных данных конфиденциальность не требуется.
                                                                                                          –1
                                                                                                          если есть шансы узнать чей он

                                                                                                          Вот именно. Если не приложить к нему соответствующую базу данных — шансы узнать хотя бы что-либо о человеке по одному лишь номеру паспорта равны нулю. Без нее номер паспорта — просто набор цифр, и сам по себе конфиденциальной информацией не является.
                                                                                                            0
                                                                                                            Как с этим согласуется судебное решение по поводу LinkedIn, объявившее куки и IP-адреса персональными данными?
                                                                                                              0
                                                                                                              В каком месте противоречие?
                                                                                                                +1
                                                                                                                Я просто напомню официальный ответ Минкомсвязи: «Серии и номера паспортов перед загрузкой в приложение были закодированы и представляли собой полученную случайным образом последовательность знаков (хеш-сумма), не позволяющую идентифицировать гражданина. Хеш-суммы не являются персональными данными. Публикация такого случайного набора символов не может навредить гражданам»

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

                                                                                                                  Их компетенция видна уже в этом:


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


                                                                                                                  НИ РАЗУ НЕ СЛУЧАЙНЫМ, но важно, что НЕОБРАТИМЫМ и НЕ СОДЕРЖАЩИМ ИСХОДНЫЙ НАБОР данных

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

                                                                                                                      Хотя не исключаю, что для юридической чистоты достаточно, чтобы данные любым способом превращались в «непонятные значки», и даже base64 подошёл бы.
                                                                                                                        0

                                                                                                                        Да, правильное замечание.


                                                                                                                        base64 тоже "рандомизирует", ага ) tmin10

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

                                                                                                                            А шифрование — это не хэширование, шах и мат.


                                                                                                                            /под своей репликой я подразумеваю, что при шифровании НЕ ПРОИСХОДИТ потери информации, при хэшировании — ОЧЕНЬ ДАЖЕ происходит, читай про хэш-коллизии/

                                                                                                                              0
                                                                                                                              Ничего, что хэширование называют односторонним шифрованием?
                                                                                                                                +1

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

                                                                                                                              0
                                                                                                                              Нет, base64 это кодирование, не шифрование

                                                                                                                              Вы уверены, что с точки зрения законов о хранении персональных данных есть какая-то разница между кодированием, хешированием и шифрованием?
                                                                                                                                +1
                                                                                                                                В законе про это ничего нет, толкованием закона в конкретном случае должен заниматсья суд (если до него дойдёт) и экспертиза, которая сделает заключение по методам защиты ПД.
                                                                                                                    +2

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

                                                                                                                  –1

                                                                                                                  А я написал три слова и три группы цифр, придуманные только что из головы: Пафнутий Аристархович Шпротов, 20.02.2002. Я тоже разгласил чьи-то данные?

                                                                                                                    –1
                                                                                                                    Этот вопрос интересует не только меня, но и весь наш отдел народного образования Отдела Народного Образования ©.
                                                                                                          –1
                                                                                                          По идее это будет персональными данными, если с этими цифрами ещё как минимум фамилию приписать.
                                                                                                          Номера паспортов неуникальные.
                                                                                                            +1
                                                                                                            Номера паспортов неуникальные.
                                                                                                            #даладно!
                                                                                                              +2
                                                                                                              Из-за твоего коммента мне пришлось пойти перепроверить.
                                                                                                              Сочетание серия-номер уникальное, номер — неуникальный.
                                                                                                                +4
                                                                                                                Согласен. Просто отдельно номер паспорта практически нигде не используется. Везде связка серия+номер. Поэтому часто говорят «номер», подразумевают полный номер, который вместе с серией.
                                                                                                                Неуникальность номера можно было и не проверять. 6 десятичных цифр при населении больше сотни миллионов. )
                                                                                                                  0
                                                                                                                  Тогда по идее нужна вторая БД, где хранятся уже полноценные персональные данные, где вбив серию+номер утекших паспортов некто сматчит проголосовавших с с этой БД.
                                                                                                              0
                                                                                                              Простите что???
                                                                                                                0
                                                                                                                Тут уже в комментах была ссылка на случай в Башкирии.
                                                                                                                  0

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

                                                                                                                    +1
                                                                                                                    Если он просто не принимается — то это ещё полбеды. А вот когда валидация разная в разных местах — это вообще «суши вёсла». У моего отца так до самой смерти и не смогли поменять номер паспорта в МТС. Ну ладно — у него он был второй и на последней старнице третьего, последнего (после 42 лет паспорт не меняется) стоял штамп. А если у кого-то он первый? Всё, номер будет потерян, потому что «эти идиоты» всё автоматизировали?
                                                                                                                      0
                                                                                                                      оффтопик

                                                                                                                      Сочувствую, вот оно лицо бездушной системы (((( которой на маленького человека плевать. Надеюсь, что в будущем все-таки разработчики будут думать головой, прежде чем что-то имплементировать.
                                                                                                                      Кстати, мне доставляет еще кучу "радости" задача интеграции разных источников. Я тут на днях получал очередную выписку из КБИ и офигел от того, что данные попросту не свести — каждый банк считает нужным вводить данные (адрес, паспорт, отделение выдачи и пр.) в своем уникальном формате, хотя казалось бы, что есть тот же ФИАС (в котором вроде как нет всех возможных адресов? тоже прокол), ну, и в том же духе.

                                                                                                            +1
                                                                                                            Так зачем тогда вообще хешировать? Начал шифровать — шифруй хорошо. Даже если утечка ничем не грозит сегодня, завтра туда понадобиться добавить персональные данные и их добавят, при этом кто то бы закрыл уязвимость? Нет конечно.
                                                                                                            Секьюрность нельзя «допилить потом», ее нужно закладывать изначально, чем больше времени проходит, тем тяжелей, что то исправить.
                                                                                                              +7
                                                                                                              Этими данными можно обогатить другие базы, добавив признак «регистрировался в электронном голосовании».
                                                                                                                +1

                                                                                                                А вот на этот случай в законе есть специальный пункт.


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

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

                                                                                                                –2
                                                                                                                Вот тоже подумалось — а что тут защищать? Безо всякого хеша берем случайное 4-значное число, берем случайное 6-значное число и получаем чью-то серию и номер паспорта.

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

                                                                                                                Утечка — это когда полный набор паспортных данных однозначно привязывается к конкретному человеку (ФИО, кем и когда выдан, где зарегистрирован и т.п.). А не просто написать «6607 238764»

                                                                                                                Так что все это напоминает обычный вброс на тему «у нас ничего не может быть сделано нормально».
                                                                                                                  +13
                                                                                                                  habr.com/ru/post/356088
                                                                                                                  Одним из камней преткновения прошедшего заседания стало «хранение и сбор данных незарегистрированных пользователей». По мнению специалистов Роскомнадзора, социальная сеть Linkedin собирает подобные данные, а именно сведения об ip-адресах, браузере и файлы cookies. На эмоциональное возражение юристов Linkedin что эти данные не являются персональными, представитель Роскомнадзора ответил, что «это ваше мнение».

                                                                                                                  Необходимо напомнить, что согласно ФЗ-152 персональные данные — это любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу.

                                                                                                                  Значит, уникальный номер паспорта — не ПД, а ip, браузер и cookie незареганного юзера на linkedin — ПД, я все правильно понял?
                                                                                                                  Я бы не был однозначно уверен на тему ПД, учитывая очень широкую трактовку закона. Удобно, то что тебе надо — ПД, то что не надо — не ПД.
                                                                                                                    0
                                                                                                                    Это просто вы пока не знаете как использовать. С другой стороны можно взять другую бд от оператора связи, органов и уже получить какую-то информацию, скажем, вашу социальную активность. Ясно одно: никто наказан не будет, кроме тех кто раскопал эту бд. Авторы получат медали ;)
                                                                                                                      0

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