第二十一个知识点: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

第二十一个知识点:CRT算法如何提高RSA的性能?的更多相关文章

  1. 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法

    第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...

  2. 秀尔算法:破解RSA加密的“不灭神话”

    RSA加密 VS 秀尔算法 作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分 ...

  3. LK光流算法:提高计算精度和增加搜索范围

    LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...

  4. 秀尔算法:破解RSA加密的“不灭神话” --zz

    http://netsecurity.51cto.com/art/201508/488766.htm RSA加密曾被视为最可靠的加密算法,直到秀尔算法出现,打破了RSA的不灭神话. RSA加密 VS ...

  5. 论RSA算法的重要性 -RSA 简介

    地球上最重要的算法 (这个说法似乎有点夸张了,但是当你了解了RSA算法后,就觉得不夸张了.) 如果没有 RSA 算法,现在的网络世界毫无安全可言,也不可能有现在的网上交易.上一篇文章 ssh 协议为什 ...

  6. 用 Function.apply() 的参数数组化来提高 JavaScript程序性能

    我们再来聊聊Function.apply() 在提升程序性能方面的技巧. 我们先从 Math.max() 函数说起, Math.max后面可以接任意个参数,最后返回所有参数中的最大值. 比如 aler ...

  7. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  8. 提高服务端性能的几个socket选项

    提高服务端性能的几个socket选项 在之前的一篇文章中,作者在配置了SO_REUSEPORT选项之后,使得应用的性能提高了数十倍.现在介绍socket选项中如下几个可以提升服务端性能的选项: SO_ ...

  9. 【机器学习与R语言】13- 如何提高模型的性能?

    目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...

随机推荐

  1. tensorboard No dashboards are active for the current data set.

    修改一下启动命令时的路径 位置示例: 命令为   E:\PYTHON_PROJECT\testTF\inceptionV1_net\log>tensorboard --logdir=TEC4FN ...

  2. 30个类手写Spring核心原理之环境准备(1)

    本文节选自<Spring 5核心原理> 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.Lombok是开 ...

  3. 内存管理——placement new

    C++给我们三个申请内存的方式,new(new operator),array new 和placement new. placement new意思是 让对象构建在已经分配好的内存上. (这里我再把 ...

  4. PhoneGap打包webApp

    因为我只弄了Andriod的环境,所以在此只以Andriod为例. 使用PhoneGap搭建Android开发的项目整体步骤如下: 安装java环境. 安装ant构建工具. 安装android的开发环 ...

  5. spring boot集成mybatis框架

    概述 中文官网:http://www.mybatis.cn 参考教程:https://www.w3cschool.cn/mybatis MyBatis Plus:http://mp.baomidou. ...

  6. Spring(2):依赖注入DI

    依赖注入DI 当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例.但在Spring里,创建被 ...

  7. maven项目install时忽略执行test

    1.在项目所在文件夹根目录使用maven命令打包时: <!-- 不执行单元测试,也不编译测试类 --> mvn install -Dmaven.test.skip=true 或 <! ...

  8. jQuery中的html()、text()和val()的用法

    1.html() 获得的是第一个符合要求的标签中的所有内容,例如: var content = $("li").html(); <li>111<p>999& ...

  9. JSP页面的基本结构

    一:一个JSP页面由以下基本元素组成. (1)HTML标签 (2)CSS (3)变量和方法 (4)Java代码段 (5)JSP动作和指令 (6)其他脚本元素(如Javascript) 二:JSP的基本 ...

  10. 【Java】【学习】【监听器】Listener的学习的案例(窗体程序)

    JavaWeb 监听器listener 学习与简单应用 Java窗体程序使用监听器 效果:点击按钮,控制台出现文字 代码如下 import javax.swing.*; import java.awt ...