公钥密码算法

公钥密码算法,又称非对称密码算法,使用两个密钥:

  • 一个密钥是保密的,称作“私钥”
  • 另一个密钥是公开的,称作“公钥”
    这两个密钥存在一些特殊的数学关系:从私钥可以推导出公钥,但从公钥不能推导出私钥。

公钥密码算法一般包括加解密签名验签两种使用模型
加解密模型:Alice想要和Bob秘密通信时,只需要用Bob的公钥对明文加密,Bob接收到密文后,用自己的私钥解密就可以得到明文了。其他人不知道Bob的私钥,所有无法解密出明文。
签名验签模型:借助数学方法可实现类似手写签名的作用,Alice使用自己的私钥对消息进行签名,然后将结果发送给Bob,Bob收到消息以后,使用Alice的公钥验证它。因为只有拥有相应私钥的用户,才能产生可验证通过的消息,所以Alice事后不能否认自己的签名。

PKI

由于攻击者可以冒充通信双方生成公私密钥对,因此,要应用公钥密码算法,首先要解决公钥归属问题PKI通过数字证书,很好地证明了公钥是谁的。

PKI(Public Key Infrastructure),公钥基础设施,PKI是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
通俗理解:PKI就是利用公开密钥理论和技术建立提供安全服务的、具有通用性的基础设施,是创建、颁发、管理、注销公钥证书所涉及的所有软件、硬件集合体,PKI可以用来建立不同实体间的"信任"关系,它是目前网络安全建设的基础与核心。PKI的主要任务是在开放环境中为开放性业务提供基于非对称密钥密码技术的一系列安全服务,包括身份证书和密钥管理、机密性、完整性、身份认证和数字签名等。

  • PKI能够提供什么

真实性:标识与身份鉴别——确保与你通信的另一方是它所声称的真实身份。
完整性:不被修改,没有错误——保证信息在存储或传输过程中保持不被篡改、破坏。
机密性:隐私与保密——除了通信双方之外,其他方无法获知该信息。
非否认性:责任确定——任何一方无法抵赖自己曾做过的操作。

  • PKI系统组成结构
    PKI基本结构由证书认证机构(certificate authority, CA)、证书持有者(certificate holder)、依赖方(relying party)三方构成:

1.CA是一个独立的可信第三方,为证书持有者签发数字证书,数字证书中声明了证书持有者的身份和公钥。CA在签发证书前应对证书持有者的身份信息进行核实验证,并根据其核验结果为其签发证书。
2.证书持有者向CA申请数字证书,并向CA提供必要的信息以证明其身份及能力,获得由CA签发的证书;证书持有者在与依赖方进行交互时,需向依赖方提供由CA签发的数字证书证明其有效身份。
3.依赖方是证书的验证方,依赖方与证书持有者进行交互(如建立通信连接)时,需获取证书持有者的数字证书,验证数字证书的真实性和有效性。依赖方可以指定其信任的CA列表,若证书持有者提供的数字证书不是受信CA签发的数字证书,依赖方将不认可该证书所声明的信息。

  • 数字证书
    数字证书是PKI最基本的元素,也是承载PKI安全服务最重要的载体。
    证书存在的意义在于回答“公钥属于谁”的问题,以帮助用户安全地获得对方的公开密钥。
    证书中最基本的内容是证书持有者的身份信息公钥数据,以及用于验证证书完整性的CA签名结果。X.509证书是通用的PKI数字证书格式,如下图所示。

    一张X.509数字证书由证书内容、签名算法和签名结果组成。需要使用他人证书的用户,依照签名算法,用CA的公钥验证签名结果,从而保证证书的完整性,安全地获取公钥。
  • PKI的主要应用场景
    PKI提供的安全服务恰好可以满足电子商务、电子政务、网上银行、网上证券等金融业交易的安全需求,是确保这些活动顺利进行必备的安全措施,没有这些安全服务,电子商务、电子政务、网上银行、网上证券等都无法正常运作。

对称加密算法

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法。如DES、3DES、RC5等。

数字签名

甲向乙发送消息,乙怎么知道这个消息是不是甲发给他的?

答案是用数字签名证明其身份。
数字签名是通过散列算法,如MD5、SHA-1等算法从大块的数据中提取一个摘要。而从这个摘要中不能通过散列算法恢复出任何一点原文,即得到的摘要不会透露出任何最初明文的消息,但如果原信息受到任何改动,得到的摘要却肯定会有所不同。因此甲可以对文件进行散列算法得到摘要,并用自己的私钥加密,这样即使黑客截获也无用,黑客不会从摘要内获得任何信息,但乙不一样,他可用甲的公钥解密,得到其摘要(如果公钥能够解开此摘要,说明此摘要肯定是甲发的,因为只有甲的公钥才能解开用甲的私钥加密的信息,而甲的私钥只有甲自己知道),并对收到的文件(解密后的合同文件)也进行同样的散列算法,通过比较其摘要是否一致,就可得知此文件是否被篡改过(因为若摘要相同,则肯定信息未被改动,这是散列算法的特点)。这样不仅解决了证明发送人身份的问题,同时还解决了文件是否被篡改的问题。

KDC

KDC(Key Distribution Center),密钥分发中心,是一种运行在物理安全服务器上的服务。KDC维护着领域中(与Windows中的域相当)所有安全主体(Security Principal)账户信息数据库。
KDC是什么?
KDC和每一个节点都有一个共享密钥,每个节点希望和其它节点通信,则首先和KDC联系,由KDC分配一个临时的会话密钥

Kerberos协议

Kerberos是一种基于对称密钥、在网络上实施身份认证的服务。包含认证服务器(AS)和门票授权服务器(TGS)。
-能够实现用户、客户端和服务器之间的互相鉴别
Kerberos协议流程
参考 https://www.freebuf.com/articles/network/265320.html

DH算法

参考 https://blog.csdn.net/u013837825/article/details/123749636

迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议。
它可以让双方在完全没有对方任何预先信息的条件下,通过不安全信道交换一个信息,创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。

原理
最简单,最早提出的协议使用一个质数p的整数模n乘法群以及其原根g。下面展示这个算法,绿色表示非秘密信息,红色粗体表示秘密信息:

爱丽丝和鲍伯最终都得到了同样的值,因为在模p下 g^{ab} 和 g^{ba} 相等。

假设 p为素数,对于正整数 a,x,y,
有: (a^x mod p)^y mod p = a^(xy) mod p
证明如下:
令 a^x= mp + n, 其中 m, n 为自然数, 0 <= n < p,
则有 C
= (a^x mod p)^y mod p
= ((mp + n) mod p)^y mod p
= n^y mod p
= (mp +n)^y mod p
= a^(xy) mod p

这个问题就是著名的离散对数问题。注意g则不需要很大,并且在一般的实践中通常是2或者5。IETF RFC3526 文档中有几个常用的大质数可供使用。

DH算法的缺点
DH算法虽然可以保护通信信息安全,但却无法确认通信双方的真实身份,很难防范中间人的攻击。所以在日常使用中,DH算法经常辅以其他的数字签名算法(如RSA等)一同使用,用于验证通信双方的真实身份。

RSA算法

RSA算法是目前理论和实际应用中最为成熟的和完善的公钥密码体制。RSA用来解决对称密码的密钥分发问题。还可以用来进行数字签名来保证信息的否定与抵赖,利用数字签名较容易发现攻击者对信息的非法篡改以保证信息的完整性。
RSA的安全性依赖于大整数的因子分解的困难性,为了满足信息安全强度的需求,密钥的位数都比较多(521位甚至更高),导致幂模运算的运算量极大,成为提高RSA算法加解密速度的瓶颈。
数学基础

  • 素数和互素数

称整数p(p>1)是素数,如果p的因子只有±1,±p。
若满足下面2个条件,则称c是两个整数a、b的最大公因子,表示为c=gcd(a, b)。
• ① c是a的因子也是b的因子,即c是a、b的公因子。
• ② a和b的任一公因子,也是c的因子。
如果gcd(a,b)=1,则称a和b互素。

  • 模运算
    • 设n是一正整数,a是整数,如果用n除a,得商为q,余数为r,用a mod n表示余数r。
    • 如果(a mod n)=(b mod n),则称两整数a和b模n同余,记为a≡b mod n。
    • 称与a模n同余的数的全体为a的同余类,记为[a],称a为这个同余类的表示元素。
    • 注意: 如果a≡0(mod n),则n|a。那么就称n整除a
    • 同余有以下性质:
    • ① 若n|(a-b),则a≡b mod n。
    • ② (a mod n)=(b mod n),则a≡b mod n。
    • ③ a≡b mod n,则b≡a mod n。
    • ④ a≡b mod n,b≡c mod n,则a≡c mod n。

  • 费马小定理(Fermat Theory) :
    • p素数,a是整数且不能被p整除,则:a^(p-1)≡ 1 mod p
    • 例:a = 7,p = 19,则a^(p-1) = 7 ^18 ≡ 1 (mod 19) {表示用19来除,余数是1}

  • 欧拉(Euler)函数(n)
    • (n)表示小于n且与n互素的正整数个数。例:(6) = 2
    • p是素数,§ = p-1 。例:(7) = 6
    • 若gcd(m,n) = 1,则(mn) = (m)(n)
    • 特别地,若pq,且都是素数,(pq)=(p-1)(q-1)。如: (21) = 12 = (3)× (7) = 2×6

RSA密码体制的建立

  • 产生密钥对

• 1、选择两个大素数p,q, p≠q(保密,选择)
• 2、计算n=pq,(n)=(p-1)(q-1) (公开,计算出)
• 3、选择整数e,使得gcd(e,(n))=1 (公开,选择)
• 4、计算ed  1 mod (n) (保密,计算出)

  • 公钥:KU={e, n}, 私钥: KR={d, n}

  • 使用
    • 加密: C = M^e mod n
    • 解密: M = C^d mod n
     尝试证明
    • C = Me mod n = (Cd mod) e mod n

RSA的实例
选p = 7,q = 17,则
• n = pq = 119, (n)=(p-1)(q-1) = 6×16 = 96
取e = 5,它小于96,并且与96互为素数
• 则d = 77 ( ∵5×77 = 385 = 4×96+1≡1 mod 96 )
公钥(5,119),私钥(77,119)
加密M = 19
• 则C = M^e mod n = 19^5 mod 119 = 66 mod 119
解密C = 66
• M = C^d mod n = 66^77mod 119 = 19 mod 119

RSA算法的优缺点
优点:
1.密钥分发简单。由于加密密钥和解密密钥不同,并且不能由加密密钥推出解密密钥,从而使得加密密钥表可以像电话号码本一样由主管部门发送给各个用户。
2.需要秘密保存的密钥量减少。
3.可以满足互不认识的人之间的私人通信的保密性要求。
4.可以完成数字签名和认证。
缺点
1.产生密钥很麻烦。受到素数产生技术的影响,很难做到一次一密。
2.安全性。
3.速度慢。

代码实现参考 https://blog.csdn.net/weixin_44745159/article/details/89448205?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-89448205-blog-112919307.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=2

PKI、KDC、DH、RSA都是些什么相关推荐

  1. 30+程序员,平时都忙些什么事情?平时都想些什么?以后有啥计划?

    很多人都说,30岁以后了,写程序还有前途嘛?我有时候也迷茫,但是迷茫过后,总会给自己寻找方向,每个人都需要有个信念.没有信念,活着就没意思,无聊,觉得没奔头了. 废话少说,我来说说,我平时工作都忙些什 ...

  2. android 程序 读logo,Android端APP更换logo和名称后都需要些测试哪些内容呢?

    原标题:Android端APP更换logo和名称后都需要些测试哪些内容呢? 之前有人在搜狗测试粉丝群中问过APP更换logo和名称后需要怎么测试呢?小编正好经历过这样的需求,下面来系统整理一下APP更 ...

  3. dst发育筛查有意义吗_儿童视力筛查,都筛些啥?

    感谢眼科小伙伴们的早出晚归辛勤忙碌,感谢幼儿园.学校及小朋友们的积极配合,本学期的校园视力筛查也已进入尾声.相信爸爸妈妈们都已拿到了这样的筛查结果单: (学龄前儿童仅行电脑验光筛查,学龄儿童还需行视力 ...

  4. @echo off是什么意思_高街、BF、FOG、OS风。。。都是些什么鬼?

    高街.BF.FOG.OS风...这些FASHION WORD都是些什么鬼? 作为新时代的时尚青年这些穿搭风你怎可以不知道 SKADI今天就帮你科普一下 高 街 风 "高街"的英文& ...

  5. [详解]Linux的目录里都装些啥??

    搞电脑的人总想知道自己的系统里到底有些什么东西,于是我就在Linux的根目录下运行ls -l(列目录命令),哇,一大串,这许多目录都放些什么呢?我硬着头皮往里钻,功夫不负有心人,终于将这迷宫的秘密揭开 ...

  6. 北大计算机研究生有多神仙,北大考研成绩公布,还上“热搜”,这都是些什么“神仙分数”?...

    北大考研成绩在2月22日进行了公布,都说"好饭不怕晚",在所有大学里,2月22号公布成绩确实算比较晚的了,希望同学们都能够查到满意的成绩. 北京大学研究生网成绩公布通知 截止公布成 ...

  7. 看看月光blog2014年都搞些啥

    看看月光blog2014年都搞些啥  2015-01-15 22:50    网页设计   标签:博客   1069    发表评论 2014年已经过去了,Blog主们也进入了新的一年.在过去的一年年 ...

  8. 大厂前端面试都问些什么问题?入职爱奇艺年薪48万,面试经验总结

    前言 "金九银十"跳槽季,又到了面试求职的高峰期.好多小伙伴都会跳槽去找工作.如果你不跳槽,也建议把这篇文章看完,毕竟金九银十之后,就是金三银四了,总是逃不掉的? 你在面试的时候, ...

  9. 证券行业信息化17_我的香港游记3_交易系统技术支持部_会计与结算技术支持部都干些什么?

    转自 https://stanleyyan.wordpress.com/category/%E8%AF%81%E5%88%B8%E4%BF%A1%E6%81%AF%E5%8C%96/ 总结:IT支持部 ...

  10. python 今日头条 微头条_今日头条微头条范文-头条号的微头条你们都发些什么,该如何写?...

    头条号的微头条你们都发些什么,该如何写? 心灵相约头条号.呼唤着,努力着,拼搏着,它属于努力地人们,是传播正能量的家园.今天起要根扎头条号,写出优秀地原创作品.头条号的朋友们努力吧!用心血和汗水浇灌头 ...

最新文章

  1. 数据中心行业人士如何进行继续教育
  2. C#与.NET程序员面试宝典 1.4.3 笔试(举例微软、雅虎笔试题目)
  3. Linux命令 —— 输出一组系统信息(uname -a)
  4. 在哪里可以找到用于读取 YML 配置文件的 Spring 文档
  5. c语言流程图char,求救!各位大神,用程序流程图怎么描述下面这个???
  6. nginx 转发_除了转发和负载均衡,nginx又一次让他玩出新高度
  7. 转载:Pixhawk源码笔记一:APM代码基本结构
  8. 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?
  9. android让图片旋转
  10. 右键菜单_右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项
  11. Visual studio 2013 添加 GitHub
  12. Mysql 锁定 读情况
  13. 示例1---从记事本中读取数值,然后写到数组中
  14. android输入法手势程序源码
  15. 互补滤波系数_四元数+互补滤波 - osc_5aksh307的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. hdu 4699 模拟栈
  17. C语言键盘控制走迷宫小游戏
  18. 改变生活的态度,突破瓶颈
  19. 零信任能彻底解决邮件安全难题
  20. 服务器 12 种基本故障+排查方法

热门文章

  1. Unity Shader-反射效果(CubeMap,Reflection Probe,Planar Reflection,Screen Space Reflection)
  2. 无线广播风暴问题定位分析(omnipeek工具)
  3. 学习计算机it编程的 10 大好处
  4. 命令行帮助文档语法格式详解
  5. flowable-6.7(一)从工作流与BPMN到flowable
  6. Jmeter性能测试实践--登录场景设计
  7. @Insert的用法
  8. 比原链CEO朗豫:DeFi让用户真正理解区块链,意义重大
  9. HAU寒假训练第一周
  10. 数学建模与数据分析中的主成分分析