Простое решение для использования ЭЦП — развитие
В своей предыдущей статье «Простое решение для использования ЭЦП» я описал идею для реализации приложения для использования ЭЦП. С того времени довольно многое изменилось. Самое главное — мы решили перейти к модели без использования промежуточных прокси-серверов и более активно использовать QR-коды. Так-же у нас появился более симпатичный демо-сайт, позволяющий попробовать как работает наше приложение для различных вариантов применения: для подписания петиции, для голосования, для подтверждения своих действий на сайте.Для тех, кто не хочет читать предыдущую статью, напомню, о чем речь…Наш проект GPL Vote ориентирован на создание распределенной и защищенной системы голосований и сбора подписей. Мы считаем что использование электронной цифровой подписи является необходимым условием для ее создания. Однако, множество существующих решений является либо слишком сложными для среднего обывателя, либо платными, либо закрытыми. А, чаще всего, наблюдается все это вместе. Поэтому мы решили предложить простое в использовании, бесплатное и открытое решение.
Отмечу еще раз — мы не предлагаем никаких новых идей. Мы предлагаем лишь реализацию, включающую в себя мобильное приложение и API для сайтов, которые хотят использовать его возможности. В использовании мобильного приложения нет никаких ограничений — любой сайт может реализовать нужное API и предлагать своим пользователям защиту их данных через мобильное приложение. Так-же любой сайт может взять исходники мобильного приложения и переделать его под свои нужды. Главное соблюдать лицензию.
Об измененияхПодумали мы, подумали и решили что включать в цепочку посредника в виде прокси-серверов, при том, что работа и так идет с сайтом, — это не очень хорошая идея. Но в этом случае необходимо каким-то образом передавать содержимое подписываемого документа в мобильное приложение.И тогда мы вспомнили о QR-кодах. Через него-же можно прямо с экрана передать все данные документа в мобильное приложение. Однако, документы могут быть довольно большими. Так никакого экрана не хватит для отображения QR-кода. Что уж говорить о процедуре его распознавания с маломощного смартфона. Вариант решения нашелся достаточно очевидный. Т.к. для отправки подписи на сайт все-равно необходимо подключения смартфона к сети, таким-же образом через сеть можно и получить документ. Поэтому в QR-коде мы решили разместить данные URL на сайт, по которому можно получить содержимое документа для подписания. Только заменили схему на свою, что-бы такие ссылки можно было автоматически направлять в наше приложение.
Таким образом, вся процедура подписания документа сводится к сканированию QR-кода и подписанию его в открывшемся окне нашего приложения. Плюсом такого варианта является еще и то, что QR-коды на подписание петиций можно размещать не только на сайтах, но и на листовках или бумажных объявлениях. Конечно, в таком случае, подписываемый документ доступен в открытом виде, но часто это вполне допустимо (например, для тех-же петиций).
Как раз второе существенное изменение касается того, что документ для подписания может быть представлен в двух видах: в персонифицированном виде, когда данные документа шифруются ключем пользователя, и в публичном виде, когда документ предназначен для множественного подписания разными людьми. Публичный вариант, как я уже отметил, может использоваться для сбора подписей под петициями или для организации открытых голосований.
Ну и последнее изменение — в структуру документа для подписания включен атрибут, содержащий URL, на который мобильное приложение должно отправить подпись данного документа. С введением этой возможности мы полностью отвязали процедуру подписания от промежуточных прокси-серверов. Последствием этого нововведения явилось еще и то, что исчезла задержка между отправкой подписи документа и ее обработкой.
Планы В планах у нас еще много доработок. В основном они касаются резервного копирования секретного ключа, восстановления его из резервной копии и создания инфраструктуры для аннулирования скомпрометированного ключа.Так-же начала работа над мобильным приложением, реализующим «сеть доверия» с использованием данного приложения в качестве модуля для подписания.
Ссылки на дополнительную информацию Мобильное приложение в Google Play МаркетНовый демо-сайтОписание API для сайтовИсходный код мобильного приложения (Android)Исходный код демо-сайта (Perl)