Требования по контролю за электронным голосованием

    Конституция, и далее везде


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


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


    Введение


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


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


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


    Выработанные рекомендации


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


    Регистрация участников


    Верификация регистрационных записей на mos.ru личным визитом


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


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


    Формирование и проверка списка зарегистрированных


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


    Использование систем суверенной идентификации Self Sovereign Identity


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


    Голосование


    Поддержка анкоринга и узлов аудита


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


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


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


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


    Контроль развертывания


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


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


    Доступ ко всем исходным кодам


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


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


    Разрыв связи голоса и голосующего


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


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


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


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


    Возможность пересмотра собственного голосования


    В настоящий момент, система не позволяет голосующему изменить единожды поданный голос. Это делает систему беззащитной перед недобровольным голосованием.


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


    Открытый API


    В настоящий момент, система жестко привязана к разработанному пользовательскому интерфейсу на основе браузера.


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


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


    Заключение


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

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

      +8

      Электронное голосование в текущем виде это фарс и профанация, не далеко ушедшая от тупой голосовалки на сайте с привязкой к ЕСИА.


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


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


      Новые разработки в области хранения и верификации личных данных

      Что? Это какие такие "новые разработки"? Криптографии с публичным ключом и использованию HSM (частным случаем которых являются ЭЦП-токены) уже сто лет в обед. Если вы о чём-то содержащем слово "блокчейн" в описании, то сразу забудьте, в случае электронного голосования почти гарантированно задача решается значительно проще, ибо у нас неизбежно есть центральная организация ответственная за проведение выборов (обращаю внимание, деревья Меркла != "блокчейн").

        0

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

          +1

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


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

          +2
          Простите, но сейчас ни в одной стране мира нет и в ближайшее время не предвидится ни одной страны, где у выдающего ТЗ правящего класса цели и задачи совпадают с целями и задачами граждан. Потому что никакого подобного совпадения невозможно в принципе до тех пор пока существует диктатура буржуазии и никакие призывы к совершенствованию системы голосования или даже конкретные успешные действия в этом направлении ничего не дадут. Максимум — временную передышку и временное ослабление удавки. При первой же возможности ЛЮБЫЕ отвоеванные гражданские права и свободы хоть сколь либо ущемляющие права правящего класса и возможность его обогащения будут немедленно отобраны обратно «с избытком». Или Вы именно это и имели в виду, а я просто не совсем правильно понял?
            +1

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


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


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

              +1
              настоять на публичности эффективного технического аудита системы

              Я готов настоять, но я не знаю как.
                +1

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


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


                Часть исходных текстов системы и кое-какие детали уже известны, их можно изучить и по мере сил использовать в экспертизе, см предыдущий пост


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


                Вот этим самым — выработкой требований, — я сейчас и занимаюсь по мере сил.

                  0

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

                    +1

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

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

                Вот, почитайте это — может это немного изменит Ваше мнение. Мое изменила кардинально.
              +1

              Прежде всего, спасибо, что присоединились к обсуждению.


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


              Разумеется, э/голосование в текущем виде неудовлетворительно, о чем было сказано еще в предыдущем посте. Приведение системы в относительный порядок — это первоочередная задача, и она имхо вполне решается использованием тех инструментов, которые задействованы в текущей разработке. Об этом я и пишу здесь в основном.


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


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


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


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

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


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

                0
                блокчейн <..> вполне достаточен для того, чтобы прикрыть часть системы голосования от махинаций

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

                  0

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


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

                +1

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

                  0

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

                0
                Спасибо, что хоть кто-то ставит вопрос о верифицируемости результатов голосования. У кого-нить есть работающий план, как это внедрить?
                  +1

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

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

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

                      0
                      Если те кто контролировал за кого Вы проголосовали уничтожат ключ то переголосовать Вы уже не сможете?
                        0

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


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


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


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

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

                          Про этот приватный ключ я и говорю.

                          Ситуация: ваш начальник принуждает пройти процедуру получения приватного ключа. Ключ остаётся у него либо уничтожается после «правильного» голосования. А жаловаться Вы не пойдёте т.к. потеряете работу (или Вас убедят в этом). Как вариант Вы можете работать в структуре куда надо жаловаться о нарушениях :).

                          Если сделать механизм повторного получения ключа то теряем доверие к системе которая выдаёт ключи.

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

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


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


                            Если сделать механизм повторного получения ключа то теряем доверие к системе которая выдаёт ключи.

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


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

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

                    0
                    Как-то сложно всё. Обычному человеку вся эта криптография и блокчейны ничего не докажут, а только запутают.
                    Лично меня бы удовлетворил обычный txt/xls файл, где в строке указан уникальный ключ голосовавшего (можно получать на госуслугах) и голос. Файл публикуется в доступном месте, где каждый может его скачать и убедиться что его голос учтен правильно, и посчитать, что кол-во голосов соответсвует объявленному.
                    Я не очень понимаю, зачем нужна тотальная анонимность.
                      0
                      А как Вы убедитесь, что все остальные голоса не подложные? На голосование пришло 18%, а в файле 86% из них большая часть — мертвые души.
                        0
                        Согласен, эту проблему мой метод не решит.
                        Но если проголосуют 86% и потом убедятся что их голоса на месте, то кол-во подложных будет уже несущественно.
                        Как простому трактористу не ходившему голосовать убедиться, что его голос не посчитали в блокчейне?
                      0
                      www.youtube.com/watch?v=LkH2r-sNjQs
                      Как обычно — оставлю это здесь.
                        0
                        С электронным голосованием, самая большая проблема даже не техническая, а то что удалённо не возможно проверить было ли принуждение или нет, а якобы переголосовать поможет только если есть мотивация и возможность это сделать, есть же места где такой возможности тупо нет, как в домах престарелых где многие даже не поймут за что голосовали, а ещё есть места и организации где люди постоянно под присмотром.
                        У нас в Эстонии уже всё готово для электронного документа оборота, но даже у нас хотят полностью отказаться от электронного голосования.
                          +1

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

                            0
                            Это точка зрения субъективного идеализма. Примата сознания над материей и надстройки над базисом. Это так не работает.
                            0
                            Голосование должно быть открытым, так что бы каждый мог посмотреть хоть через год хоть через 10 лет за что он голосовал, или кто-то другой за что проголосовал. Только тогда можно быть уверенным, что выборы реально честные. Любое тайное голосование, это подделка, чем бы вы там не пытались её защитить, деревьями или блокчейнами, что мешать ваш выбор изменить нужным людям до того как запись попадёт туда куда где изменения уже можно отследить? Топящие, ааа как же так мой выбор станет известен другим, если вы этого боитесь, то вам уже надо не в этом государстве жить, потому что тайным изменить ничего нельзя. Мог конечно опосредовано привести пример про выборы президента, опрашивал знакомых ты голосовал за этого? нет… нет… нет… вообщем единичные случаи да. Вопрос кто врёт, они или система, не проверить.
                              0
                              Мне кажется, главная проблема из технических заключается в том, что сервер, выдающий юзеру все необходимые данные (ключ, кодовые значения для опций, клиентский код и тд) может за юзера заполнить бюллетень как надо. Или даже подсунуть такой бюллетень, в котором обе опции означают одно и то же. По идее, мы ещё можем проверить, что сервер нам отдал именно тот dit.bundle.js, что и был выложен на Github (правда, 99.99% юзеров не заметят подмены), но то что на сервере, отрабатывающем наши запросы, крутится аутентичный код — никакой гарантии нет.
                                0

                                Пункт "Контроль развертывания" именно об этом

                                  0
                                  ну вот мы проконтролировали развертывание, а потом кто-то зашел на сервер по ssh и подменил пару файлов
                                    0

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

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

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

                              Самое читаемое