1

いくつかの暗号化コードのトラブルシューティング中に、スタックトレースの奇妙な階層を見ました。元の問題は解決しましたが、このようなスタックトレースをどのように生成できるかについて興味がありました。誰かが私を啓発できますか?

スタックトレースをそのままコピーして貼り付けることはできないことに注意してください。プロプライエタリコードを公開できるフレームを削除する必要があります。

businesscode.BusinessException: Failed while generating session key
        at businesscode.businessthing.BusinessMethod(BusinessApp.java:NN)
        ... NN more
Caused by: java.security.NoSuchProviderException: JCE cannot authenticate the provider XXX
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
        at businesslib.generateKey(BusinessLib.java:NN)
        ... NN more
Caused by: javax.util.jar.JarException: Cannot parse X.jar
        at javax.crypto.SunJCE_c.a(DashoA13*..)
        at javax.crypto.SunJCE_b.b(DashoA13*..)
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        ... 25 more

aやb( SunJCE_c.a 、SunJCE_b.b)のようなメソッド名と、 DashoA13 *としてのファイル/行情報を使用するのはなぜですか?

Oracle Java 6 32ビット、64ビットLinuxおよび32ビットWindowsで実行。

これは、おそらくランタイムの最適化のために、一部の情報が利用できないことが原因である可能性がありますか?または、意図的な難読化ですか?JNI?

これを引き起こした問題は、サードパーティの暗号プロバイダーがjarファイルに正しくパッケージ化されていないことでした。

編集:元の問題(NoSuchProviderException: JCE cannot authenticate the provider...)は、元のjarから暗号プロバイダークラスを抽出し、新しい元のjarに再パッケージ化した単純なビルドプロセスが原因でしたが、必要な署名情報はありませんでした。署名された瓶を思い出させてくれたSivaとowlsteadに感謝します:)

4

3 に答える 3

1

ここにはいくつかのオプションがあります(そして、これの前に署名が検証されたと思います):

  1. 署名の生成に使用された証明書/秘密鍵は現在古くなっています。
  2. 署名は、新しいバージョンのOracleJavaランタイムと互換性がありません。
  3. の内容の署名.jarが削除されたか、内容/署名が変更されました。

変な名前は; これらの名前は、コード難読化ツールで難読化されたクラスの名前です。はパブリックAPIの一部ではないため、内容を知る理由はありません。これらには署名を検証するためのコードが含まれているため、セキュリティに関連しています。

于 2012-08-22T18:18:50.543 に答える
0

サードパーティのクリプトプロバイダーは、すべてのjarファイル、特にプロバイダーjarに署名する必要があります。その署名はSUN(現在はoracle)によって信頼されている必要があります。

于 2012-08-22T17:47:20.417 に答える
0

楕円形の呼び出し署名(可変引数番号)ではありませんか?

于 2012-08-22T18:17:20.223 に答える