5

カスタム暗号を公開する必要があるため、クライアント用の新しい JCE プロバイダーを作成しています。とを拡張CipherSpiProviderSpiたら、ビルドの準備が整いました。そこで私はクライアントに、対象とする Java のバージョンを尋ねました。彼らは次のように答えました:

# java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap3260sr9fp2-20110627_03(SR9 FP2)) IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr9-20110624_85526 (JIT enabled, AOT enabled) J9VM - 20110624_085526 JIT  - r9_20101028_17488ifx17
GC   - 20101027_AA)
JCL  - 20110530_01
#

くそ。そのため、彼らは AIX マシンで IBM Java 1.6.0 を使用しています。

必要な機能をサポートする特注の JCE プロバイダーのほとんどを (プロバイダーの実装方法ガイドを使用して) 作成し、パッケージからクラスを拡張ProviderSpiおよび抽象化しました。IBM Java JDK を入手して、から抽象クラスを拡張する必要がありますか? それとも、Sun をルートとする Java コード署名証明書を使用して署名された JCE プロバイダー JAR を取得し、それを AIX システムの適切な場所に直接配置することはできますか? (これらのうちの1つはばかげていますが、どれかわかりません)。CipherSpicom.sun.*com.ibm.*

JCE / JVM フレーバーについて、IBM ルートの Java コード署名証明書 (存在する場合) が必要かどうか、または Sun ルートの署名で十分かどうかを知るのに十分な知識がありません。

4

1 に答える 1

4

Oracle (Sun) と IBM JRE の両方が、互いの証明書を使用してプロバイダーの署名を検証しています。そのため、Sun の証明書を使用して署名されたプロバイダーがあれば、IBM JRE で動作します。そうです - IBM ルートの Java コード署名証明書が存在します (CA が存在し、IBM 内部にいる場合でも証明書を取得することはほとんど不可能です) が、Sun ルートの署名で十分です。暗号化プロバイダーは IBM JRE で動作します。com.ibmパッケージを使用する必要はありません。さらに、プロバイダーの署名要件をバイパスすることも可能です: Java HotSpot Cryptographic Provider signature validation issue

詳細な説明

1.証明書

プロバイダー証明書の検証は、内部の Java 1.6 JCE クラスによって行われます。

  • オラクルでjavax.crypto.SunJCE_b#a(X509Certificate c)
  • IBMでjavax.crypto.b#a(X509Certificate c)

署名の検証に使用される CA 証明書は、クラス ファイルに保存されます。Oracle JVM ではプレーン文字列として。IBM はこれをよりスマートに行っています。証明書の文字列は隠されています。それらを隠すには、次のコードを使用する必要があります。

final char[] key = {0x5f, 38, 3, 111, 110};

char[] decode(final char[] input) {
    final char[] output = new char[input.length];
    for (int i = 0; i < output.length; i++) {
        output[i] = (char)(input[i] ^ key[i % 5]);
    }
    return output;
}

したがって、IBM Java 1.6 では、CA コード署名証明書を見つけることができます。

  • CN = JCE Code Signing CA, OU = Java Software Code Signing, O = Sun Microsystems Inc, L = Palo Alto, S = CA, C = US
  • CN = JCE Code Signing CA, OU = IBM Code Signing, O = IBM Corporation, C = US
  • CN = JCE Code Signing - Framework, OU = IBM Code Signing, O = IBM Corporation, C = US

2. 基本プロバイダー クラス

java.security.Providerクラスを延長する必要があります。たとえばcom.ibm.crypto.provider.IBMJCE、IBM JRE にバンドルされています。(私の知る限り、クラスはありませんProviderSpi。)javax.crypto.CipherSpiクラスも使用する必要があります。たとえばcom.ibm.crypto.provider.DESCipher、IBM プロバイダーからそれを行います。

于 2013-06-20T17:39:24.457 に答える