我的最新问题是,当我尝试解密一个字符串时,我得到一个“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++ wiki和Crypto++ 手册中。