我正在寻找一种用于C ++程序中的快速不对称的电视算法。我们的应用程序访问存储在档案中的只读数据(自定义格式,与焦油有些相似),我想防止通过不对称加密档案索引对该存档进行任何修改(我知道这不是一个完美的解决方案,并且数据仍然可以使用某些技术提取和重新包装)。

一些 存档中的单个文件使用对称的密码加密,并将其加密键存储在存档索引(标题)中。这就是为什么我想不对称地加密存档标头的原因。

密码要求:
1)算法实现应与平台无关。
2)算法应易于实现,或者应该在库中(带有源代码)中可用,该算法允许 静止的 与专有应用程序链接,这意味着无法使用GPL/LGPL/病毒许可。 MIT/BSD许可的代码或公共域代码是可以接受的。
3)如果在库中有Cypher,理想情况下,它的内存足迹应该较小,并且实现应紧凑。我更喜欢使用C/C ++库,该库仅实现一个密码,而不是成熟的全功能密码集合。

最初,我想使用RSA,但是看起来它太慢了,无法有用,而且没有太多选择。

那么,关于我可以使用什么建议?

有帮助吗?

解决方案

好的,我找到了我一直在寻找的东西,我认为它比OpenSSL更好(至少是我的目的)。

有两个图书馆:
libtomcrypt, ,它实现了几个密码(包括RSA),并且 libtommath, ,这实现了Bignum算术。这两个库都在公共领域,易于破解/修改,并且比OpenSSL具有更简单的编程界面,并且(比OpenSSL都要好得多)文档。
与较旧的公共域RSA代码不同,我以前发现, ,libtomcrypt可以很快生成新密钥,可以导入OpenSL生成的键并支持填充。关于libtomcrypt的另一个好处是,它没有额外的依赖关系(例如,Windows Windows想要GDI32),并且比OpenSSL小。

毕竟,我决定使用RSA进行加密,因为(对我来说)没有真正的不对称选择。看起来大多数其他密码(Elgamal,椭圆曲线)更适合对称加密,而在不对称地进行会话密钥的情况下。这不适合我。这样的密码适用于网络通信/会话键,但是将其用于磁盘上的静态不变数据并不好。

至于“ RSA慢”,我更改了存档格式,因此现在只有一小部分数据被不对称地加密。如果没有解密这一部分将使阅读存档索引完全困难,即使不是不可能。另外,我必须承认,RSA的缓慢是部分错误的印象 较旧的代码 我以前尝试使用过。

这意味着问题解决了。解决方案是RSA + libtomcrypt。 RSA - 因为RSA和LibtomCrypt的替代方案没有很多 - 因为它很小并且在公共领域。

其他提示

OpenSSL应该为您完成这项工作。它是开源(Apache许可证,因此满足您的许可要求)。

它被广泛使用且测试良好。

使用自定义RSA签名档案。将公共密钥存储在应用程序中,并将私钥放在内部。现在,任何人都可以修改读取存档,但是您的应用程序将拒绝加载修改后的存档。

查看曲线25519,即有效地实施椭圆形曲线crytpography,以及围绕专利问题。

它满足您的所有要求。 看这里.

您可以使用它来加密或简单地签名。

作为旁注:

对于完整性检查,除非您确实需要调解加密,否则Mac应该足够。

MD5怎么样?

是的,我知道MD5已被打破了; - 但是大多数实际应用这是无关紧要的。
特别是如果修改后的数据也必须以特定的数据格式有效,并且具有正确的MD5

编辑:
如果您只想确保无法更改存储的数据(或者至少可以检测到它),则MD5是合适的,但不会隐藏数据。请注意,如果您必须在应用程序中将密钥与数据一起使用,则可以始终提取。有一些隐藏钥匙的技术 - 流行的技术仅仅是将其放入静态资源中,例如可以轻松链接的图标。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top