Ошибка внешней аутентификации смарт-карты 6982 - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь обеспечить безопасность связи с S.A.M. (Модуль безопасного доступа) Сначала я отправляю MSE: SET APDU для внешней аутентификации:

//83 is my private key's ID. F8 is algorithm identifier 
OutgoingAPDU : 002281A4068001F8840183
ResponseSW1SW2 : 9000 

Перед отправкой внешний авториз. В документах говорится, что шифрование выполняется с помощью RSAES-OAEP PKCS # 1, поэтому я использую эту команду openssl для шифрования.

openssl_public_encrypt($dataForEncryption, $output, $publicKey['key'], OPENSSL_PKCS1_OAEP_PADDING);
//$firstPartOfData => first 488 of $output
//$secondPartOfData => last 24 of $output
//total $output is 512

Прежде всего, это истинный отступ для RSAES-OAEP PKCS # 1.

А потом внешняя аутентификация. Команды APDU.

//strlen($firstPartOfData) = 488
OutgoingAPDU : 10820000F4.$firstPartOfData
ResponseSW1SW2 : 9000
//strlen($firstPartOfData) = 24
OutgoingAPDU : 008200000C.$secondPartOfData
ResponseSW1SW2 : 6982

Куда я скучаю? Или где ошибка. Я не мог выяснить проблему.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

RSA / OAEP требует настройки типа функции генерации маски для создания заполнения OAEP. Этот тип функции генерации масок имеет только один действительный член: MGF1, поэтому в общем случае эта конфигурация неявна (то есть вам не нужно настраивать ее самостоятельно). Однако сам MGF1 позволяет пользователю настраивать хеш, используемый внутри. MGF1 по умолчанию использует SHA-1 (безопасным способом), но он также может быть настроен с SHA-256 или любым другим хэшем.

В вашем случае OAEP с SHA-256 использовался внутри смарт-карты, что приведет к ошибке во время дешифрования (раскладывание сообщения после модульного возведения в степень с частным показателем), если вы использовали по умолчанию SHA-1 в PHP .

Чтобы правильно установить хеш, вы можете использовать phpseclib со следующим кодом:

 $phpsec->setMGFHash('sha256');
 $phpsec->setHash('sha256');
 $phpsec->loadKey($cer["key"]);
 $phpsec->encrypt($plaintext);

Сгенерированное ошибкой слово состояния 6982 на смарт-карте. Это довольно плохо выбранное слово состояния, так как оно означает «условия безопасности не выполнены», и вы бы ожидали , если условия доступа для операции дешифрования не будут выполнены. Однако в ИСО / МЭК 7816-4 не указано, когда должны генерироваться слова состояния (что просто глупо, но так оно и есть).

0 голосов
/ 02 мая 2018
  1. OEAP, см. Википедия полностью отличается от PKCS # 1. Хотя это может привести к ошибке во время обработки, 69 82 не очень вероятно.
  2. 69 82 означает, что у вас недостаточно прав доступа. (Поскольку права обычно проверяются перед тем, как действительно начать применять ключ, данные могут быть неверными). Скорее всего, ключ RSA, который вы пытаетесь использовать, требует проверки PIN-кода. Проверьте документацию эмитента карты, чтобы узнать.
...