一.非对称密钥加密概述

前面讲述了对称密钥加密体制。使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。这样,如果一个网络中有n个用户,他们之间彼此都可能进行秘密通信,这时网络中将需要n(n-1)/2个密钥(其中,每个用户都需要保存n-1个密钥),这样巨大的密钥量给密钥分配和管理带来了极大的困难。另外,随着计算机网络,特别是因特网的发展,网络上互不相识的用户可能需要进行保密的会话(例如,如果用户在进行电子商务活动时,需要保密的连接,这时的客户对象可能根本不是固定的对象)。最后,对称密钥加密机制难以解决签名验证问题。

非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。每一个用户的加密密钥都是公开的。因此,加密密钥也称为公开密钥。所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。同时,每一个用户的解密密钥将由用户保存并严格保密。因此,解密密钥也称为私有密钥。

非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。公钥加密算法一般是将对密钥的求解转化为对数学上的困难问题的求解,例如RSA算法的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,已知两个大素数a、b,求出a*b是容易计算的,而已知a*b,想知道其是哪两个大素数的乘积目前还没有好的计算方法,另外也有一些非对称加密算法(如ELGamal算法)的安全性是基于求“离散对数”这个数学难题上的。

在公钥密码系统中每个实体都有自己的公钥和相应的私钥。公钥密码系统的加密变换和解密变换分别用E和D表示。任何实体B要向实体A发送信息m的步骤如下:实体B首先获得实体A的真实公钥的拷贝(eA),实体B使用eA计算密文c=E(m)并发送给实体A,实体A使用自己的私钥dA,计算m=D(c)解密密文,恢复出明文m。这里公钥不需要保密,但要保证它的真实性,即eA确实是实体A掌握的私钥dA所对应的公钥。提供真实的公钥比安全地分配密钥实现起来要容易得多。这也是公钥密码系统的主要优点之一。

公钥密码系统的主要目的是提供保密性,它不能提供数据源认证(dataorigin authentication)和数据完整性(data integrity)。数据源认证是指:指定的数据是在以前的某个时间确实是由真正的源创建的。数据完整性是指:真正的源创建该数据后经过传输后存储没有发生改变。数据源认证和数据完整性要由其他技术来提供(如消息认证码技术、数字签名技术等)。

从本质上来看,公钥密码比对称密钥密码加密的速度要慢,粗略的说,公钥加密算法RSA硬件实现比分组加密算法DES硬件实现的速度慢1500倍,而软件实现的速度要慢100倍。

公钥解密也可以提供认证保证(如:在实体认证协议、带认证的密钥建立协议等)。公钥加密中必须有颁发让发送消息的人得到想要发送到的那个人的公钥的真实拷贝,否则就会受到伪装攻击。在实践中有很多方法分发真实的公钥,如:使用可信的公共文件,使用在线可信服务器,使用离线服务器和认证。

公钥加密的优点:

● 大型网络中的每个用户需要的密钥数量少。

● 对管理公钥的可信第三方的信任程度要求不高而且是离线的。

● 只有私钥是保密的,而公钥只要保证它的真实性。

缺点:

● 多数公钥加密比对称密钥加密的速度要慢几个数量级。

● 公钥加密方案的密钥长度比对称加密的密钥要长。

● 公钥加密方案没有被证明是安全的。

公钥密码的概念本身就被公认为是密码学上的一块里程碑。二十多年来的研究表明,公钥密码成功地解决了计算机网络安全中的密钥管理,身份认证和数字签名等问题,已经成为信息安全技术中的重大核心技术。

二.RSA算法概述

RSA加密算法于1977年由美国麻省理工学院的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和Adleman命名为RSA算法。这三位科学家荣获2002年度图灵奖,以表彰他们在算法方面的突出贡献。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数的乘积却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。它无须收发双方同时参与加密过程,既可以用于保密也可以用于签名,因而非常适合于电子邮件系统的加密,互连网和信用卡安全系统。

三.RSA算法的加密和解密过程

在RSA算法中,每个实体有自己的公钥(e,n)及私钥(d,n),其中n = p*q,p,q是两个大素数,e*d = 1mod ф(n),显然e应该满足gcd(e,ф(n))=1。实体B加密消息m,将密文在公开信道上传送给实体A。实体A接到密文后对其解密。具体算法如下。

1.公钥的生成算法

RSA的公钥生成算法十分简单,可以分为四步:

(1)选择两个素数,p和q;

(2)计算n = p×q和z = (p-1)×(q-1);

(3)选择一个与z互质的数d;

(4)找出一个e,使得e×d = 1 mod z。

公开密钥是由(e,n)构成,私有密钥由(d,n)构成。

2.加密算法

实体B的操作如下:

(1)得到实体A的真实公钥(e,n);

(2)把消息表示成整数m,0<m≤n-1;

(3)使用平方-乘积算法,计算C = Ek(m) = me mod n;

(4)将密文C发送给实体A。

3.解密算法

实体A接收到密文C,使用自己的私钥d计算m = Dk(C) = Cd mod n,m∈Zn。

我们选择p = 3,q = 11,得到n = 33,z = (p-1)×(q-1) = 2×10 = 20。由于7和20互质,故设d = 7。对于所选的d = 7,解方程7×e = 1 mod 20,可以得到e = 3。

在我们的例子中,由于所选的p和q太小,破译当然很容易,我们的例子只是用来说明此算法的原理。

用c语言elgamal共密钥密码加密算法,非对称密钥体制RSA加密原理相关推荐

  1. 用c语言elgamal共密钥密码加密算法,北京航空航天大学2020年考研840网络空间安全专业综合考试大纲...

    考研大纲是2020考研学生复习的重要参考资料,它指出了所考科目的大致考试范围,也是考研命题的重要参考依据.2020考研大纲已经陆续公布,包括公共课考试大纲和专业课统考科目考试大纲,而自命题科目考试大纲 ...

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

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

  3. 一个简单地C语言程序展示RSA加密原理

    #include<stdio.h> #include<stdlib.h> #include<time.h> #include<math.h>//质数判定 ...

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

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

  5. 常见加密算法DES、AES和RSA的原理和特点

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 今天主要总结下常用的对称性加密算法DES和AES,非对称性加密算法RSA. 嵌入式专栏 1 DES加 ...

  6. 【实习项目记录】(一)加密算法MD5和RSA

    什么是md5加密? MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA ...

  7. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  8. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结

    (1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...

  9. 腾讯物联网云平台 密钥 MQTT参数生成及密码加密算法实现

    腾讯物联网云平台 密钥 MQTT参数生成及密码加密算法实现 腾讯云三元组 腾讯云三元组 首先在腾讯物联网云平台创建好项目.产品.设备,然后获取该设备的三元组.下面通过我的创建的产品作为示例: Prod ...

最新文章

  1. VTK:灯动画用法实战
  2. html5学习笔记(html5新标签aside)
  3. 浅谈万进制算法与大数定理的结合(高精度乘除法,阶乘)
  4. SAP UI 搜索分页技术
  5. 计算机开机显示器无显示桌面,电脑开机后显示器不亮故障排除方法
  6. AMD桌面处理器Roadmap也已泄露
  7. 网站优化JS css压缩
  8. No matching distribution found for docx(配置cmd控制台代理)
  9. MTA18ASF2G72PDZ-2G6D1内存条MTA18ASF2G72PDZ-2G6E1
  10. SM2椭圆曲线公钥密码算法
  11. 常用数据库分页查询SQL汇总
  12. 域名注册网站服务比较
  13. pwm脉宽调制c语言程序,MCS-51系列单片机C语言编程PWM脉宽调制器程序模板
  14. idea在 keymap下的eclipse的快捷键
  15. Win10如何彻底关闭Hyper-V(真实可用,本人亲测)
  16. mysql 多主多从
  17. 匿名科创--ANO_OPENMV视觉开发板介绍
  18. 免费的 PPT 模版资源
  19. 微信小程序中绘制图表 (AntV F2 的使用)
  20. 最佳情侣身高差c语言函数,“最佳情侣身高差是多少为妙?”哈哈哈,神评尤为突出啊...

热门文章

  1. 物联网(IoT)会是广告欺诈的一道后门
  2. 通过jQuery EasyUI实现基本的拖放,此为转发!!大家学习讨论
  3. [转]查看linux服务器硬盘IO读写负载
  4. 文本处理工具--正则表达式
  5. GetLogicalProcessorInformation
  6. 通过IPv4网络访问IPv6网络 ISATAP隧道配置方法
  7. insertAfter函数
  8. linux lids pdf,Linux入侵监测系统LIDS原理(3)
  9. php数组写杨辉三角java_用java实现杨辉三角的示例代码
  10. 李海自学java_JAVA程序设计 实验一