2011-11-04 101 views
2

我们已经有了一个使用Crypto ++库的ECC部分的C++解决方案,但不得不转向.NET解决方案。由于微软ECC代码的最小文档数量很少,我目前正在尝试使用稍微少一些的Bouncy Castle库(至少有源代码可用)。我有BC加密和解密工作正常;对已经用Crypto ++加密的数据进行解密证明会有些问题。Bouncy Castle,Crypto ++,椭圆曲线加密(ECC),未能解码

我最近的问题是,当我尝试解密一个字符串时,我得到一个“IMac代码失败等于”异常。 BC是否将某种类型的MAC添加到密文中?任何人都知道这可能是什么原因造成的?

感谢, 帕特里克

+1

你怎么能问这样的问题,并提供绝对零代码?你可以在IESEngine类中得到这个异常,所以显然你使用ECIES。是的,IES确实计算了一个MAC。您的Crypto ++代码是否使用IES? –

+0

我在问有关充气城堡的功能,而不是我的代码功能......感谢有关IES的提示,这就是我需要知道的:) – Patrick

+0

您是否使用它?你应该发布工作ECIES代码来在这个问题上完整的循环:) – DeepSpace101

回答

3

我最新的问题是,当我尝试解密字符串,我得到一个“IMAC码未能平等”的例外。

此消息似乎并不为当前BC发行版的一部分:

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

它似乎是一个人的GitHub上的一部分;见PassKit IesEngine.cs

它可能是过去BC发行的一部分。


不BC添加某种MAC到密文?

名称IesEngine.cs告诉我一个Integrated Encryption Scheme。他们不是很有名,而且经常没有使用,但他们很好的好计划。它们将很多原始码合并为一个,这使得正确使用和使用不当都很困难。更技术性地说,这是一个强大的安全概念。

我知道有两种类型的方案。第一个是整数的IES,第二个是椭圆曲线上的IES。整数之一也被称为Discrete Logarithm Integrated Encryption Scheme,而椭圆曲线上的那个通常被称为Elliptic Curve Integrated Encryption Scheme。像Crypto ++和Bouncy Castle这样的图书馆提供了这两种功能。

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


任何一个知道这可能是导致此?

不幸的是,有很多事情可能导致这种情况。由于每个委员会都在调整计划,因此大多数IES都不兼容。更糟糕的是,我从来没有见过发布一套测试向量。你必须努力让事情互操作。

在Crypto ++和Bouncy Castle的情况下,每个人都遭受了轻微的bug,因为没有测试向量,所以每个人都做了一些不同的事情。这意味着ECIES计划没有良好的互操作性(或者更准确地说,)。您可以在Crypto ++ wiki上的Bouncy Castle Patch上阅读有关详细信息。

向前移动,Crypto ++ 5.7 开箱即用Bouncy Castle 1.54进行互操作。未来,BC所需的课程将记录在Crypto++ wikiCrypto++ manual

0

请注意,上述的Crypto ++ 5.6.3弹性城堡补丁只适用于1.53之前的充气城堡版本。

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