3

Crypto++ライブラリのECC部分を使用したC++ソ​​リューションがありますが、.NETソリューションに移行する必要があります。MicrosoftのECCコードの最小限のドキュメントのため、私は現在、わずかに最小限のドキュメントであるBouncy Castleライブラリを実験しています(少なくとも利用可能なソースコードがあります)。BCを使用した暗号化と復号化が正常に機能しています。Crypto ++ですでに暗号化されているデータの復号化は、やや問題があります。

私の最新の問題は、文字列を復号化しようとすると、「IMacコードが等しくなりませんでした」という例外が発生することです。BCは暗号文にある種のMACを追加しますか?何がこれを引き起こしているのか誰か知っていますか?

ありがとう、パトリック

4

2 に答える 2

3

私の最近の問題は、文字列を復号化しようとすると、「IMac コードが等しくなりませんでした」という例外が発生することです。

このメッセージは現在の BC ディストリビューションの一部ではないようです:

$ cd bouncy-castle-153
$ grep -IR "IMac codes failed to equal" *
$

誰かの GitHub の一部のようです。PassKit IesEngine.csを参照してください。

過去の BC ディストリビューションの一部であった可能性があります。


BC は暗号文に何らかの MAC を追加しますか?

その名前IesEngine.csは、統合暗号化スキームであることを示しています。それらはあまり知られていないため、あまり使用されていませんが、非常に優れたスキームです。多くのプリミティブを 1 つに結合することで、正しく使用するのが簡単になり、間違って使用するのが難しくなります。より技術的には、セキュリティの強力な概念であるIND-CCA2です。

私が知っているスキームには2つのタイプがあります。1 つ目は整数に対する IES であり、2 つ目は楕円曲線に対する IES です。整数上のものは離散対数統合暗号化方式とも呼ばれ、楕円曲線上のものは通常楕円曲線統合暗号化方式と呼ばれます。Crypto++ や Bouncy Castle などのライブラリは、両方を提供します。

質問に戻ると、統合暗号化スキームが提供するものの 1 つは、暗号文上の MAC です。


誰がこれを引き起こしているのか知っていますか?

残念ながら、これを引き起こしている可能性のあることがいくつかあります。ほとんどの IES は、各委員会がスキームを微調整しているため、互換性がありません。さらに悪いことに、一連のテスト ベクトルが公開されているのを見たことがありません。物事を相互運用できるようにするには、懸命に取り組む必要があります。

Crypto++ と Bouncy Castle の場合、テスト ベクトルがなかったため、それぞれに軽度のバグがありました。つまり、ECIES スキームはうまく相互運用できませんでした (より正確には、まったく相互運用できませんでした)。詳細については、Crypto++ wiki のBouncy Castle Patchを参照してください。

今後、Crypto++ 5.7はそのままで Bouncy Castle 1.54 と相互運用します。将来、BC に必要なクラスは、Crypto++ wikiおよびCrypto++ マニュアルで文書化される予定です。

于 2015-12-13T01:55:42.083 に答える
0

上記の Crypto++ 5.6.3 弾む城のパッチは、1.53 より前の弾む城のバージョンでのみ機能することに注意してください。

新しいバージョンでは、Crypto++ パッチを微調整して 8 バイトの Mac を許可するか、Java 側で OldECIES クラスを使用して相互運用性を確保できます。

于 2016-06-24T15:16:59.240 に答える