(2015-10-22 18:35:23 отредактировано Oleg Shishkin)

Шифрование на Android

Пытаюсь вызвать функцию шифрования - для этого необходимо задать CK_MECHANISM
выбираю CKM_GOSTR3410_WITH_GOSTR3411 - ф-ция C_EncryptInit дает ошибку 0x70(CKR_MECHANISM_INVALID) - т.е. неправильно выбран механизм

выбираю CKM_GOST28147/CKM_GOST28147_ECB получаю ошибку 0x63 (CKR_KEY_TYPE_INCONSISTENT)  - использую PublicKey

вопросы:
- ГОСТ 3410 определяет только цифровую подпись и не предназначен для шифрования?
- для ГОСТ 28147 причина ошибки - несоответствие сертификата на токене вызываемой функции?

Re: Шифрование на Android

Пожалуйста, разберитесь сначала как работает современная криптография.
Этих ссылок должно хватить.
https://ru.wikipedia.org/wiki/Электронная_подпись
https://ru.wikipedia.org/wiki/Шифрование
https://ru.wikipedia.org/wiki/Хеширование
https://ru.wikipedia.org/wiki/ГОСТ_Р_34.10-2012
https://ru.wikipedia.org/wiki/ГОСТ_28147-89
https://tools.ietf.org/html/rfc4357
+ см. наши сишные примеры DeriveWrapUnwrap и EncDecGOST

Re: Шифрование на Android

спасибо за ссылки - особенно на ГОСТ 28147 (исходники шифрования с его использованием еще раз внимательно посмотрел)
это мой недосмотр

Re: Шифрование на Android

Извините за нескромный вопрос - просто посмотрел каталог для IOS и был просто приятно удивлен от наличия например там header файла pkcs11t.h. Константы определенные там действительны и на других платформах?

Re: Шифрование на Android

и да и нет.
Да - потому что интерфейс pkcs#11 действительно одинаков на всех платформах
нет - потому что способ доступа к интерфейсу на iOS и Android отличается

То, что вы упоминаете это сишный интерфейс pkcs#11
В iOS можно смешивать Си и Objective-C код в одном проекте, так как компилятор один и тот же
В android для вызова Си-интерфейсов необходима прокладка в виде JNI или JNA (поэтому хедеры не могут быть использованы напрямую)

Re: Шифрование на Android

по сути мне нужна железяка(реализация софт шифрования ECDSA занимает >6сек на HTC one 7), которая просто тупо выполняла нужную математику с указателями на byte array(вкупе с их длиной, упакованной в 4/8 byte array). Поэтому мне наплевать было на все ГОСТЫ, сертификаты и пр - просто нужно описание правильного вызова функций(последовательностей) и их параметров. При этом мне не важно на каком языке это написано. Важно полнота и правильность описания(соответствие ОС и языку).  Поэтому когда видишь в примерах:
- несоответствие методов передачи параметров используемому языку
- разные по количеству описанных констант заголовочные файлы
- ошибки в заголовочных файлах
- это очень удивляет. При этом очень удивляет состав функций, используемых для примеров - в разных ос и языках - он разный. Поэтому приходится копать сразу все языки и ос.