Bouncy Castle,Crypto ++,Elliptic Curve Crypto(ECC),无法解码

时间:2011-11-04 11:16:17

标签: c# .net bouncycastle crypto++

我们使用Crypto ++库的ECC部分获得了C ++解决方案,但不得不转向.NET解决方案。由于微软ECC代码的文档很少,我目前正在尝试使用文档较少的Bouncy Castle库(至少有可用的源代码)。我使用BC工作正常加密和解密;解密已使用Crypto ++加密的数据证明有点问题。

我最近的一个问题是,当我尝试解密一个字符串时,我得到的“IMac代码无法等于”异常。 BC是否在密文中添加了某种MAC?任何人都知道可能导致这种情况的原因吗?

谢谢, 帕特里克

2 个答案:

答案 0 :(得分: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。它们并不为人所知并且经常不被使用,但它们是非常好的方案。它们将许多基元组合成一个,这使得它易于正确使用并且难以正确使用。从技术上讲,IND-CCA2是一个强大的安全概念。

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

回到你的问题,综合加密方案提供的一个问题是密文上的MAC。

  

任何人都知道造成这种情况的原因是什么?

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

在Crypto ++和Bouncy Castle的情况下,由于没有测试向量,每个人都有一个轻微的错误,因此每个人都做了一些不同的事情。这意味着ECIES计划没有很好地互操作(或者更准确地说,根本没有)。您可以在Crypto ++ wiki上的Bouncy Castle Patch了解详细信息。

继续前进,Crypto ++ 5.7 与Bouncy Castle 1.54开箱即用。将来,BC所需的课程将记录在Crypto++ wikiCrypto++ manual

答案 1 :(得分:0)

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

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