山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第五周)
2021SC@SDUSC
很抱歉由于自身身体原因,本来打算这周对AES算法进行CPU和GPU的实际检测比较分析进行推迟。我决定对于SHA、AES、RSA三个算法在CPU和GPU性能对比放在最后几周。
本周介绍RSA算法的基本原理。
一、RSA加密算法简介:
RSA加密算法是一种非对称加密算法。所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用公钥进行加密、私钥进行解密。
在RAS算法中,公钥是公开信息,而私钥是需要保密的。加密算法和解密算法也都是公开的。虽然私钥是由公钥决定的,由于无法计算出大数n的欧拉函数phi(N),所以不能根据公钥计算出私钥。
也就是说,对极大整数做因数分解的难度决定了RSA算法的可靠性。理论上,只要其钥匙的长度n足够长,用RSA加密的信息实际上是不能被解破的。
RSA算法通常是先生成一对RSA密钥,其中之一是私钥,由用户保存;另一个为公钥,可对外公开。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
二、RSA算法的由来
一直到上个世纪70年代,人们都还在使用对称加密算法。换言之,信息的收发双方都会通过事先商定好的密钥对数据进行加解密。然而这种加密方式有诸多缺陷,随着网络规模的不断增大,每多一个用户就需要保存许多额外的密钥,密钥的管理也逐渐成为每个人的负担。更致命的是,密钥必须通过必须见面协商,无法通过网络进行交换,因为密钥的传输过程同样需要加密。
那么有没有一种可能,加解密的密钥是不同的密钥。而加密的公钥所有人可用来加密,但私钥只有接收者掌握解密。
在公钥加密算法中,由于公钥是对所有人公开的信息。我们需要保证数据被公钥加密后不能轻易被反推出来。因此需要一种单向算法,而不是像简单的1+1=2,2-1=1这样存在双向可逆推的加减法。答案是模运算。像计算机中的随机数、散列算法都是模运算的典型运用。
思考一下3^3 mod 7 = ? 很明显答案是6。但 3^x mod 7 = 6 这样逆推出x就非常困难,只能一个一个数带进去试,穷举法才找到x=3。若模的数很大很大,如3^x mod 2343569469375275 = 6,那么x再用穷举法尝试显然是不现实的。因此模运算被称为单向函数。
公钥加密正是利用了这一特性。
假设原始数据表示成一个数m(message 信息),对m求e(encrypt 公钥)次幂,得到密文c(cipher)。这样就完成了加密过程。
解密过程与之相似,对密文c求d(decrypt 私钥)次幂,得到原始数据m。
为了理解方便,将上面两个式子做一些变换合并,成为下面的式子:
我们发现,ed成为公钥加密中的关键。这里不得不提欧拉在1763年的一个重要发现——欧拉定理。
对于任何一个与n互质的正整数m,取它的phi(n)次方,并除以n取余数,结果永远等于1。其中phi是欧拉函数,其代表在小于或等于n的正整数中有多少个与n互质的数。
举个简单的例子,phi(6),我们发现小于等于6的正整数有1,2,3,4,5,6 其中只有1和5与6互质(除了1以外并不存在其他公约数),所以phi(6)=2。
现在我们对等式两端同时取k次幂,在同时乘以m,最后将模运算写在等式左边得到下面的式子:
将上面的式子同之前加解密公式对应起来:
这个公式看起来简单,但其中phi(n)的计算没有想象中的容易,同时这也是公钥加密中最关键的部分,计算phi(n)的唯一办法就是对n做质因数分解,例如8=2*2*2,11445=3*5*7*109。然而大数的质因数分解很困难。截至目前为止,用最前沿的分布式算法大约花了2700个“CPU年”才成功分解了一个829位的数字。因此phi(n)的求解可以看作计算上不可行的。
但若n本身就是一个质数,情况就会发生反转。例如phi(7),小于等于7的正整数有1,2,3,4,5,6,7 其中与7互质的数有1-6,所以phi(7)=6。同理可得phi(13)=12,这也就推广到phi(p)=p-1,其中p为质数。另外phi函数还有一个重要的特性:
其中p与q为两个互质的正整数。
有上述特性,我们来看下面的一个例子:
为了方便,我们选取一个较小的数e=3,同时保证e与phi(n)互质。(因为如果不互质,那么d必不可能是整数)于是在k=5的情况下,求得私钥d等于587。在求出私钥后,我们不再需要这里的p和q,算法会将e和n公布作为加密时用的公钥,而d将保存下来作为私钥。其他人由于不知道p和q这两个关键的质因数,无法计算这里的phi(n),因而无从破译私钥d,利用信息不对等,让加密者能够快速构造一个phi(n),而其他人无法用有限的时间求解出它。
简而言之,就算告诉你n=325436455474768,但你无法用有限的时间解得phi(25436455474768)=?,而真正通信的加密者知道325436455474768的质因数分解,因此能够很快算出其欧拉函数的结果,根据公式做成私钥d。
下面是模拟一段信息加解密过程,假设加密字符a(对应ASCII码为97):
第一步,用公钥e进行加密,得到密文79
第二步,用私钥d对密文79进行解密,成功还原字符a(97)
以上讲到的就是公钥加密算法的工作原理,在1977年被三个麻省理工的数学家独立发掘,成为当下众所周知的RSA加密算法。
RSA作为应用最广泛的公钥加密算法,其典型应用很多,例如:数字签名,数字证书、SSH和HTTPS的加密连接。公钥加密算法常被用作最初连接的建立,而真正数据传输的过程交由对称加密算法处理。
以上就是对于RSA算法基本原理的简单介绍。
参考视频:探秘公钥加密算法 RSA_哔哩哔哩_bilibili
参考博客:RSA加密算法原理_张维鹏的博客-CSDN博客_rsa加密算法原理
山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第五周)相关推荐
- 山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第七周)
2021SC@SDUSC 本周对于国密SM2算法原理进行简要的介绍,方便后续对其在CUDA上进行设计. 一.SM2加解密过程 SM2 国密非对称加密算法,属于椭圆曲线密码体制(ECC) Author: ...
- 山东大学软件工程应用与实践——GMSSL开源库(四)——SM9数字签名算法及验证的源代码分析
2021SC@SDUSC 目录 一.引言 二.密钥的生成数字签名与签名验证相关代码 1.判定函数 2.签名的初始化函数 3.签名执行函数 4.真正的签名函数 5.签名验证初始化函数 6.签名验证执行函 ...
- 山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略
2021SC@SDUSC GMSSL简介 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全 ...
- 山东大学软件工程应用与实践——WeaselTSF(一)
2021SC@SDUSC 文章目录 简单介绍 WeaselTSF.h 从本篇博客开始分析WeaselTFS这个包中的代码. 简单介绍 WeaselTSF.vcproj This is the main ...
- <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)
2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...
- <2021SC@SDUSC>博客(9)山东大学软件工程应用与实践Jpress代码分析(8)
2021SC@SDUSC Lucene和ElasticSearch 在上一篇博客中提到的Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器.这里 ...
- 山东大学软件工程应用与实践——GMSSL开源库(二)——浅尝SM9
2021SC@SDUSC 概述 为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家.RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Crypt ...
- 山东大学软件工程应用与实践——GMSSL开源库(九)——SM9密钥封装与公钥加密的源代码分析
2021SC@SDUSC 文章目录 int SM9_wrap_key(密钥的封装) int SM9_unwrap_key(密钥的解封) int SM9_encrypt(公钥加密算法) int SM9_ ...
- 山东大学软件工程应用与实践——Pig代码综述
2021SC@SDUSC 目录 一.Pig是什么? 二.Pig的特点 三.Pig安装部署 四.组内分工 一.Pig是什么? Pig 是Apache平台下的一个免费开源项目,是MapReduce的一个抽 ...
最新文章
- 科大星云诗社动态20201130
- PyTorch基础(三)-----神经网络包nn和优化器optim
- javaScript第七天(1)
- java 命名内部类_如何把java SWT程序中的匿名内部类改写成命名内部类?
- 获取某一列_Excel VBA 8.2 获取多列唯一值,不用肉眼,VBA帮你快速搞定
- 运营商服务器系统,浪潮服务器助力运营商三大支撑系统上云
- 计算机网络是一个 系统,计算机网络是一个什么系统
- centos可视化打开和修改文件(隐藏文件)
- c#多通道波形显示_因为每秒要采集50多个波形,需要大量的数据分析和波形分析,有什么好的解决办法吗?...
- 惊喜:vs2005 和 msdn 中文版 已经提供Subscriber 下载,MSDN全球订户可以下中文版爽了...
- 【2019秋招】OPPO无线通信协议工程师笔试
- IQtree:使用 SNP 数据(vcf file)构建玉米群体的 无根 系统发育树
- 一张图了解大数据概念,大数据应用场景总结
- 搞定互联网安全的四大计划
- 多模态算法在视频理解中的应用
- 人人车严选店成都首店开业 占地面积1.2万平米
- 浅谈数字后端工程师的工作
- ctf赛题上传一个php木马,从一道CTF题学习PHP反序列化漏洞
- 【JavaSE】继承 你拿下继承了吗?一篇让你轻松拿下,简明扼要,超详解
- win11快速启动有必要关闭吗?如何关闭?