Простое решение для использования ЭЦП

    imageНесколько лет назад мы начали проект «Открытые голосования», призванный создать систему для удобного проведения надежных и проверяемых голосований. К сожалению, дело ограничилось только теоретическими разработками, а в плане конкретных реализаций мы так и не продвинулись вперед. Не так давно я начал размышлять — почему так? Я сам разработчик. В команде тоже есть несколько разработчиков. Так что-же нам мешает? И пришел к выводу, что главная помеха — слишком большие первоначальные планы. Поэтому я решил начать с малого — с инструмента для простого использования электронной подписи обычными людьми. Причем, не только для нашего проекта, а для любого сайта, который сочтет это необходимым.

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

    Итак, что-же я предлагаю…

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

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

    Порядок работы


    Естественно, что-бы сайт клиента мог отправить документ на подписание определенному пользователю, ему нужно сначала каким-то образом получить открытый ключ пользователя и привязать его к своей внутренней логике (например, к логину пользователя). Для этого предназначена процедура «Регистрации подписи». Заключается она в следующем:

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

    После этого, в случае необходимости подписания документа на сайте:

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

    На этом цикл заканчивается.

    Итоги и перспективы


    Конечно, я могу признать что система не идеальна. Но это первый вариант и, что самое важное, он есть и он работает. Так-же важно то, что его можно использовать не только для целей нашего проекта, которые связаны с реализацией голосований. Его можно использовать, например, для обеспечения двухфакторной авторизации. Или для защиты критичных действий пользователя типа изменения пароля или привязанного к логину e-mail (такой опциональный функционал уже внедряется на одном из популярных сайтов). Это базовый инструмент и на его основе можно построить все что угодно — дело ограничено лишь нашей фантазией. :)

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

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

    Ну и ссылки:

    Мобильное приложение в Google Play Market: GPLVote Sign Doc
    Исходный код мобильного приложения на GitHub
    Тестовый сайт клиента для тестирования мобильного приложения
    Perl модуль GPLVote::SignDoc::Client, облегчающий прикрутку нужного функционала к сайтам клиентов
    Исходный код тестового клиента на GitHub (Perl)
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 47

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

        Подскажите о каком проекте речь? Открытый?

        мы так и не продвинулись вперед. Не так давно я начал размышлять — почему так? Я сам разработчик. В команде тоже есть несколько разработчиков.

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

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

          Проект gplvote.org. Там есть и краткое и подробное описание наших идей — на самом сайте, на форуме и в Wiki.
          И это желание ослепляет, не дает тебе осознать количество необходимых ресурсов для реализации.

          Ну, тут дело несколько в другом. Мы изначально разрабатывали саму концепцию, не обращая внимания на сложность реализации. А когда разработали, то оказались в ситуации что все целиком сделать не можем, а с чего начать «по мелочи» не сообразили. Вот эту «мелочь» я сейчас и реализую. Ведь тут главный смысл в том, что-бы предоставить обычным пользователям простую возможность использовать ЭЦП. Причем, вообще не важно для чего. В процессе разработки концепции мы встречали огромное количество идей, не связанных напрямую с голосованиями, где использование ЭЦП может принести пользу. Но из-за отсутствия простого способа ее использования и эти применения тоже тормозились. Если ЭЦП начнет применяться сначала хотя-бы для дополнительной защиты аккаунтов от воровства, то потом его постепенно можно будет использовать и для более «сложных» целей типа сетей доверия и организации голосований.
          Но иррония в том, что конкретному политическому строю такие разработки не просто не выгодны

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

            Смогут ли обычные пользователи дать денег, которых хватит на серьезную разработку. Как там, 90% всего капиталла сосредоточен в руках 1%…
              0
              Даже если и не смогут дать, тут главное движение. Постепенно разрабатывая софт силами энтузиастов, тоже можно многое сделать. Для этого нужно лишь что-бы софт был открытый. И открытым мы его делаем принципиально именно поэтому.
                0
                Постепенно разрабатывая софт силами энтузиастов, тоже можно многое сделать

                Согласен — у нас просто другого выхода нет. Если не энтузиасты — то никто, т.к. гос. институты не поддержат, а скорее запретят разработку ПО для изменения гос. строя.

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

                    В этом и проблема.

                    Даже если 100 чел. даст по $10 — получится всего $1000, а ее можно на обычной работе за неделю-полторы сделать. Этого слишком мало для серьезного проекта.

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

                    По этому я однажды решил, что нужно в корне изменить подход. Сначала сделать проект, который бы приносил прибыль и фин. независимость. А уже потом можно и «мир изменять» (если, конечно, останется желание для этого).
                      0
                      Ну, у нас в проекте так-же. :) Все работают на своих основных работах, а проектом занимаются когда получается. Поэтому все и движется так медленно. Но, опять-таки, любые подвижки могут активизировать работу над проектом даже на уровне энтузиазма. :)
                        0
                        Но все таки лучше, если бы была возможность работать постоянно и полностью погрузиться в проект. А для этого нужно финансирование хотя бы по $3 тыс. на человека в месяц.

                        Получается делать деньги с целью их дальнейшего инвестирования в «изменение мира» — перспективнее.
                          0
                          Это просто другой вариант. :)
          0
          Тут какой-то свой PKI изобретается или всё-таки работа идёт через цифровые сертификаты и структуры PKCS/CMS?
            0
            Пока структуры сертификатов не задействуются никак — нет нужды по задаче. Но криптография вся стандартная — через openssl (RSA и AES).
              0
              Очень рекомендую посмотреть в сторону стандартных решений по PKI. Если «нет нужды» в сертификатах, то скорее всего вся задача понята ошибочно или понята только частично. Также и «стандартная криптография» возможна только при использовании сертификатов. Конечно, возможно осуществлять подпись и имея исключительно закрытый и открытый ключ, но вот во всём мире «стандартными» являются подписи формата CMS, в которых уж обязательно необходимо использовать сертификаты.
                +1
                Насколько я понимаю, сертификаты PKI подразумевают единый центр для их подписания. Один из базовых принципов нашей основной задачи проведения честных голосований — это отсутствие особых людей, способных повлиять на работу голосований. Центры сертификации просто не вписываются в эту концепцию. Мы больше ориентируемся на сеть доверия, для которой такие сертификаты, насколько я понимаю, не применимы. Так что с пониманием задачи у нас как раз все в порядке. :)
                  0
                  Тогда я опишу подробнее. Ваша система голосований может быть с красивым интерфейсом, отлично спроектированной и созданной, но бесполезной только по одной причине — отсутствие доверия со стороны государственных органов. В нашей стране есть законы, регулирующие использование электронно-цифровой подписи и в них жестко «зашито» обязательное использование сертификатов. Суды признают только такой вариант подписи. А для вашего сервиса я предложу только одну угрозу: предположим нечестный администратор выдал публичные ключи (и приватные соответственно) миллиону «ботов», которые голосуют, как это будет кому-нибудь нужно. Так что прекращайте писать «велосипеды» на основе PKI. Эта отрасль существует уже очень давно и практически на все задачи уже существуют стандартные решения.
                    0
                    Я понимаю ваши сомнения. Это обсуждалось не один раз. И поверьте — так оно и есть. Цель нашей системы голосований совсем не официальное признание ее результатов. О ее целях можно почитать или на сайте проекта или обсудить в личных сообщениях. Насколько я помню, обсуждение политики тут не приветствуется.
                      0
                      Ну если нет цели «официальное признание результатов», то тогда успехов вам в написании очередной игрушки.
                        0
                        Т.е. даже выяснить наши цели не потрудитесь? Вот скажите мне — какой смысл в «официальном признании результатов» в случае если любой результат может официально не признаться? Что-бы результат был признан официально, он должен быть получен с помощью тех выборов, которые организует исключительно государство. А какие голосования оно организует — всем прекрасно известно. Как раз стремление добиться «официального признания» было-бы в чистом виде борьбой с ветряными мельницами. Т.к. это в принципе невозможно.
                          0
                          Я опишу как я отношусь к подобным проектам. Допустим есть группа энтузиастов, которая делает новую концепцию велосипеда. Красивого, технологичного, но… без колес. А на вопрос «а как же он поедет» отвечают «у нас изначально не было задачи чтобы он поехал. Вот когда-нибудь, в светлом будущем, люди изобретут гравицапу и наш концепт велосипеда может быть впишется в новую реальность». Короче — велосипед должен ездить. Велосипед без колес это мусор.
                            0
                            Разница между нами в том, что вы не считаете «волеизъявление народа» чем-то существенным без его официального признания. Мы считаем что если народ сам будет уверен в правильности процедуры голосования и в то, что в эту процедуру никто не может вмешаться, включая организаторов, вот это и будет в чистом виде «волеизъявление народа». И государство вместе с правительством для этого не нужно в принципе.
                              0
                              Тот, кто так говорит, просто хочет поменять правила. Просто хочет, чтобы вместо правил государства признавались какие-то его правила. Чтобы именно он, а не «паршивое государство» определяло, какие результаты голосований будут признаваться правильными, а какие нет. Если нет каких-то навыков чтобы сделать систему голосований, которая бы работала в реальных условиях, то это означает только одно — у вас нет навыков. В приложении к моему предыдущему комментарию это всё-равно как попытаться изменить понятие и признать, что «велосипед — это что-то без колёс».
                                0
                                Ну, считаете что мы занимаемся ерундой — считайте на здоровье! Мы уверены что эта «ерунда» может сделать мир немного лучше. Вы, главное, нам не мешайте. Вам-же от нашей деятельности никакого вреда, ведь так? :)
                                  0
                                  Вы увидели в моих комментариях какую-то угрозу для себя? Сейчас пока такой угрозы нет. Однако если вы, например, будете просить у людей денег на свой проект и обманывать, что он якобы «спасение всего человечества», то я обязательно постараюсь убедить людей в обратном.
                                    0
                                    А мы просим. Так что можете начинать. :) И не забудьте описать альтернативу.
                                      0
                                      Для читателей Хабра будет достаточно почитать мои и ваши комментарии. Может быть позже отмечусь и на вашем внутреннем форуме. Насчет альтернатив — делайте нормальную систему голосования на основе, скажем, УЭК. Полноценную и полностью легитимную. И избавьте меня от комментариев вроде «такая система всё-равно будет контролироваться государством» и тому подобное.
                                        +1
                                        Вы не очень внимательно читали то, что я писал: один из БАЗОВЫХ принципов, которого мы придерживаемся — отсутствие особых людей. Поэтому всякие УЭК и центры сертификации не подходят для наших целей. Я вас не собираюсь убеждать что этот принцип важен. Он у нас есть и мы его придерживаемся.
                                          0
                                          Хотел написать подробную критику по поводу вашей схемы подтверждения подлинности одного субъекта вашей системы с помощью других. Однако ограничусь комментарием: при таком подходе все участники системы будут доверять всем другим, только если каждый участник этой системы будет удостоверен всеми другими участниками этой же системы. Децентрализация схемы доверия приведёт к хаосу. В конечном итоге в вашей системе неизбежно будет образована некая особая «группа доверенных», которые в каком-то порядке (принудительном или добровольном) будут признаны ответственными за признание легитимными тех или иных удостоверений личности. Вот тут то всё и завертится :) Именно эти «избранные» и будут за всех решать. Так что эти ваши «свободные голосования» сведутся к голосованию «избранных».
                                            0
                                            Да, мы осознаем что такая опасность существует. Но она будет существовать только если ее встроить в систему. В конечном итоге и такой вариант у нас будет, т.к. мы не возбраняем использовать эту систему в том числе и для голосований в иерархически построенных группах. Но это будет лишь опциональная возможность, сужающая основной функционал.

                                            Кстати, на счет «будете просить денег». Возможно я не так вас понял. Наш проект «просит денег» исключительно в виде добровольных пожертвований. Мы никогда не будем продавать софт за деньги. Открытость исходных кодов — это еще один базовый принцип нашего проекта.
                                              0
                                              Опасность существует, ха-ха. Да эта опасность просто неизбежна! Вы создаёте систему с заранее предсказуемым развитием. Это очень интересная область знаний и умений — создание какой-то системы с начальными характеристиками «x», которая неизбежно будет развиваться (и совершенно естественным путём!) в систему с характеристиками «y». А насчёт денег — да, я против и добровольных пожертвований вашему проекту. Просто какие-то граждане вам могут поверить по своей слабой осведомлённости. В моих силах добавить им информации по вашему проекту и его перспективам.
                                                0
                                                Ну, раз вы за это взялись, то обоснуйте, пожалуйста, свое мнение научным образом — с формулами и доказательствами, а не субъективным мнением типа «я уверен». Может и мы вас еще поблагодарим за то, что не дали нам заняться ерундой. :)
                                                  0
                                                  Я занимаюсь вопросами криптографии, шифрования и подписывания информации уже более 10-ти лет. Также я занимаюсь и вопросами создания структур PKI, включая и создание удостоверяющих центров. Мои работы широко известны и признаны как в России, так и зарубежом. И должен вам сказать, что все мои высказывания основываются именно на этом, очень солидном багаже знаний и умений. Насчет «формул и доказательств» — естественным образом вся «эволюция» систем подписания документов (длительность которой насчитывает несколько десятилетий) свелась к PKI, с использованием сертификатов и удостоверяющих центров. Поделки подобные вашему проекту умерли естественным образом.
                                                    0
                                                    Данный вопрос относится к области психологии и социологии. В этом вы специалистом НЕ являетесь, насколько я вижу. Так на каком основании вы утверждаете что система сети доверия не будет работать?

                                                    > Поделки подобные вашему проекту умерли естественным образом.

                                                    А вот это уже ложь в чистом виде. И заставляет усомниться в вашей компетентности в том числе и в тех вопросах, в которых вы ее утверждаете.
                                                      0
                                                      Мы ваш проект обсуждаем или мою персону? Чушь и глупость отвергать очевидные вещи — PKI является основной при использовании цифровой подписи. Может быть какие-то дилетанты и делают время от времени проекты подобные вашему, но суть остаётся неизменной — PKI является основной про использовании цифровой подписи.
                                                        0
                                                        Вы как аргумент выставляете свой авторитет. Так что мы обсуждаем вашу персону именно как аргумент в споре. Ничего личного.
                                                          0
                                                          Ну по обсуждайте, если ответить мне по существу нечего :) Именно так делают оппоненты в споре, когда им нечего сказать. Спасибо, что утвердили мою позицию в споре!
                                                            0
                                                            Знаете, ссылка на свой авторитет — самый глупый аргумент в споре. Тем более, если вы не являетесь специалистом в обсуждаемой области. А обсуждаем мы отнюдь не криптографию и сертификаты, а ту СОЦИОЛОГИЧЕСКУЮ проблему, о которой вы сами написали. Я не отрицаю что она есть. Но я отрицаю что ее невозможно решить без использования так любимых вами PKI сертификатов и сертификационных центров. Ничего кроме собственного авторитета вы в качестве аргумента не предложили. Только мне кажется что ваша аргументация нулевая?
                                                              0
                                                              Вернёмся к началу: я сказал, что в вашей системе произойдёт вырождение в систему, где всё голосование сведётся к голосованию «избранных». В сами же подтвердили, что такое в вашей системе возможно. Я написал, что считаю, что это вырождение неизбежно. Вы у меня попросили какие-то «формулы и доказательства». В качестве доказательств своего мнения я привёл свой опыт в сфере работы с цифровой подписью. Если для вас не является доказательством более чем 10-ти летний опыт работ, то это ваше право. В свою очередь у меня появилась мысль спросить вас: а есть ли у вас «формулы и доказательства» по вероятности недопущения превращения вашей системы в систему с голосованием «избранными»? Во сколько вы оцениваете процент данной вероятности, и как вы его оценили?
                                                                0
                                                                Я писал о том, что у нас в системе возможны проблемы с сетью доверия. Решаемые проблемы. О «вырождении» я не писал. Возможно я вас неправильно понял. Ситуация когда кто-то в системе наделает «виртуалов» и будет голосовать ими, теоретически возможна. А вот то, что он блокирует другим возможность голосовать — не думаю. Мы считаем что наличие обратной связи позволит такой системе быть вполне устойчивой.

                                                                У меня нет формул и доказательств. У меня есть форум с обсуждениями. Если вам действительно интересно — вы можете его почитать. Если не интересно — какой смысл мне что-то вам доказывать. Кроме того, это вы меня здесь в чем-то обвиняете. Значит на вас и лежит бремя доказательств.
                                                                  0
                                                                  Я вам пишу, что такие проекты должны иметь легитимность у государства, а вы мне пишите, что такой цели у вас изначально нет. Я пишу, что всё должно строится через сертификаты и удостоверяющие центры, а вы мне говорите, что у вас есть прекрасная децентрализованная система. Я пишу, что такая децентрализованная система выродиться в ужасную систему с голосованием «избранными», вы же подтверждаете, что такое возможно. Моя единственная цель — дать больше информации обычным «обывателям» о вашем проекте. Думаю, что читателю на Хабре этой информации уже достаточно для формирования собственного мнения.
                                                                    +1
                                                                    Ну, я надеюсь что читатели не будут основывать свое мнение на субъективном «авторитетном» мнении, а изучать то, что мы предлагаем, более подробно. Вы уж извините, у вас я вижу лишь высказывания типа «вот в этом я специалист и это самое правильно, а остальное все — обман и мошенничество». Как-то это несерьезно, если не сказать сильнее.

                                                                    Я верю, что народ не стадо, которое не может самоорганизоваться без государства и «удостоверяющих центров». Ключевой вопрос именно в этом. И относится он, как я уже писал, не к области криптографии, в которой вы вроде-бы специалист, а к социологии и психологии, — к области, в которой у вас авторитет не выше моего. Так что не смотря на ваши «авторитетные» высказывания, я надеюсь что у читателей возобладает разум и они сами решат что работает, а что нет.
            0
            ЭЦП уже 3 года, как стало ЭП. Заголовок вас подводит:/
              0
              Поищите в Google Market по ключевым словам sign doc. :) И вы сами увидите что там за ЭП. И чем она отличается от того, что у нас используется. :)
              0
              Полагаю идея умерла,
              так как идентифицировать пользователей используя асимметричную криптографию, но не используя x509 — не стреляет.

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