Использование механизмов криптографических токенов PKCS#11 на платформе Android +5


Подошло время задействовать криптографические механизмы PKCS#11 и на платформе Android. Кто-то может сказать, что нет аппаратных токенов для Android. Но, если это и так, то это только временное явление. Но уже сегодня можно поставить программный токен или использовать облачный токен. Поскольку утилита cryptoarmpkcs-A разрабатывается для платформы Android с использованием Androwish на скриптовом языке Tcl/Tk, то для подключения токенов используется пакет TclPKCS11 версии 1.0.1.

При этом никакой переработки пакета не потребовалось. Все что было сделано, это был добавлены в проект скрипт для сборки библиотеки пакета, написанной на языке Си, под 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
}




К сожалению, не доступен сервер mySQL