通过公钥加密系统,可以对传输于两个通信单位之间的消息进行加密,即使窃听者窃听到加密之后的消息,也不能对其破译。

1、RSA公钥加密原理

1.1 几个核心概念

  • 公钥P与公钥函数P()
  • 密钥S与密钥函数S()
    可以简单理解,一个公钥对应一个公钥函数,知道了公钥也就知道了公钥函数。一个密钥也是对应一个密钥函数。我们要传输的信息M,经过公钥函数P()之后,就成了密文C,然后密文C经过密钥函数S()解密之后,就可以还原成密文M。
    由于公钥、公钥函数以及密钥、密钥函数是一一对应的,后续叙述中不再区分,即默认知道公钥,也就知道了公钥函数。

加密系统中,每个参与者,都有自己的公钥和密钥,公钥(公钥函数)是对外公开的,密钥是不对外公开的(这是加密的前提)

公钥函数和密钥函数互为反函数,即对于任意一条消息M,有:

M  = S(P(M))
M = P(S(M))

也就是说,无论哪种顺序,运用两把钥匙P和S对消息M进行变换之后,可以还原消息M。这是加密的基本原理。

1.2 RSA公钥加密系统中遵守的原则和假设

  • 系统每个参与者都有自己的公钥和密钥
  • 公钥对外公开,密钥只有自己知道
  • 其他人不能根据公钥P推断除密钥S

1.3 公钥加密信息传输过程

在公钥加密系统中,信息的接受方(假设为Alice),需要给信息的发送方(假设为Bob)提供公钥。右一般来说,在一个公钥加密系统中,每个参与者的公钥都是公开的(放在一个公开的目录)。记住一个关键点:
公钥加密消息传递中,接受方提供公钥,发送方使用接受方提供的公钥进行加密,然后发送。
假如Bob需要给Alice发送加密消息,那么Bob需要先获取Alice的公钥PA。然后使用公约PA对消息M进行加密,然后将加密的消息发送给Alice,然后Alice使用自己的密钥SA进行解密,然后就可以获得消息M了。由于密钥SA只有Alice自己知道,因此即使窃密者获取了密文C,由于不知道密钥SA,也无法对获取的密文C解密。

1.4 数字签名实现的原理与过程

在公钥系统的设想中,很容易实现数字签名。假如现在Alice希望把一个数字签署的答复M’发送给Bob。

  • Alice运用自己的密钥对签名进行加密
  • Alice将加密后的信息,即数字签名以及消息M‘一同发送给Bob
  • Bob收到数字签名之后,运用Alice的公钥进行解密,判断得到的消息是否来自Alice(假如消息M‘包含Alice的名字,那么Bob就知道该使用谁的公钥)
  • 如果等式成立,那么Bob就知道M’确实是来自Alice,否则就认为是伪造的签名。


这里判断的一个基本逻辑就是,只有数字签名是通过Alice的密钥加密得到的,那么对数字签名运用Alice的公钥PA解密之后,才能得到消息M’
那么想象一下,有没有可能一个伪造的签名,运用Alice的公钥解密之后也能得到消息M‘呢?
– – 这是不可能的,因为能够通过一种方法F伪造一个数字签名Q,并且签名Q经过Alice的公钥运算之后还能得到M’,那么有如下关系:

说明F就是PA的反函数,那么PA的反函数为SA,说明F就是SA,根据1.3中假设,是不能通过公钥P得到密钥S的,因此这就保证了不能产生伪造的签名。

1.5 数字签名和公钥加密的异同

同:

  • 使用同一套加密系统,都是信息发送者对信息进行加密,然后接受者对信息进行解密。

异:
从目的上来讲,公钥加密是为了保证发送信息的私密性,即信息只有接受者可以获取正确信息,其他人不能获取。而数字签名,主要目的是别人验证这个信息来源是否正确,签名的内容可以是公开的(没有私密性), 也可不公开。

从加密过程来讲,公钥加密使用的接受方的公钥和密钥,而数字签名使用的发送方的公钥和密钥
公钥加密是发送者运用信息接收方的公钥进行加密,然后接受者用自己的密钥解密。数字签名,是发送者用自己的密钥加密,接收者(需要验证信息的人)运用发送方的公钥进行加密。

1.6 公钥加密与数字签名结合使用

1.4中签属的信息是公开的、没有加密受到保护的。如果把公钥加密与数字签名结合起来使用,就可以创造出同时被签属和加密的信息:

  • 只有接收者才能接受到消息签署的消息
  • 接收者可以验证签属的信息来源是否正确

具体做法如下:

  • 签属者(发送方)运用自己的密钥(发送方密钥)对消息M’进行运算得到签名Q,
  • 发送方将消息M‘以及得到的签名Q一起作为整体消息M,使用接受方的公钥进行加密,得到密文C
  • 发送方将密文C发送给接受方
  • 接受方队密文C,运用自己的密钥(接收方密钥)进行解密,得到消息M(包含M’以及Q)
  • 接受方对解密后的消息Q使用发送方公钥进行运算,判断结果是否等于M’, 若等于则接受,否则拒绝

2 RSA加密系统的具体实现

通过上面的内容可以发现,要实现一个RSA加密系统,其实就是需要给参与者创建一对公钥和密钥
由于RAS加密系统在创建公钥和密钥的过程中,涉及到很多一些数论概念,推导过程也需要用到一些数论中的结论,有些麻烦和晦涩。这里仅给出创建过程和结论:

  • 公钥P = (e, n), 对外公开,作为参与者的RSA公钥
  • 密钥S = (d, n), 保密,作为参与者的RSA密钥
    一对公钥密钥涉及到三个参数e、d、n
    其中获得过程如下:
    1、选取两个很大素数p和q, pq很多可能上千位
    2、计算 n = pq
    3、选取一个与k = (p-1)
    (q-1) 互质的小jing奇数e
    4、对模k,计算e的乘法逆元d的值

知道公钥和密钥之后,对应的公钥方法和密钥方法也就确定了:

解密的原理(证明过程省略。。。):

上面的式子说明,无论说明顺序,一条消息经过公钥和密钥变换之后,可以将加密后的消息还原(解密)。

RSA加密原理与RSA公钥加密系统、数字签名相关推荐

  1. 密码学之RSA加密原理解析

      密码学是指研究信息加密,破解密码的技术科学.密码学的起源可追溯到2000年前.而当今的密码学是以数学为基础的.   密码学的历史大致可以追溯到两千年前,相传古罗马名将凯撒大帝为了防止敌方截获情报, ...

  2. RSA 加密原理和一些知识笔记

    RSA 加密原理和一些知识笔记 原文地址: 01:RSA 加密和原理 .pem .csr .crt .der .p12文件的区别 base64 (https://www.cnblogs.com/zyz ...

  3. rsa加密原理数学证明_非对称加密算法——RSA加密原理及数学推导

    说明:原创不易,著作权仅归作者本人所有,转载请注明出处. 建议:建议阅读时间15min+.证明过程可能看着枯燥,需要动手. 一.  RSA是什么? 看到标题的第一瞬间,先想一下,RSA是什么呢?百度百 ...

  4. RSA加密原理详解,以及RSA中的数论基础

    文章目录 1. RSA加密算法介绍 2. RSA密钥生成 3. RSA加密和解密 4. RSA的安全性 5.涉及到的数论基础 5.1. 模的逆元 5.1.1. 扩展欧几里得算法计算模逆元 5.1.2. ...

  5. 基于java的rsa加密程序_RSA rsa加密程序,rsa java源码和 rsa的jsp Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...

    文件名称: RSA下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 169 KB 上传时间: 2014-04-23 下载次数: 0 提 供 者: 姚双奇 详细说明: ...

  6. 非对称加密算法--RSA加密原理及运用

    密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进科学技术的应用,已成为一门综合性的尖端技术科学. 密码学发展史 在说RSA加密算法之前, 先说下密码学的发展史.其实密码学的诞生,就是为了运用 ...

  7. 计算机网络安全-RSA加密原理

    一. 安全的攻击类型 危及信息安全的举动. 中断:对可用性的攻击,包括对硬件,通信线路的破坏等: 截获:对机密性的攻击,如窃听等: 篡改:对完整性的攻击,如改变数据或文件: 伪造:对真实性的攻击,如为 ...

  8. RSA加密原理:非对称加密鼻祖

    加密算法 加密算法,RSA是绕不开的话题,因为RSA算法是目前最流行的公开密钥算法,既能用于加密,也能用户数字签名.不仅在加密货币领域使用,在传统互联网领域的应用也很广泛.从被提出到现在20多年,经历 ...

  9. RSA加密原理与过程

    一.基本的数学概念与理论 最大公因数,又叫最大公约数,是指两个或多个整数共有约数中最大的一个,使用符号gcd来表示,例如gcd(a,b)表示a和b的最大公约数. 欧几里得算法又称辗转相除法,用于计算两 ...

最新文章

  1. jwt怎么获取当前登录用户_spring oauth2如何获取当前登录用户信息
  2. 网络扫描信息收集基于(Windows)
  3. 如何使用视频转换器将flv格式文件转换为MP4格式
  4. 简单记录一下fabric版本1.4的环境搭建,
  5. 深度学习(八)RBM受限波尔兹曼机学习-未完待续
  6. php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...
  7. SQL语言之同义词(Oracle)
  8. getchar()和getch()的区别
  9. [html] 如何使用纯html制作一个进度条?
  10. th:text=“${user?.name}“ ${?.}
  11. Linux日志收集logrotate原理介绍
  12. 去除List集合中的重复元素,并保持原有数据的初始顺序
  13. 201521123035《Java程序设计》第十周实验总结
  14. 常用的织梦(dedecms)调用标签
  15. 简单的全局异常统一处理
  16. GB/T2659-2000,ISO 3166-1:1997,ISO 3166-1:2006国家和地区代码列表(已整理)
  17. CATIA二次开发—漫谈开发环境
  18. 识别中文_文字的效率:中英韩日四国文字识别效率对比,中文遥遥领先
  19. HanLp的应用 - 真实使用
  20. 齐齐哈尔鹤城计算机学校,齐齐哈尔阳光学校

热门文章

  1. D25-蓝桥-贪心代码实现
  2. 第十二届全国大学生数学竞赛非数类试题
  3. 【分享】Adobe Illustrator 视频教程 - 完全免费,下载即可观看
  4. 什么,你被女朋友拉黑了?那还不来试试这款“拉黑复活检查器”?
  5. PPT不能播放下一页
  6. 设置div圆角的jquery插件-jquery.corner.js
  7. 计算机系统处理器好坏怎么看,新手装机教程:怎么看cpu好坏?电脑cpu参数怎么看?...
  8. mac关闭向日葵远程开机自启
  9. ActionScript3.0自定义鼠标指针
  10. Unity3D 游戏引擎之C#使用Socket与HTTP连接server数据传输包