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告诉我它是一个集成加密方案。它们并不为人所知,也经常不被使用,但它们是非常好的方案。它们将许多原语组合成一个,这使得正确使用很容易,也很难错误使用。从技术上讲,IND-CCA2是一个强有力的安全概念。

我知道有两种类型的方案。第一个是整数上的 IES,第二个是椭圆曲线上的 IES。one over integers 也称为离散对数集成加密方案,one over 椭圆曲线通常称为椭圆曲线集成加密方案。Crypto++ 和 Bouncy Castle 之类的库同时提供了它们。

回到您的问题,集成加密方案提供的一件事是密文上的 MAC。


有谁知道这可能是什么原因造成的?

不幸的是,有很多事情可能会导致这种情况。由于每个委员会都在调整计划,大多数 IES 不兼容。更糟糕的是,我从未见过公开的一组测试向量。您必须努力使事物能够互操作。

在 Crypto++ 和 Bouncy Castle 的情况下,由于没有测试向量,它们都遭受了轻微的错误,因此它们的处理方式略有不同。这意味着 ECIES 方案不能很好地互操作(或者更准确地说,根本没有)。您可以在 Crypto++ wiki 上的Bouncy Castle Patch中阅读详细信息。

展望未来,Crypto++ 5.7与 Bouncy Castle 1.54 开箱即用。将来,BC 所需的类将记录在Crypto++ wikiCrypto++ 手册中。

于 2015-12-13T01:55:42.083 回答
0

请注意,上面提到的 Crypto++ 5.6.3 充气城堡补丁仅适用于 1.53 之前的充气城堡版本。

对于较新的版本,您可以调整 Crypto++ 补丁以允许 8 字节 Mac 或使用 Java 端的 OldECIES 类来实现互操作性。

于 2016-06-24T15:16:59.240 回答