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技术加速密码运算(第五周)相关推荐

  1. 山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第七周)

    2021SC@SDUSC 本周对于国密SM2算法原理进行简要的介绍,方便后续对其在CUDA上进行设计. 一.SM2加解密过程 SM2 国密非对称加密算法,属于椭圆曲线密码体制(ECC) Author: ...

  2. 山东大学软件工程应用与实践——GMSSL开源库(四)——SM9数字签名算法及验证的源代码分析

    2021SC@SDUSC 目录 一.引言 二.密钥的生成数字签名与签名验证相关代码 1.判定函数 2.签名的初始化函数 3.签名执行函数 4.真正的签名函数 5.签名验证初始化函数 6.签名验证执行函 ...

  3. 山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略

    2021SC@SDUSC GMSSL简介 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全 ...

  4. 山东大学软件工程应用与实践——WeaselTSF(一)

    2021SC@SDUSC 文章目录 简单介绍 WeaselTSF.h 从本篇博客开始分析WeaselTFS这个包中的代码. 简单介绍 WeaselTSF.vcproj This is the main ...

  5. <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)

    2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...

  6. <2021SC@SDUSC>博客(9)山东大学软件工程应用与实践Jpress代码分析(8)

    2021SC@SDUSC Lucene和ElasticSearch 在上一篇博客中提到的Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器.这里 ...

  7. 山东大学软件工程应用与实践——GMSSL开源库(二)——浅尝SM9

    2021SC@SDUSC 概述 为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家.RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Crypt ...

  8. 山东大学软件工程应用与实践——GMSSL开源库(九)——SM9密钥封装与公钥加密的源代码分析

    2021SC@SDUSC 文章目录 int SM9_wrap_key(密钥的封装) int SM9_unwrap_key(密钥的解封) int SM9_encrypt(公钥加密算法) int SM9_ ...

  9. 山东大学软件工程应用与实践——Pig代码综述

    2021SC@SDUSC 目录 一.Pig是什么? 二.Pig的特点 三.Pig安装部署 四.组内分工 一.Pig是什么? Pig 是Apache平台下的一个免费开源项目,是MapReduce的一个抽 ...

最新文章

  1. 科大星云诗社动态20201130
  2. PyTorch基础(三)-----神经网络包nn和优化器optim
  3. javaScript第七天(1)
  4. java 命名内部类_如何把java SWT程序中的匿名内部类改写成命名内部类?
  5. 获取某一列_Excel VBA 8.2 获取多列唯一值,不用肉眼,VBA帮你快速搞定
  6. 运营商服务器系统,浪潮服务器助力运营商三大支撑系统上云
  7. 计算机网络是一个 系统,计算机网络是一个什么系统
  8. centos可视化打开和修改文件(隐藏文件)
  9. c#多通道波形显示_因为每秒要采集50多个波形,需要大量的数据分析和波形分析,有什么好的解决办法吗?...
  10. 惊喜:vs2005 和 msdn 中文版 已经提供Subscriber 下载,MSDN全球订户可以下中文版爽了...
  11. 【2019秋招】OPPO无线通信协议工程师笔试
  12. IQtree:使用 SNP 数据(vcf file)构建玉米群体的 无根 系统发育树
  13. 一张图了解大数据概念,大数据应用场景总结
  14. 搞定互联网安全的四大计划
  15. 多模态算法在视频理解中的应用
  16. 人人车严选店成都首店开业 占地面积1.2万平米
  17. 浅谈数字后端工程师的工作
  18. ctf赛题上传一个php木马,从一道CTF题学习PHP反序列化漏洞
  19. 【JavaSE】继承 你拿下继承了吗?一篇让你轻松拿下,简明扼要,超详解
  20. win11快速启动有必要关闭吗?如何关闭?

热门文章

  1. Nginx缓冲区配置
  2. Verilog转电路图
  3. 数据库完整性(实体完整性,参照完整性,用户定义完整性)
  4. 软件开发搞定计算机组成原理:计算篇
  5. 使用cocos2dx+lua改造《剑魂之刃》的经验总结
  6. 【论文笔记】End-to-end people detection in crowded scenes
  7. 4-八爪鱼boss直聘信息采集
  8. mysql的主从复制和半同步复制的配置
  9. Android实例之必应每日一图
  10. acc--›Android无障碍开发手势操作