| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第五周) -> 正文阅读 |
|
[网络协议]山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第五周) |
2021SC@SDUSC 很抱歉由于自身身体原因,本来打算这周对AES算法进行CPU和GPU的实际检测比较分析进行推迟。我决定对于SHA、AES、RSA三个算法在CPU和GPU性能对比放在最后几周。 本周介绍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年的一个重要发现——欧拉定理。 ?
举个简单的例子,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加密算法原理 ? ? ? ? ? ? ? |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:20:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |