数字签名---RSA算法
保证信息在传输过程中的安全性:
保密通信、密钥交换、数字签名。
| RSA算法 | Diffie-Hellman算法 | DSA算法 | |
| 保密通信 | √ | × | × |
| 密钥交换 | √ | √ | × |
| 数字签名 | √ | × | √ |
数字签名具有抗否认、抗假冒、抗篡改伪造的特性
M----明文
Keb----B的公钥
Kdb----B的私钥
当先用私钥加密时,将相当于B对明文进行了数字签名,B不可抵赖。
RSA算法:
速度:
1.由于都是大数计算,RSA最快的情况也比DES慢许多倍,无论是硬件还是软件实现。速度一直是RSA的缺陷。一般来说只用于少量的数据加密。
2.RSA是被研究是最广泛的公钥算法,提出到现在已经历了二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
执行过程:
1.生成两个大素数p和q
2.计算这两个素数的乘积n=p*q
3.计算小于n并且与n互质的整数的个数,即欧拉函数φ(n)=(p-1)*(q-1)
4.选择一个随机数e满足1<e<φ(n),并且e和φ(n)互质,即gcd(e,φ(n))==1
5.解方程 e*d ≡1 mod φ(n),求出d
6.保密d,p和q(销毁),公开n和e
公钥公开:PU={e,n}
私钥保密:PR={d,n}
RSA使用:
加密一个报文M,发送方:
1.获取接收方的公钥 PU={e,n}
2.计算:C = Me mod n, where 0<=M<n
解密密文C,接收方:
1.用自己的私钥PR={d,n}
2.计算:M=Cd mod n
RSA注意:
1.RSA加密时,明文以分组的形式加密,每一个分组的比特数应该小于log2n比特,即M<n
2.选取的素数p和q要足够大,从而乘积n足够大,在事先不知道p和q的情况下,分解n是计算上不可行的。
如何得到足够大的随机素数?
实际应用所采用的方法是:首先,产生一个足够大的随机数,然后,通过采用一个概率多项式时间算法来检测该随机数是否为素数(即是否具有素性)
常用的两个素性测试算法:Solovay-Strassen和Miller-Rabin
RSA例子----密钥
1.挑选质数:p=17 & q=11
2.计算 n=p*q=17*11=187
3.计算 φ(n)=(p-1)*(q-1)=16*10=160
4.选择 e:gcd(e,160)=1; 选择 e=7
5.求解 d:e*d≡1 mod 160 且 d<160 , d=23,显然 23*7=161=160+1
Public key Pu={7.187}
Private key PR={23,187}
RSA 加密/解密: M=88(注意88<187)
加密: C = 887 mod 187 = 11
解密: M = 1123 mod 187 = 88
求解方程 e*d≡ 1 mod φ(n)
当e=1001 , φ(n)=3837时:
3837 = 3 * 1001 + 834
1001 = 1 * 834 +167
834 = 4 * 167 + 166
167 = 166 + 1
2.回代:
1 = 167 - 166
= 167 - (834 - 4*167 )
= 5 * 167 -834
= 5 * (1001 - 834)-834
= 5 * 1001 - 6 * 834
= 5 * 1001 - 6 *(3837 - 3 * 1001)
= 23 * 1001 - 6 * 3837
数字签名---RSA算法的更多相关文章
- Java数字签名——RSA算法
数字签名:带有密钥(公钥,私钥)的消息摘要算法. 验证数据的完整性,认证数据的来源,抗否性 OSI参考模型 私钥签名,公钥验证 签名算法:RSA,DSA,ECDSA 算法1 :RSA MD,SHA两类 ...
- 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
- 跨越千年的RSA算法
转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...
- C# RSA 算法
RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力的公钥加密算法, ...
- SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)
SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二) http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html ht ...
- 基于私钥加密公钥解密的RSA算法C#实现
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
- RSA算法详解及C语言实现
RSA算法它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman.但 ...
- RSA算法python实现
RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名.详情请看维基:http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF ...
随机推荐
- jsonp跨域的原理及实现
1,什么是跨域? 跨域跨域,跨过域名,笼统来说就是一个域名区请求另外一个域名的数据,但实际上,不同端口.不同域名.不同协议上请求数据都会出现跨域问题.浏览器出于安全考虑会报出异常,拒绝访问. 2,js ...
- 电脑网络诊断显示Win10无法与设备或资源(DNS)通信解决办法
最近是做多错多还是人有点儿衰神附体,软件,电脑系统,各种问题层出不穷,今天早上打开电脑发现不少软件都无法联网,神马百度商桥,腾讯浏览器,百度云...昨天百度商桥打不开还以为是软件出了问题,因为火狐浏览 ...
- python—nnlog日志
#when='S'每秒产生一个[D天默认 H M S]# backCount='5'## level是设置打印级别默认是debug级别(下面是四个级别可以指定打印) import nnlog lo ...
- 一款基于SVM算法的分布式法律助手
一. 项目简介 与 使用说明 体验网站(适配手机端): http://www.zhuchangwu.com 项目基于 Spring Cloud .Vue 构建,平台针对需要维权的用户而设计,主要提供如 ...
- Unity 游戏框架搭建 2019 (二十一、二十二) 第三章简介&整理前的准备
整理前的准备 到目前为止,我们积攒了很多示例了,并且每个示例也都贯彻了最的约定和规则. 在上一篇的小结也说了一个比较新的东西:编程体验优化. 在之前我们还积攒了一个问题:代码重复问题. 我们可是忍住整 ...
- 2288: 【基础】小X转进制
2288: [基础]小X转进制 时间限制: 1 Sec 内存限制: 256 MB 提交: 1316 解决: 576 [提交] [状态] [讨论版] [命题人:ghost79] 题目描述 小X喜欢研究进 ...
- php--phpstudy更新数据库版本后,无法一键启动
只需输入以下命令即可: sc delete mysql
- beanshell自定义聚合报告时分线程组阶段展示
假设现在一共会加载100个线程,期望聚合报告中分别展示1-20,20-40,40-60,60-80的四个阶段的线程并发性能数据,而不是总体的统计数据 beanshell脚本,具体内容: import ...
- Pytest系列(21)- allure的特性,@allure.description()、@allure.title()的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面介绍了两种allure的 ...
- AJ学IOS(12)UI之UITableView学习(上)LOL英雄联盟练习
AJ分享,必须精品 先看效果图 源代码 NYViewController的代码 #import "NYViewController.h" #import "NYHero. ...