1. 引言

Yuval Domb 2022年论文《Fast Modular Multiplication》

模乘可以说是任何密码系统中计算量最大的算术原语。本文提出了一种高效、硬件友好的算法,据作者所知,该算法优于迄今为止的算法。

标准的modulo-prime multiplication problem in Fs\mathbb{F}_sFs​表示为:
r=a⋅bmods\begin{equation} r=a\cdot b \mod s \end{equation}r=a⋅bmods​​
其中 a,b,s∈Fsa,b,s\in\mathbb{F}_sa,b,s∈Fs​,sss为素数,并利用标准Z\mathbb{Z}Z-algebra。
等价为:
a⋅b=l⋅s+r\begin{equation} a\cdot b = l\cdot s +r \end{equation}a⋅b=l⋅s+r​​
其中,l∈Zl\in \mathbb{Z}l∈Z,使得 0≤r<s0\leq r < s0≤r<s。

本文主要为(1)中计算提供了一种高效、硬件友好的快速计算方法。

将所有变量以ddd-进制来表示,其中Fs\mathbb{F}_sFs​内的每个元素都以nnn个digits来表示,有:
n=⌈log⁡ds⌉\begin{equation} n=\left \lceil \log _ds\right \rceil \end{equation}n=⌈logd​s⌉​​

接下来,简单地令d=2d=2d=2,所有元素以二进制来表示。

尽管本文重点关注modulo-prime multiplication,但可将其推广到任意amodsa\mod samods运算,其中a<s2a<s^2a<s2,sss可为素数或非素数的任意值。

2. 本文主要贡献

本文主要展现了,如何将:

  • Barrett Reduction算法(具体见Barrett 1987年论文《Implementing the rivest shamir and adleman public key encryption algorithm on a standard digital signal processor》)
  • 与 好的参数选择
  • 以及 简单的bounding技术

结合,用于求取quotient lll的近似值,近视精度为一个小的constant error,该constant error与nnn无关(无论nnn值大小)。

令人惊讶的是,最终的reduction算法与Montgomery的Modular-Multiplication算法(见Montgomery 1985年论文《 Modular multiplication without trial division》)类似,但是本文最终的reduction算法不需要coordinate translation。

本文的bounding技术可用于进一步降低特定感兴趣场景的计算复杂度(知识需要增加constant error),本文不展开。

3. Reduction Scheme

3.1 假设 lll 为近似已知

假设 lll 为近似已知,将其近似值表示为 l^\hat{l}l^,使得:
l−λ≤l^≤l\begin{equation} l-\lambda \leq \hat{l} \leq l \end{equation}l−λ≤l^≤l​​
其中λ=O(1)\lambda=O(1)λ=O(1)为一个已知的constant。

若λ=0\lambda=0λ=0,则显然有:
ab[2n−1:0]−l^s[2n−1:0]=r[n−1:0]\begin{equation} ab[2n-1:0] - \hat{l}s[2n-1:0]=r[n-1:0] \end{equation}ab[2n−1:0]−l^s[2n−1:0]=r[n−1:0]​​
其中[]中括号内的值表示了bit locations和sizes。

注意,当λ=0\lambda=0λ=0时,可推测余数rrr最大长度为 nnn bits,使得等式(5)中右侧值的剩余最高有效位(ms (most-significant) bits)必须为000。

通过简单的bit操作,可以long addition表示为:

其中,上横杠表示的是bit-inversion运算符,横岗上的111表示为初始carry bit。
不过,对上面的long addition表示仔细观察可知,仅需要 ab[n−1:0]ab[n-1:0]ab[n−1:0] 和 l^s[n−1:0]\hat{l}s[n-1:0]l^s[n−1:0] 来完成该计算,从而可节约近一半的计算量。最终的adder为a fixed width adder——即,n+n→nn+n\rightarrow nn+n→n。这意味着可忽略 ms bits(最高有效位)的任何溢出。可将其等价为a fixed-width subtractor——即,n−n→nn-n\rightarrow nn−n→n,可将其结果看成是unsigned integer。

将生成以上乘积的multiplier表示为n×n→nlsbn\times n\rightarrow n_{\text{lsb}}n×n→nlsb​,其中nlsbn_{\text{lsb}}nlsb​是指该full product的nnn个least-significant bits。a⋅ba\cdot ba⋅b和l^⋅s\hat{l}\cdot sl^⋅s都可通过n×n→nlsbn\times n\rightarrow n_{\text{lsb}}n×n→nlsb​来生成。
此外,若sss为constant,l^⋅s\hat{l}\cdot sl^⋅s可通过一个constant n×n→nlsbn\times n\rightarrow n_{\text{lsb}}n×n→nlsb​ multiplier来生成。

当λ≠0\lambda\neq 0λ=0时:
ab−l^s=r+λs\begin{equation} ab-\hat{l}s = r+\lambda s\end{equation}ab−l^s=r+λs​​
此时,用于表示等式(5)中右侧值所需的number of bits为:
⌈log⁡2(r+λs)⌉≤n+⌈log⁡2r+λss⌉≤n+⌈log⁡2(1+λ)⌉\begin{equation} \left \lceil \log_2(r+\lambda s) \right \rceil \leq n+\left \lceil \log_2\frac{r+\lambda s}{s} \right \rceil \leq n+\left \lceil \log_2(1+\lambda) \right \rceil \end{equation}⌈log2​(r+λs)⌉≤n+⌈log2​sr+λs​⌉≤n+⌈log2​(1+λ)⌉​​
因此,若λ=1\lambda=1λ=1,则仅需要额外再增加111个bit来表示。

3.2 使用Barrett Reduction算法求lll的近似值

采用Barrett的modular reduction算法对lll求近似值为:
l=⌊abs⌋=lim⁡k→∞ab⋅m(k)2k+n\begin{equation} l=\left \lfloor \frac{ab}{s} \right \rfloor = \lim_{k\rightarrow \infty } \frac{ab\cdot m(k)}{2^{k+n}}\end{equation}l=⌊sab​⌋=k→∞lim​2k+nab⋅m(k)​​​
其中:
m(k)=⌊2k+ns⌋<2k+1\begin{equation} m(k)=\left \lfloor \frac{2^{k+n}}{s} \right \rfloor <2^{k+1} \end{equation}m(k)=⌊s2k+n​⌋<2k+1​​
为a function of the kkk,最多有k+1k+1k+1 bits,为公式(8)的lower-bound approximator。对于有限的kkk值,该approximation error为:
e(k)≡1s−m(k)2k+n<2−(k+n)\begin{equation} e(k)\equiv \frac{1}{s}-\frac{m(k)}{2^{k+n}} < 2^{-(k+n)}\end{equation}e(k)≡s1​−2k+nm(k)​<2−(k+n)​​
其中,可检查二进制表示的左右项的最大差异来派生出该upper-bound。从而有approximation error on l(k)l(k)l(k)为:
e(l,k)≡abs−ab⋅m(k)2k+n<22n⋅2−(k+n)=2n−k\begin{equation} e(l,k)\equiv \frac{ab}{s}-\frac{ab\cdot m(k)}{2^{k+n}} < 2^{2n}\cdot 2^{-(k+n)}=2^{n-k}\end{equation}e(l,k)≡sab​−2k+nab⋅m(k)​<22n⋅2−(k+n)=2n−k​​
若k≥nk\geq nk≥n,则该approximation error最多为111。

3.3 参数选择 以及 error bounding

选择k=nk=nk=n(即m(n)<2n+1m(n)<2^{n+1}m(n)<2n+1),则对lll的近似值为:
l^0=⌊abm22n⌋\begin{equation} \hat{l}_0=\left \lfloor \frac{abm}{2^{2n}}\right \rfloor \end{equation}l^0​=⌊22nabm​⌋​​
e(l^0)<1\begin{equation} e(\hat{l}_0)<1 \end{equation}e(l^0​)<1​​
其中multiplication为n×n×(n+1)→(n+1)msbn\times n\times (n+1)\rightarrow (n+1)_{\text{msb}}n×n×(n+1)→(n+1)msb​,且approximation error遵循(11)。

分两个阶段来实现以上multiplication:

  • 1)首先,假设有ab[2n−1:0]ab[2n-1:0]ab[2n−1:0],按如下方式计算multiplication:
    abm22n=ab[2n−1:n]⋅m2n+ab[n−1:0]⋅m22n\begin{equation} \frac{abm}{2^{2n}}=\frac{ab[2n-1:n]\cdot m}{2^{n}}+\frac{ab[n-1:0]\cdot m}{2^{2n}}\end{equation}22nabm​=2nab[2n−1:n]⋅m​+22nab[n−1:0]⋅m​​​
    <ab[2n−1:n]⋅m2n+2\begin{equation} < \frac{ab[2n-1:n]\cdot m}{2^{n}} + 2 \end{equation}<2nab[2n−1:n]⋅m​+2​​
    其中最右侧项trivially upper-bounded by 222。
  • 2)从而对lll的近似变为:
    l^1=⌊⌊ab2n⌋⋅m2n⌋\begin{equation} \hat{l}_1=\left \lfloor \left \lfloor \frac{ab}{2^n} \right\rfloor \cdot \frac{m}{2^n} \right \rfloor \end{equation}l^1​=⌊⌊2nab​⌋⋅2nm​⌋​​
    e(l^1)<3\begin{equation} e(\hat{l}_1)<3 \end{equation}e(l^1​)<3​​
    其中,最里侧的multiplication为n×n→nmsbn\times n \rightarrow n_{\text{msb}}n×n→nmsb​,最外侧的constant multiplication为n×(n+1)→(n+1)msbn\times (n+1)\rightarrow (n+1)_{\text{msb}}n×(n+1)→(n+1)msb​,approximation error由(13)和(15)中的最右侧项 之和 upper-bounded。

注意,由于m(n)m(n)m(n) is typically very close to 2n2^n2n,且nnn通常很大,无需额外增加bits来表示(17)中的constant error,即n+1n+1n+1 bits就足够了。
尽管如此,必须为每个特定setup检查并排除溢出的边界情况。

3.4 总体算法

以下为hardware-optimized modular multiplier结构图,假定了sss和mmm为已知的constants,使用l^1\hat{l}_1l^1​来表示lll的近似值。

注意,最左侧的multiplication module独立于reduction logic,使得该circuit的remainder可generalized beyond multiplication reduction。

3.5 举例

3.5.1 以n=16n=16n=16举例


3.5.2 以n=32n=32n=32举例

3.5.3 例外情况

当s=65717,a=65535,b=65631s=65717, a=65535, b=65631s=65717,a=65535,b=65631时,真实lll值应为⌊abs⌋=65449\left \lfloor \frac{ab}{s} \right \rfloor=65449⌊sab​⌋=65449。而根据本文算法获得近似值 l^1=65546\hat{l}_1=65546l^1​=65546,此时,error e(l^1)e(\hat{l}_1)e(l^1​)的值为333。
不过,对于prime sss,这样的例外情况并不多,对于大多数的primes,最大可能error将不会超过222。

基础算法优化——Fast Modular Multiplication相关推荐

  1. java基础算法优化解决兔子数量以及拓展

    package javaBlog;/* 古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每 ...

  2. Java的知识点18——数组存储表格数据、冒泡排序的基础算法、冒泡排序的优化算法、二分法查找

    数组存储表格数据 package cn.dym08; import java.util.Arrays; public class Test09 {public static void main(Str ...

  3. 【基础智能优化算法】68种算法大合集+matlab源码+参考资料+永久更新

    目前已更新68种基础算法+matlab源码+参考资料 !!!!!! 2-蝴蝶优化算法 3--海洋捕食者算法 4-鲸鱼优化算法 5-乌燕鸥优化算法 6-灰狼优化算法 7-黑猩猩优化算法 8-原子搜索算法 ...

  4. deeplearning算法优化原理

    deeplearning算法优化原理 目录 • 量化原理介绍 • 剪裁原理介绍 • 蒸馏原理介绍 • 轻量级模型结构搜索原理介绍 Quantization Aware Training量化介绍 1.1 ...

  5. 【基础算法】算法,从排序学起(一)

    本文目录 1.导言 2.谈谈排序 2.1 何为排序?(What is sorting?) 2.2 排序的应用(Why sorting?) 2.3 常见排序算法的种类(How to sort?) 3.基 ...

  6. JavaScript常用基础算法

    为什么80%的码农都做不了架构师?>>>    基础算法 一.排序 冒泡排序 //冒泡排序 function bubbleSort(arr) {for(var i = 1, len ...

  7. PHP算法之四大基础算法

    前言 虽然工作中,你觉得自己并没有涉及到算法这方面的东西,但是算法是程序的核心,一个程序的好与差,关键是这个程序算法的优劣,所以对于冒泡排序.插入排序.选择排序.快速排序这四种基本算法,我想还是要掌握 ...

  8. CUDA系列学习(五)GPU基础算法: Reduce, Scan, Histogram

    喵~不知不觉到了CUDA系列学习第五讲,前几讲中我们主要介绍了基础GPU中的软硬件结构,内存管理,task类型等:这一讲中我们将介绍3个基础的GPU算法:reduce,scan,histogram,它 ...

  9. matlab中服从高斯分布的矩阵_推荐基础算法之矩阵分解PMF

    推荐基础算法之矩阵分解PMF 大多数存在的协同过滤算法不能处理以下两种情况: 1. 不能处理大规模数据 2.不能处理评分非常少的用户数据 概率矩阵分解模型可以解决大规模.稀疏且不平衡的数据.这篇文章主 ...

最新文章

  1. Android IOS WebRTC 音视频开发总结(十一)-- stunturn部署
  2. Spark RDD使用详解4--Key-Value型Transformation算子
  3. .net core json 为null输出_SpringBoot实战(九):标准化json返回值
  4. Python学习笔记:排列与组合
  5. pads 文本不能修改_修改PDF文件很难?其实很简单,只是你少了一个好用的PDF编辑器...
  6. Silverlight 4 的打印支持
  7. 岭回归Lasso回归
  8. python3源代码分析_分析一点python源代码
  9. matlab中一个显示根号的技巧
  10. 从零开始的单片机学习(二)
  11. Longhorn,企业级云原生容器分布式存储 - 高可用
  12. 搭建自己的私有云盘系统(owncloud)
  13. PHP面向对象编程的基本概念定义操作属性方法
  14. 中国石油大学《化工原理二》第三阶段在线作业
  15. Sharding Sphere实现数据“一键脱敏”
  16. python 微信二次开发_python微信公众账号二次开发
  17. 计算机科学的发展及其介绍,计算机科学与技术专业发展历史介绍
  18. 关于Windows蓝屏6B修复方法的完整全过程
  19. 选择笔记本是考虑方便
  20. 可能认识的好友!查询!

热门文章

  1. 如何修改电脑用户文件名
  2. 微信公众号认证全过程
  3. 2020年计算机二级报名时间上半年,2020年上半年计算机二级报名时间是什么时候...
  4. 华为交换机/华三交换机 查看光口模块信息
  5. 同时使用 IE7 和 IE6 的方法
  6. 让你一步步成为运维专家之各种运维脚本
  7. 推荐一个视频播放器potplayer
  8. 从zotero文献集中批量导出PDF的方法
  9. 三菱PLC与第三方设备TCP通讯_三菱、西门子TCP/RS485通讯等问题解答
  10. 趣点赞打不开显示服务器错误,资讯 – CSGO辅助