Подошло время задействовать криптографические механизмы PKCS#11 и на платформе Android. Кто-то может сказать, что нет аппаратных токенов для Android. Но, если это и так, то это только временное явление. Но уже сегодня можно поставить программный токен или использовать облачный токен. Поскольку утилита cryptoarmpkcs-A разрабатывается для платформы Android с использованием Androwish на скриптовом языке Tcl/Tk, то для подключения токенов используется пакет TclPKCS11 версии 1.0.1.
При этом никакой переработки пакета не потребовалось. Все что было сделано, это был добавлены в проект скрипт для сборки библиотеки пакета, написанной на языке Си, под Android и сам дистрибутив библиотеки. В этот же проект было решено добавить и библиотеки программного ls11sw2016 и облачного ls11cloud токенов для различных платформ.
Далее все просто. Добавляем на второе окно кнопки выбора рабочего токена и получаем:
По умолчанию подключается программный токен. Если ранее он не создавался, то будет предложено проинициализировать его. Напомним, что инициализация токена состоит в назначении метки и установлении пользовательского PIN-кода:
Отметим, что программный токен разработан с соответствии с рекомендациями PKCS#11 v.2.40 и ТК-26. Для получения полной информации о токене, включая поддерживаемые криптографические механизмы, достаточно нажать на кновку «О токене и его криптографии» в основном меню («Функционал»). Сегодня ни один аппаратный токен с поддержкой российской криптографии не имеет такого функционала:
Возникает вопрос:- как установить личный сертификат на токен. Есть два варианта. Первый вариант это импортировать сам сертификат и его ключевую пару через контейнер PKCS#12 (кнопка «Работаем с PKCS12/PFX»):
Второй вариант предполагает создания запроса (PKCS#10) на сертификат, Этот вариант (функция «Запрос на сертификат») предусматривает генерацию ключевой пары непосредственно на токене:
Теперь можно сохранить запрос на флэшки и вместе с документами идти в удостоверяюший центр за сертификатом. Если вы будете использовать сертификат в тестовых целях или внутрикорпоративно, то для выпуска сертификата можно воспользоваться и утилитой CAFL63. Полученный сертификат импортируется на токен на вкладке «Просмотр запроса/Сертификата»:
Теперь можно подписывать документы сертификатами, хранящимися на токене, используя вкладку «Подписать документ».
В следующей статье мы расскажем как подключиться к облачному токену. И остается пока открытым вопрос с переносом на мобильную платформу функций генерации сертификатов. Есть ли в этом необходимость?
Обновленную версию утилиты cryptoarmpkcs-A для платформы Android можно скачать здесь:
Для сборки пакета используется утилита bones из состава AndroWish SDK. После успешной сборки пакета появляется кнопка «Install & run», после нажатия которой открывается окно журнала, в котором отображаются выходные данные adb logcat (средства ведения журнала Android Debug Bridge). Недостатком этого экрана является то, что в нем сложно найти сообщение об ошибке, особенно с включенным флажком «V» (verbose). Поэтому была добавлена кнопка «Save», которая сохраняет журнал в файле /tmp/logBone.txt (речь идет о Linux):
С появлением этой кнопки процесс отладки приложения значительно упростился.
Для добавления кнопки достаточно добавить в файл bones после строки 2591 следущий код:
Команда сохранения adb_logcat_save имеет вид:
При этом никакой переработки пакета не потребовалось. Все что было сделано, это был добавлены в проект скрипт для сборки библиотеки пакета, написанной на языке Си, под Android и сам дистрибутив библиотеки. В этот же проект было решено добавить и библиотеки программного ls11sw2016 и облачного ls11cloud токенов для различных платформ.
Далее все просто. Добавляем на второе окно кнопки выбора рабочего токена и получаем:
- программный токен ls11sw2016;
- облачный токен ls11cloud;
- другой токен PKCS11#11.
По умолчанию подключается программный токен. Если ранее он не создавался, то будет предложено проинициализировать его. Напомним, что инициализация токена состоит в назначении метки и установлении пользовательского PIN-кода:
Отметим, что программный токен разработан с соответствии с рекомендациями PKCS#11 v.2.40 и ТК-26. Для получения полной информации о токене, включая поддерживаемые криптографические механизмы, достаточно нажать на кновку «О токене и его криптографии» в основном меню («Функционал»). Сегодня ни один аппаратный токен с поддержкой российской криптографии не имеет такого функционала:
Возникает вопрос:- как установить личный сертификат на токен. Есть два варианта. Первый вариант это импортировать сам сертификат и его ключевую пару через контейнер PKCS#12 (кнопка «Работаем с PKCS12/PFX»):
Второй вариант предполагает создания запроса (PKCS#10) на сертификат, Этот вариант (функция «Запрос на сертификат») предусматривает генерацию ключевой пары непосредственно на токене:
Теперь можно сохранить запрос на флэшки и вместе с документами идти в удостоверяюший центр за сертификатом. Если вы будете использовать сертификат в тестовых целях или внутрикорпоративно, то для выпуска сертификата можно воспользоваться и утилитой CAFL63. Полученный сертификат импортируется на токен на вкладке «Просмотр запроса/Сертификата»:
Теперь можно подписывать документы сертификатами, хранящимися на токене, используя вкладку «Подписать документ».
В следующей статье мы расскажем как подключиться к облачному токену. И остается пока открытым вопрос с переносом на мобильную платформу функций генерации сертификатов. Есть ли в этом необходимость?
Обновленную версию утилиты cryptoarmpkcs-A для платформы Android можно скачать здесь:
P.S. Сохранение журнала
Для сборки пакета используется утилита bones из состава AndroWish SDK. После успешной сборки пакета появляется кнопка «Install & run», после нажатия которой открывается окно журнала, в котором отображаются выходные данные adb logcat (средства ведения журнала Android Debug Bridge). Недостатком этого экрана является то, что в нем сложно найти сообщение об ошибке, особенно с включенным флажком «V» (verbose). Поэтому была добавлена кнопка «Save», которая сохраняет журнал в файле /tmp/logBone.txt (речь идет о Linux):
С появлением этой кнопки процесс отладки приложения значительно упростился.
Для добавления кнопки достаточно добавить в файл bones после строки 2591 следущий код:
ttk::button $l.frame.clear -text "Clear" -width 6 -command [list adb_logcat_clear $l.text]
#Добавленный код
ttk::button $l.frame.save -text "Save" -width 6 -command [list adb_logcat_save $l.text]
ttk::button $l.frame.run -text "Run" -width 6 -command [list adb_logcat_run $l]
Команда сохранения adb_logcat_save имеет вид:
proc adb_logcat_save {text} {
set tt [$text get 1.0 end]
set file "/tmp/logBone.txt"
file delete -force $file
#Собственно запись в файл
set fd [open $file w]
chan configure $fd -translation binary
puts -nonewline $fd $tt
close $fd
}
kovserg
Дурацкий вопрос: а кому может это понадобиться в таком виде?
Если использовать телефон как токен, то подписывать документы всё равно удобнее на компьютере. Почему бы просто не сделать подпись по сети (через bt или wifi), но ключ хранить в телефоне и при каждой подписи например просить отпечаток пальца
отрезанного отвладельца подписи? В данном случае телефон будет просто такимнавороченнымоблачным хранилищем личных ключей с логами, преферансом и поэтессами.saipr Автор
Почему дурацкмй? Нормальный вопрос. Попытаюсь ответить.
Первое, в следующей публикации будет показано как сделать подпись с использованием облачного токена на телефоне.
Второе, хотя лично я придерживаюсь вашей точки зрениея,
окружающие меня люди хотят подписывать документы на телефоне. Так что многие считают, что нужно иметь и приложение для подписания документов на компьютере.
Кстати, при формировании подписи сеть активно используется: получить CRL или OCSP ответы, корневые сертификаты и т.п.
Да, и отрезать ничего не надо.
kovserg
И еще нормальные «шизофреники» никогда не доверят свои ключи облачным сервисам. Да и телефонам тоже.
saipr Автор
Все люди посвоему странные, поэтому они и люди.
Я сам такой. Но мы, говоря про токены PKCS#11, имеем ввиду прежде всего аппаратные токены с поддержкой соответсвующей криптографии. А это фактически автономные компьютеры.