RSA-шифрование в JavaCard

Я надеюсь, что кто-нибудь может помочь мне с моей проблемой.
Я разрабатываю апплет javacard, и моя задача состоит в том, чтобы зашифровать секрет (хранящийся в апплете) с помощью открытого ключа сервера. Возвращаемый шифр будет отправлен на сервер afterwrds — скрипт php на сервере — где шифр должен быть снова расшифрован с помощью закрытого ключа сервера.

И проблема в том, что дешифрование в php-скрипте (openssl_private_decrypt (…)) ничего не возвращает, поэтому оно ни к чему не приводит.

PS: Я также видел несколько примеров шифрования javacard RSA, и почти все они используют закрытый ключ для шифрования, что, по моему мнению, означает, что данные должны быть только подписаны, а не зашифрованы, я прав?

Вот пример кода из апплета javacard:

byte[] secret ={ (byte)0x01,(byte)0x02,(byte)0x03,(byte)0x04}
public Crypto() {
RSAPublicKey rsaPublicKey = (RSAPublicKey) KeyBuilder.buildKey(
KeyBuilder.TYPE_RSA_PUBLIC, KeyBuilder.LENGTH_RSA_2048, false);
Cipher rsaCipher = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
encryptSecretWithPubKey();
}
.....
// here are some methods for setting the public key
.....

public byte[] encryptSecretWithPubKey() {
if (!isRSAKeyInitialized) {
ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);
}
// make sure the blocks size which should be encrypted is not longer
// than 53 bytes; see ALG_RSA_PKCS1 definition for encryption.
if (secret.length >= rsaKeyModulus.length - 11) {
// normally not the case, so ignore it for this test
}
rsaCipher.init(rsaPublicKey, Cipher.MODE_ENCRYPT);
final byte[] encryptedMsg = JCSystem.makeTransientByteArray(
(short) 256, JCSystem.CLEAR_ON_DESELECT);

if (rsaPublicKey.isInitialized())
rsaCipher.doFinal(secret, (short) 0,
(short) secret.length, encryptedMsg, (short) 0);
return encryptedMsg;
}

А вот функция, которую я использую для расшифровки в сценарии php:

public function decrypt($data)
{ // data is in binary format
if (openssl_private_decrypt($data, $decrypted, $this->privkey))
$data = $decrypted;
else
// openssl function fails here, so no plain data is returned
$data = '';
return $data;
}

Я надеюсь, что вы можете помочь мне понять, что я не так, или это может быть ошибка в классе Cipher, чего я не ожидаю 🙂

РЕДАКТИРОВАТЬ:
Расшифровка openssl на сервере выдает следующее сообщение об ошибке:
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02
ошибка означает, что тип блока неправильный. Я использую открытый ключ в апплете, поэтому тип блока должен быть 02, но это не …

РЕДАКТИРОВАТЬ:

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]