Как установить эцп на телефон

Обновлено: 07.07.2024

Теперь в СБИС носителем ЭЦП может быть не только токен, но и смартфон. Это позволяет пользователям быть более мобильными и подписывать документы в любом месте, в любое время и без доступа к компьютеру.

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

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

Обратите внимание, что в настоящий момент ЭЦП на телефоне может использоваться только в СБИС, например, для подписания контрактов и отчетов в государственные органы. Такая ЭЦП будет всегда под рукой – в смартфоне. Вы можете работать с документом или отчетом в desktop-версии СБИС, после этого программа отправит на смартфон запрос на подписание, и останется только нажать на кнопку «Подписать».

1.jpg

Получение мобильной ЭЦП для СБИС

Чтобы стать обладателем мобильной ЭЦП для работы со СБИС, необходимо выполнить четыре простых шага:

  1. Установка приложения СБИС (iOS, Android);
  2. Подтверждение номера телефона;
  3. Заполнение заявки в ЛК;
  4. Запустите генерацию ключа.

2.jpg

Мобильная ЭЦП СБИС: цена

Стоимость мобильной ЭЦП такая же, как и для электронных подписей, выпускаемых для использования на токенах.

А если вы приобретаете ЭЦП на токене, то у вас есть возможность докупить мобильную ЭЦП всего за 200 рублей!


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


Работа с «КриптоПро»

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

Также придется поработать с С++ и самостоятельно заботиться о выделении и очистке памяти.
Стоит отметить, что статья написана при актуальной версии «КриптоПро CSP 4.0», поэтому описанные ниже пакеты для разработчиков в будущем могут отличаться.

Импорт «КриптоПро» в мобильное приложение

Первый шаг для использования «КриптоПро» в своем приложении — это внедрить фреймворк, скачанный с сайта компании. В пакете для iOS помимо самого фреймворка содержатся также три примера — создание электронной подписи (ЭЦП), создание ssl-тоннеля и пример, позволяющий собрать браузер, обладающий функциональностью создания и проверки ЭЦП на веб-страницах. Подробное описание содержится внутри примеров, в файлах Readme. На их основе легче понять алгоритм действий. Очень поможет пакет для MacOS: в нем содержится много полезных примеров с подробными комментариями. После его установки все примеры будут находиться на диске в разделе opt/cprocsp/src/doxygen/CSP.

Инструкция по импортированию самого фреймворка находится в CPROCSP.framework в файле ReadMe, разберем его по пунктам.

1. От вас требуется зайти в консоль и прописать путь к скаченному фреймворку, далее запустить утилиту, как описано ниже:

(указанный ключ прилагается в файле, затем в этой же директории будет создан файл лицензии license.enc).

2. Прежде чем импортировать фреймворк, советуем перенести его файл CPROCSP.framework в папку с проектом. Так вы защитите себя от случайного переноса фреймворка в другую папку, из-за чего «слетят» пути в Xсode.
Теперь к импорту: открываем Xсode, в боковой панели слева выбираем проект и в списке targets выбираем цель сборки


Далее во вкладке Build Phases выбираем Link Binary With Libraries, жмем на «+» и затем Add other, чтобы указать путь к фреймворку вручную. Находим его и выбираем Open. Фреймворк импортирован, но использовать его еще не получится.


3. Создаем в проекте папку Resources, открываем файл CPROCSP.framework, заходим в папку Resources и перетаскиваем все файлы и папки, кроме локализации (ru.lroj и en.lproj), в созданную нами папку с такими настройками:


4. Перетаскиваем в эту же папку файл лицензии, созданный в первом пункте, с настройками как на скриншоте выше.

5. Теперь переносим оставшиеся папки локализации также в Resources приложения, но с другими настройками:


Если все сделать правильно, то папки будут выглядеть так:


6. Следующим пунктом идет настройка проекта для отладки в эмуляторе. Если этого не сделать, то приложение можно будет запустить только на устройстве. Во вкладке Build Settings проекта в поле Valid Architectures оставляем только armv7. Работы по поддержке 64-битной архитектуры уже ведутся, но пока используем 32-битную. Также в Architectures записываем Optimized (armv7). Должно получиться следующее:


На этом приложенная инструкция заканчивается, но запустить приложение в итоге не получится — при компиляции вы увидите что-то вроде этого:


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

Аналогично схеме, описанной в пункте 2, добираемся до файла CPROCSP.framework, в нем заходим в папку reader и импортируем запылившуюся там библиотеку librdrpcsc_empty.o. Следующую библиотеку добавляем из заложенных в Xcode, для этого все в том же окне в поиске вводим libz


и добавляем ее кнопкой Add.

Но этого тоже будет недостаточно, останется еще одна ошибка:


Для ее решения в любое место проекта поместите флаг

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


Если поставить true, то они будут храниться в закрытом месте:

На этом импорт фреймворка окончен, и можно запустить приложение на эмуляторе.

Контейнер закрытого ключа для работы с «КриптоПро»

На момент написания статьи «КриптоПро CSP 4.0» не поддерживает работу с сертификатами *.pfx, которые содержат и публичный, и приватный ключ. Необходимо использовать контейнеры *.000, которые можно получить только при использовании «КриптоПро»; их формат нигде не описан, и записываются они, как правило, на ключевых носителях, токенах (флешках, дискетах). В проводнике они выглядят как папки, которые содержат в себе один ключ, разбитый на файлы header.key, masks.key, name.key и primary.key.

Также у компании есть тестовый удостоверяющий центр (УЦ), на котором можно сформировать ключи и получить сертификат УЦ. Здесь необходимо дополнить, что для корректной работы страницы оформления запроса сертификата необходимо использовать Internet Explorer (или любой другой браузер с установленным плагином, который можно скачать в тестовом УЦ), и на компьютере должно быть установлено CSP, иначе на странице оформления заявки на получение сертификата будут недоступны необходимые алгоритмы хеширования ГОСТ Р 34.10-2012.

Установка контейнера закрытого ключа в приложение

Как пишут сами сотрудники «КриптоПро», есть три варианта установки контейнера на устройство:

• Через iTunes File Sharing.
• Использовать отдельное приложение для записи файлов на iOS, типа iExplorer.
• Написать собственный экспорт ключа в блоб (PRIVATEKEYBLOB) и импортировать его в коде приложения. Пример такого способа находится в вышеупомянутом пакете для MacOS под названием EncryptKey/DecryptKey.

Мы использовали первый вариант — как самый быстрый и удовлетворяющий требованиям заказчика. Именно для его реализации при импорте был выбран флаг USE_CACHE_DIR = false; если iTunes File Sharing вами использоваться не будет или вы хотите скрыть от пользователя возможность заглянуть в папку с ключами, то лучше скройте ее, выставив флаг true.
После первого запуска с установленным фреймворком в папке Documents приложения будет создана папка cprocsp:


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

Далее существует два пути: написать все функции самому или использовать уже готовый контроллер, и так как его хватит для решения большинства задач, о нем и поговорим.
Фреймворк содержит в себе хедер-файл с названием PaneViewController.h. Если вы не обременены строгостью по дизайну, то можете импортировать предложенные xib-файлы (находятся в CPROCSP.framework/Resources) и инициализировать криптопанель через них — к примеру, таким образом:

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



После установки корневого сертификата УЦ в папке cprocsp/keys должна будет появиться папка mobile. В нее помещаются контейнеры *.000. Чтобы их установить, снова заходим в панель «КриптоПро» и на главном экране выбираем «Установить сертификаты и контейнеры». Контейнеры, содержащиеся в папке cprocsp/keys/mobile должны быть от криптопровайдера «КриптоПро» (если хотя бы один таковым не является или поврежден, то функция вернет ошибку, не установив ни один из них).
На этом установка завершена.

Подпись и проверка подписи приватным ключом

После установки корневого сертификата УЦ и контейнера можно приступать к подписи документов. Функции создания и проверки подписи можно найти в вышеупомянутом пакете для MacOS под названием CryptMsgSign. В них содержатся комментарии по каждой используемой функции. Аналогичные примеры находятся в пакете для iOS, в CreateFile/Classes/SignFie.cpp. Здесь в отличие от предыдущей реализации подписи на вход подается путь к файлу, который необходимо подписать. По причине большого количества функций разбирать каждую в отдельности мы не будем. Рассмотрим отдельные моменты, которые не так очевидны.


Функция CSP_GetLastError() возвращает код ошибки и краткое описание.

Авторизация при помощи приватного ключа

Для авторизации с использованием приватного ключа нам понадобится сам ключ, установленный вышеописанным образом, установленный корневой сертификат УЦ, настроенный сервер с «КриптоПро» и с добавленным в доверенные нашим ключом. Сервер должен поддерживать работу по TLS версии 1.2 для всех устройств с iOS 9 и выше, а также иметь ГОСТовые cipher suites от «КриптоПро».

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

В качестве менеджера, который будет отправлять нужные cipher suites, используется UrlRetriever, входящий в состав фреймворка. Открыв хедер, вы увидите множество понятных функций для отправки запроса, но не сразу очевидно, как и чем пользоваться, тем более что документации по этому вы не найдете ни на сайте, ни на форуме. И в самом файле также нет никаких комментариев, за исключением одной //TODO, которые оставили разработчики :)
Внутрь класса заглянуть не удастся, поэтому нам все приходилось испытывать вручную и смотреть, что как работает.

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

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


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


И вернуть ответ в completion-блок:


А в случае ошибки вернуть error:

Данный сценарий аналогичен и для авторизации по сертификату, только перед отправкой запроса в ретривер необходимо записать отпечаток сертификата (thumbprint). Существует множество вариантов получения отпечатка — мы покажем самый правильный (на наш взгляд).
Из примеров для подписи возьмем реализацию некоторых функций, таких как CertOpenStore, для открытия хранилища и CertEnumCertificatesInStore — для получения дескриптора сертификата PCCERT_CONTEXT. После этого пишем функцию для получения отпечатка в NSSting:

Первой используется функция CertGetCertificateContextProperty c параметром CERT_SHA1_HASH_PROP_ID, который говорит функции о параметре, который необходимо получить из сертификата, в данном случае — SHA1 hash. Функция вызывается два раза, первый без подстановки буфера, вместо него ставится NULL. Это делается для получения требуемого размера памяти, которую нужно выделить под буфер. Во втором использовании подставляется буфер теперь уже известного размера. Чтобы преобразовать полученные данные из массива байт в строку, используется функция CryptBinaryToString — тоже два раза (по тем же причинам). После этого вы получите красивое содержимое вида:

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

Если все сделано правильно, соединение будет успешно установлено с использованием ГОСТа алгоритмов шифрования.

Полезные ссылки

MSDN — подробное описание всех функций, входящих в них параметров, а также рабочие примеры.

Форум — форум «КриптоПро», на котором сотрудники ежедневно отвечают на вопросы. Многие ответы на вопросы уже даны, и, несмотря на их давность (порою около 6 лет), они все еще могут вам помочь.

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

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

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

ВАЖНО! Установите WinZip - Zip UnZip Tool через Google Play, иначе нечем будет открыть ZIP архивы. Не забудьте разрешить ему через настройки доступ к хранилищу. Если не умеете пользоваться таким - загрузите распакованный дистрибутив через USB.

КриптоПро CSP

Для скачивания КриптоПро необходимо войти в аккаунт. Система сама предложит это вам.

Плагин КриптоПро и расширение

Плагин устанавливается на браузер Яндекс (на Google Chrome почему-то расширений нет, в этом Яндекс его обогнал). Есть условие, нужно чтобы были включены бета-функция дополнений. На Android 10 они могут быть уже включена. Если их нет, примите в Google Play бета-тестирование Яндекса и обновите приложение.
Тем не менее мы начинаем.

Плагин КриптоПро

Система Андроид является разновидностью Linux, и построена на ядре Ubuntu. Для Андроид не существует готового пакета APK с плагином. Его надо собирать. Разработчики почему-то пока не соизволили преодолеть трудности Андроид и создать для него плагин, предлагаются только приложения. На самом деле браузерная версия решила бы многие проблемы подписания документов и торгов.

Расширение КриптоПро

Первым делом нажмите на три точки около меню поиска. У вас выйдет меню.
Далее в открывшемся меню нажмите на шестеренку (она подписана Настройки).
В настройках находим пункт Каталог дополнений. Заходим в него.
Обратите внимание что мобильной версии магазина нет. Поэтому уменьшим картинку. Уменьшить картинку можно двумя пальцами по диагонали, но она все равно будет читабельна.
В поиск по магазину пишем слово cryptopro. Магазин сам даст подсказку (cryptopro extension).
Чуток пролистываем налево экран, нажимаем на расширение, и вот она, установка.
Жмем Установить, затем Установить расширение. Как только надпись на кнопке поменялась на Удалить из Chrome вкладку можно закрыть.

Возвращаемся в Дополнения и проверяем результат.
У вас должно работать расширение под надписью Из других источников.
Проверка делается на том же сайте что и на ПК.

Федеральный закон ФЗ-63 устанавливает сферу применения, процесс получения и использования электронной цифровой подписи, в т.ч. и новой мобильной подписи (МЭП). От обычной ЭЦП отличается мобильная подпись тем, что выдается в салоне сотовой связи, не требует специального лицензионного программного обеспечения и может использоваться с любого цифрового устройства. Она не обладает полной юридической силой, но позволяет идентифицировать отправителя документа или подтвердить действие в интернет-пространстве.

Что такое мобильная подпись

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

Мобильная электронная подпись

Использование мобильной подписи имеет ряд преимуществ:

  • возможность установки МЭП на разные мобильные устройства;
  • удаленная работа при необходимости, в т.ч. в международном роуминге;
  • простота и удобство интерфейса;
  • возможность установки различных сервисов и дополнительных электронных услуг.

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

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

Где и как получить подпись

Для получения мобильной подписи нужно обратиться в салон сотовой связи с паспортом. После заполнения заявления и оплаты услуги процесс изготовления МЭП занимает около 15 минут. Стоимость изготовления подписи зависит от региона и выбранного оператора и в среднем составляет около 1000 рублей.

Технические характеристики МЭП

Безопасность мобильной подписи обеспечивает уникальный пин-код, который выдается при активации SIM-карты. Формируется код в соответствии со стандартами ГОСТа РФ Р-34.10-2012.

С технической стороны МЭП также имеет ряд преимуществ:

  • не требует использования электронного носителя подписи, что снижает риски потери или порчи ЭЦП;
  • не требует покупки и установки лицензионного ПО;
  • не требует привязки к ПК.

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

Возможности МЭП

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

Сам процесс идентификации пользователя выглядит так: владелец SIM-карты обращается через электронный сервис для получения услуги, и его автоматически переправляют на сервер авторизации, аутентификации и идентификации. Для определения выданного сертификата используется телефонный номер. После проверки действительности статуса сертификата выполняются требования по установке полномочий владельца МЭП для работы в системе. Все процессы происходят путем обмена бинарными SMS.

Для подтверждения согласия при выполнении операции (денежный перевод, подпись, оплата услуги и т.д.) владелец телефона вводит личный код. Поставщик услуг одновременно получает полную информацию о пользователе: ФИО, паспортные данные и данные сертификата открытого ключа. При подписании договора сервер поставщика услуг направляет владельца ЭЦП на сервер формирования МЭП по защищенному каналу.

Формирование МЭП также происходит через отправку бинарного SMS с хэш-значением документа. Активация подписи происходит при помощи повторного введения пин-кода, а после проверки документа сервер передает его поставщику услуг.

Как подписать документ при помощи МЭП

Для подписания документа необходимо открыть приложение и выбрать «Подписать». Затем необходимо добавить документ, на котором нужно поставить МЭП.

Выбор файла для подписи

Файл выбран

Затем нажать еще раз «Подписать».

Подписание файла мобильной подписью

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

Введение данных

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

Документ подписан мобильной подписью

Использование мобильной электронной подписи имеет ряд преимуществ: она не требует использования носителя, что снижает риски кражи или поломки, не требует привязки к определенному рабочему месту и позволяет подписывать документы в режиме онлайн из любой точки мира. Получить МЭП можно в салоне сотовой связи за несколько минут, имея при себе паспорт. Заявление на выпуск ЭЦП пользователь заполняет в салоне связи. Для дальнейшей работы нужно лишь установить и активировать специальное мобильное приложение.

Читайте также: