Как исправить или избежать ошибки «Обнаружена ошибка расшифровки / подписи движка RSA» при входе в систему java - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь подписать строку с использованием базового c кода RSA с помощью SpongyCastle на android:

Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
...


    Signature sign = Signature.getInstance("SHA256withRSA");
    RSAPrivateKey privateKey = parsePrivateKey( pk_pem_string );
    sign.initSign(privateKey, new SecureRandom());
    sign.update(content.getBytes("UTF-8"));
    byte[] signature = sign.sign();

Но происходит сбой с этой ошибкой:

E/AndroidRuntime( 3392): Caused by: java.security.SignatureException: java.lang.IllegalStateException: RSA engine faulty decryption/signing detected
E/AndroidRuntime( 3392):    at org.spongycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi.engineSign(DigestSignatureSpi.java:142)
E/AndroidRuntime( 3392):    at java.security.Signature$Delegate.engineSign(Signature.java:1418)
E/AndroidRuntime( 3392):    at java.security.Signature.sign(Signature.java:739)

I обнаружили, что эта ошибка генерируется для предотвращения атак RSA-CRT, но больше нет информации о том, как исправить или предотвратить проблему. Мне нужно подписать с SHA256 с помощью RSA, потому что мне нужно взаимодействовать с внешним API, который ожидает содержимое, подписанное этим алгоритмом.

Если я использую поставщика безопасности Android по умолчанию, знак завершается с ошибкой:

Caused by: java.lang.RuntimeException: error:04000044:RSA routines:OPENSSL_internal:internal error
...