我正在GPU上开发加密算法。该算法需要非常大的整数的加法和乘法。这些数字的位长估计为150,000位或更多。这些数字具有不同的位长。可以使用哪些算法来执行这些数字的加法和乘法运算?请把你的信息告诉我。谢谢。
答案 0 :(得分:2)
大整数添加相对简单:JackOLantern已经提供了帖子的链接。基本上它只是通过并行前缀和进行传输传播。
对于CUDA上的大整数乘法,我想到了两种方法:
将整数转换为RNS(残差数系统):然后乘法和加法可以并行完成(只要RNS基数足够大)。每当您需要比较数字时,您可以将它们转换为混合基数系统(例如,参见How to Convert from a Residual Number System to a Mixed Radix System?)。最后,您可以使用CRT(Chinese Remaindering)将数字转换回位置编号系统
直接使用FFT实现大整数乘法,因为乘法可以看作是序列的非循环卷积(150Kbits长度对FFT来说不是那么多,但已经可以给你一些加速)。仍然GNU MP从1Mbit甚至更多开始切换到FFT乘法例程。再次通过FFT进行乘法有两种选择:
使用浮点双精度FFT并将大整数位编码为尾数(更容易实现)
使用所谓的数字理论变换(有限域上的FFT)
无论如何,这些事情背后有一堆理论。您也可以在FFT mul in CUDA上查看我的论文。但是也有很多关于这个主题的研究论文,特别是在密码学领域。