iOS 上の .rsaEncryptionOAEPSHA256 アルゴリズムと Java の互換性

okwaves2024-01-25  7

iOS アプリケーションから Java バックエンドに通信しようとしています。 SecKeyCreateEncryptedData で暗号化に .rsaEncryptionOAEPSHA256 アルゴリズムを使用すると、バックエンドで次のスタックトレースが表示されます。

Caused by: java.lang.SecurityException: Exception thrown while invoking doFinal(byte[]).
    at  ... 101 common frames omitted
Caused by: javax.crypto.BadPaddingException: Decryption error
    at java.base/sun.security.rsa.RSAPadding.unpadOAEP(RSAPadding.java:497)
    at java.base/sun.security.rsa.RSAPadding.unpad(RSAPadding.java:292)
    at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:366)
    at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:392)
    at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2207)
    ... 103 common frames omitted

Java バックエンドは、SunJCE プロバイダの RSA/ECB/OAEPWithSHA-256AndMGF1Padding アルゴリズムを使用しています。このプロバイダーは、MGF1 ダイジェストに SHA-1 を使用します。ただし、iOS のデフォルトでは SHA-256 が使用されます。

iOS のコードでこれを変更して互換性を持たせるにはどうすればよいですか?

注: 明確にするために、バックエンドが Java で RSA/ECB/PKCS1Padding を使用する iOS 上の .rsaEncryptionPKCS1 では、まったく同じ操作が現在正常に動作しています。

MGF1ParameterSpec.SHA256 を使用するように Java 暗号を更新することもできますが、残念ながら Android ではサポートされていないため、iOS で OAEP パラメータ仕様を再構成することをお勧めします。

– マーラー

2020 年 9 月 3 日 17:40

ちょっとした好奇心から、.rsaEncryptionOAEPSHA1 を試してみましたか?それが MGF を設定するのか、それともメッセージのハッシュ関数のみを設定するのかわかりません...

– ブラム

12 月2020 年 3 月 30 日、1:30

.rsaEncryptionOAEPSHA1 - 機能しません

– レオニフ

2022 年 12 月 13 日 9:34



------------------------

私が調査した結果から、同じ問題に直面しました。実験した結果、iOS で RSA/ECB/OAEPWithSHA-256AndMGF1Padding をサポートすることは事実上不可能です。

同様の問題: RSA/ECB/OAEPWithSHA-256AndMGF1Padding Swift の暗号化

しかし、これはアルゴリズムのみを扱っており、p については扱っていません。問題を追加します。

共有 この回答を改善します フォローする

2021 年 2 月 25 日 2:29 に回答

サムクロ

サムクロ

11

1

銅バッジ 1 個

1

この質問に対する答えはありますが、答えの主要部分が投稿にある方がよいでしょう。

– ユスフ・ヘイırsever

2021 年 2 月 25 日 6:07

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。