Galois域算术的实现

9

您是否知道一款使用C++实现的伽罗瓦域算术运算的工具?至少应该包括GF(216)和GF(232)这样的情况。性能是一个关注点,因此实现应该考虑优化其操作。

我更喜欢一个通用计算库或一个专门用于此任务的小型库。如果没有这些,我也欢迎一些可读的源代码。


也许您可以使用crypto ++中实现GCM模式的代码。 - jxh
1
@user315052,请将该评论作为答案:gcm.cpp 包含一些GF2操作,并且它使用SSE2表明性能得到了考虑。注释很少。我希望将其与其他答案一起包含,以便我可以使用投票来比较此建议与其他建议。 - MvG
4个回答

8
我在维基百科的有限域算术条目中发现了Arash Partow编写的Galois Field Arithmetic Library链接。
乍一看,代码几乎没有注释,但结构化编写,因此可能是可以理解的。性能似乎不是重要的设计标准:使用内联函数的程度相当有限,总体上看,直接表示理论数学比利用计算快捷方式更重要。我在此列出它以便完整,这样你就可以查看、形成自己的意见,并相应地进行投票或评论。

2
也许你可以使用实现了GCM模式的代码,这个代码在crypto++中(特别是gcm.cpp)。Crypto++是一个免费的C++库,实现了许多加密方案。其中之一是使用伽罗瓦域算术的GCM。
根据许可证,该库本身受版权保护,而单个源文件则属于公共领域。

我刚刚了解到,无进位乘法的机器指令(称为PCLMULQDQ和相关指令)可以用于比其他方法更有效地执行伽罗瓦域乘法。我还看到,crypto++是支持该指令的库之一。 - MvG

0
寻找代数数时,我偶然发现了这个答案,它建议使用Givaro。看了一下,我发现它也可以进行GF(pk)算术运算。虽然文档比较简略,但是源代码努力都很充足。虽然我还没有深入研究细节,但我想在这里把它列入我的清单中。

0

GF2E 模块应该实现任意 e 的 GF(2^e)。然而,它似乎适用于任意次数的多项式,因此很可能是基于 GMP 而不是简单的机器整数,对于具有 16 或 32 个系数的多项式。如果是这样(仍需验证),那么这似乎是一种资源浪费,包括内存和 CPU。 - MvG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接