蒙哥马利乘法 - 32位寄存器与64位寄存器

时间:2017-11-20 15:35:50

标签: math cryptography discrete-mathematics code-complexity montgomery-multiplication

我需要计算执行Montgomery Multiplication 页面602-603 与大小为32和64的字大小/寄存器之间的速度差异。

到目前为止,这是我所理解的:

  • x和y由长度为n的多字数组表示 其中n = m / w,w是寄存器大小(32或 64)。
  • 蒙哥马利的单位数乘法总数 乘法是n *(2 + 2 * n),其中n表示字阵列的数字长度。
  • 我将假设每台计算机上两个一位数的乘法需要1个时钟周期。

如何将所有这些组合在一起以表示在具有32位寄存器或64位寄存器的计算机上蒙哥马利乘法所需的时钟周期数?

1 个答案:

答案 0 :(得分:0)

如果所有中间单精度乘法操作数和结果都可在寄存器中使用,那么多精度蒙哥马利乘法的循环数确实为n(2+2*n)。对于加密操作,这几乎是不可能的,因为m通常为1024或更大。假设32位寄存器(x y R ^ -1 mod m)仅需要192个寄存器来存储操作数(3 *(1024/32))。实际上,您需要考虑内存访问才能回答此问题。

使用内存访问来重写算法(假设乘法可以与加载/存储并行进行):

  1. 对于i从0到n:a_i <- 0
  2. 对于i从0到(n − 1),请执行以下操作:
    1. 获取a_0
    2. 获取y_0
    3. 获取x_i
    4. 计算u_i <- (a_0 + x_i*y_0)m' mod b。将u_i存储在寄存器中
    5. c = 0(计算A <- (A + x_i*y + u_i*m)/b
    6. j从0到(n-1):
      1. 获取a_j
      2. 获取y_j
      3. 计算(cv) = a_j + x_i*y_j + c,提取m_j
      4. 如果{> 1存储(cv) = (cv) + u_i*m_j
      5. ,则计算a_{j-1} <- v
    7. 存储a_n <- ca_{n-1} <- v
  3. 如果为A >= m,则为A <- A − m
  4. 返回(A)。

希望这会有所帮助。