在密码学中经常看到a^b mod n运算,当b很大的时候,就不能够按照简单的数学运算进行了。

“Square and Multiply”就是一种窍门。

把指数转换成2进制,从左到右开始计算

  • 当指数二进制为1时 z^2*a mod n
  • 当指数二进制为0时 z^2 mod n

其中z为上一个指数二进制计算结果(从左到右),初始为1

举例a^b mod 21 = 3^11 mod 21 = 3^1011 mod 21

  • z = 1
  • z = z^2*a = 1^2 * 3 mod 21 = 3
  • z = z^2 mod n = 3^2 mod 21 = 9
  • z = z^2 mod n = 9^2 * 3 mod 21 = 12
  • z= z^2 *a mod n = 12^2 * 3 mod 21 = 12

所以最终结果:3^11 mod 21 = 12

当然这种方式也存在一些安全问题 – Power consumption of an RSA decryption

Reference

  • https://scientia-potentia-est.com/zh/square-multiply-algorithm/

Square and Multiply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.