zoukankan      html  css  js  c++  java
  • 第二十一个知识点:CRT算法如何提高RSA的性能?

    第二十一个知识点:CRT算法如何提高RSA的性能?

    中国剩余定理(The Chinese Remainder Theorem,CRT)表明,如果我们有两个等式(x = a mod N)(x = b mod M),那么(x)存在一个唯一一个(mod MN)的解,当且仅当(gcd(M,N)=1).

    在RSA中,我们可能会执行一个模幂在一个几千个位的数字上[1].一般来说,公钥加密要比对称加密要慢.这种特性可能导致web服务器网络变慢,而在实现过程中提高效率(软件算法)对于避免性能问题起着至关重要的作用.

    我们表示RSA方案中主要的加密操作就是模幂算法(M= C^d mod N).模幂能够用h-1次乘法和t-1次平方运算.(t是指数的长度,h是汉明系数).平均来说需要的次数一共是(t + t/2 -1).

    更多的性能提升需要二进制指数算法或者窗口方法.对于后者我们依次处理(w)位.对于这个方案我们仍然需要t次平方运算,但是乘法次数减少到(t/w).更多的性能提升能通过滑动窗口法得到进一步改进.

    为了让RSA指数算法更快,我们能够执行一些额外的小技巧,当我们加密或者解密RSA的时候.CRT被用于这种情况.因此我们首先考虑一个私钥操作,这意味着我们能够获得私钥,因此获得了(N)的分解数(N = pq).如果我们假设我们解密一个消息,那么我们的目标就是计算(M = C^d mod N).

    首先我们要计算(M mod p)(M mod q):

    [M_p = C^d mod p = C^{d mod {p-1}} mod q ]

    [M_q = C^d mod q = C^{d mod p-1} mod q ]

    这个计算需要两个512模,512幂的运算,因为p, q都是512bit的.这会比1024,1024的快的多.

    使用找CRT我们能恢复(M),通过使用(M_p,M_q).

    计算(T = p^{-1} mod q),然后保存下来.

    M能够通过(M_p)(M_q)用下面的办法恢复.

    (U = (M_q-M_p)*T mod q)

    (M = M_p + u*p)

    [1] http://www.cs.bris.ac.uk/~nigel/Crypto_Book/book.ps (Chapter 15)

    good for write down

    下面是说的比较好的CRT方法:

    https://www.di-mgt.com.au/crt_rsa.html

  • 相关阅读:
    zookeeper 初步学习
    nginx+redis+4个tomcat 负载均衡
    nginx的配置文件解析
    nginx-----惹不起的端口修改
    Api2Doc生成 Restful API 文档
    swagger2 注解整体说明
    SpringMVC 中xml 配置多数据源
    lombok 注解使用
    springboot 中 集成druid ,redis
    spring学习---day01
  • 原文地址:https://www.cnblogs.com/zhuowangy2k/p/12245513.html
Copyright © 2011-2022 走看看