目录

5.1 投币寄物柜的使用方法

5.2 本章学习的内容

5.3 密钥配送问题

5.3.1 什么是密钥配送问题

5.3.2 通过事先共享密钥来解决

5.3.3 通过密钥分配中心来解决

5.3.4 通过 Diffie-Hellman 密钥交换来解决密钥配送问题

5.3.5 通过公钥密码来解决密钥配送问题

5.4 公钥密码

5.4.1 什么是公钥密码

5.4.2 公钥密码的历史

5.4.3 公钥通信的流程

5.4.3 各种术语

5.4.5 公钥密码无法解决的问题

5.5 时钟运算

5.6 RSA

5.6.1 什么是RSA

5.6.2 RSA加密

5.6.3 RSA解密

5.6.4 生成密钥对

5.6.5 具体实践

5.7 对RSA的攻击

5.7.1 通过密文来求得明文

5.7.2 通过暴力破解来找出D

5.7.3 通过E和N求出D

5.7.4 中间人攻击

5.7.5 选择密文攻击

5.8 其他公钥加密

5.8.1 ElGamal方式

5.8.2 Rabin方式

5.8.3 椭圆曲线密码

5.9 关于公钥密码的Q&A

5.9.1 公钥密码的随机性

5.9.2 公钥密码与对称密码的密钥长度

5.9.3 对称密码的未来

5.9.4 RSA与质数

5.9.4 RSA与质因数分解

5.9.4 RSA的长度


5.1 投币寄物柜的使用方法

无重要内容。

5.2 本章学习的内容

  1. 公钥密码。
  2. 密钥配送问题
  3. 最常用的公钥密码-RSA

5.3 密钥配送问题

5.3.1 什么是密钥配送问题

密钥配送问题是对称密码所面临的问题:密钥必须要发送,但是又不能直接发送。

举例:Alice给Bob发邮件时,不发送密钥,Bob无法解密,发送密钥,Eve也可以解密。

解决密钥配送问题的方法:

  1. 通过事先共享密钥来解决
  2. 通过密钥分配中心来解决
  3. 通过 Diffie-Hellman 密钥交换来解决
  4. 通过公钥密码来解决

5.3.2 通过事先共享密钥来解决

       事先共享尽管有效,但是确具有一定的局限性。

1)需要一种安全的方式将密钥交给对方

2)体量很大的时候,所需要的密钥数量较大。如有1000人,则需要密钥数量为1000X999÷2=499500个。

5.3.3 通过密钥分配中心来解决

密钥分配中心(Key Distribution Center,KDC),每个人只要和密钥分配中心事先共享密钥就可以了。也就是说如果有1000人,数据库中就会保存1000个密钥就够了。

举例,Alice向Bob发送加密邮件时候,需要的步骤如下:

  1. Alice向密钥分配中心发出想要和Bob通信的请求
  2. 密钥分配中心通过伪随机数生成器生成一个会话密钥,这个密钥是供Alice和Bob本次通信中临时使用的密钥
  3. 密钥分配中心从数据库中取出Alice和Bob的密钥
  4. 密钥分配中心用Alice的密钥加密会话密钥,发送给Alice;用Bob的密钥加密会话密钥,发送给Bob
  5. Alice用自己的密钥解密,得到会话密钥
  6. Alice用会话密钥加密邮件,发送给Bob
  7. Bob对来自分配中心的消息进行解密(用自己的密钥),得到会话密钥
  8. Bob用会话密钥对Alice的邮件进行解密
  9. Alice和Bob删除会话密钥

        KDC的局限性在于:

  • 随着数量的增加,KDC的负荷也会随之增加。
  • 如果KDC计算机发生故障,全部的加密通信就会瘫痪。
  • KDC面临被攻击者入侵的风险,盗取密钥数据库。

5.3.4 通过 Diffie-Hellman 密钥交换来解决密钥配送问题

Diffie-Hellman 密钥交换,进行加密通信的双方需要交换一些信息,依据所交换的信息,双方可以各自生成相同的密钥。具体的实现细节,将在第11章中详述探讨。

传送门——>

5.3.5 通过公钥密码来解决密钥配送问题

发送者使用公钥密码进行加密,接收者使用私钥进行解密。

5.4 公钥密码

5.4.1 什么是公钥密码

公钥密码中,密钥分为加密密钥(公钥)和解密密钥(私钥)两种。加密密钥一般是公开的,但是解密密钥一定不能公开。

5.4.2 公钥密码的历史

1976年,发表了关于公钥密码的设计思想。

1978年,设计了具体的公钥密码算法-RSA。

5.4.3 公钥通信的流程

在公钥密码通信中,通信过程是由接受者Bob来启动的。

5.4.3 各种术语

公钥密码,也称为非对称密码。

5.4.5 公钥密码无法解决的问题

公钥密码解决了密钥配送问题。但是还有一下两个问题:

1)在公钥通信中,我们需要判断所得到的公钥是否正确合法,这个问题被称为公钥认证问题

2)公钥密码的处理速度只有对称密码的几百分之一。这个问题的解决,将在第6章中进行介绍。

5.5 时钟运算

5.5.1 加法

mod:除法求余数的运算。和“ X ”、“ ÷ ”等符号会被同等处理。

例如:(7+6)mod 12 即 13 mod 12 = 1;就是13除以12的余数是1.

5.5.2 减法

减法是加法的逆运算。

满足(X+Y)mod 12 = 0可计算出X、Y的组合,即:“减去X”与“加上Y”这两个运算是等价的。

5.5.3 乘法

7X4 mod 12  =  28 mod 12  =  4

5.5.4 除法

除法可看成乘法的逆运算。

看看下面这个算式:

A X B mod 12 = 1;即在以12为模的世界中,A与B互为倒数。

某个数是否存在倒数,可以通过这个数与12的最大公约数为1这个条件来进行判断。

和12的最大公约数为1的数(5、7、11),在数学上称为“和12互质的数”。也可以理解为“相对于12的质数”。

5.5.5 乘方

例如下面的计算:在乘方的中间步骤求mod,结果是一样的,可以避免计算大整数的乘积。 

这种在计算过程中求mod来计算乘方的方法,是RSA的加密和解密算法中所使用的方法。

5.5.6 对数

乘方的逆运算称为对数。

对数离散对数

想学习了解更多关于离散对数的详细内容,请移步——>离散对数密码学原理

5.5.7 从时钟到RSA

RSA的加密和解密过程中所使用的正式这样的运算。

5.6 RSA

5.6.1 什么是RSA

RSA是三位开发者的姓氏的首字母组成,RSA可以被用于公钥密码和数字签名。关于数字签名,将在第9章进行详解。

5.6.2 RSA加密

RSA加密可以用下面的公式来表达:

RSA的密文是对代表明文的数字的E次方求mod N的结果。

E是加密(Encryption)的首字母,N是数字(Number)的首字母。

E和N是RSA加密的密钥,也就是说,E和N的组合就是公钥,一般写成公钥是 (E, N)

5.6.3 RSA解密

RSA的解密可以用下面的公式来表达:

RSA的明文是 对代表密文的数字的D次方求mod N的结果。

 D是解密(Decryption)的首字母,N是数字(Number)的首字母。

解密的N和加密的N相等,D和N的组合就是私钥

5.6.4 生成密钥对

求E、D和N这三个数就是生成密钥对。RSA密钥对的生成步骤如下:

  1. 求N
  2. 求L(L是仅在生成密钥对的过程中使用的数)
  3. 求E
  4. 求D

(1)求N

N = p x q  (p 、q为质数。注意不是互质)

质数:“是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

p、q是需要通过伪随机数生成器生成的数,生成后要先判断是不是质数,如果不是就重新生成。p和q不能太小,太小的话容易被破译,太大的话计算时间又会变长。

(2)求L

L只出现在生成密钥对的过程中。

L = lcm(p-1,q-1)         (L是p-1和q-1的最小公倍数)

(3)求E

        1 < E < L;          第一步是伪随机数生成器在这个范围类生成E的候选数。

    gcd(E,L) = 1;    第二步就是判断是否满足这个条件。E与L的最大公约数为1(E和L互质)。

简单来说,之所以要加上 “gcd(E,L) =1” 这个条件,是为了保证一定存在解密时需要使用的数D。

到目前,求出了E和N,就已经生成了密钥对中的公钥

(4)求D

       D是由E计算得到的。D、E、L之间必须具备下列关系

  • 1 < D < L; 
  • E x D mod L =1;   要保证存在满足条件的D,就需要E和L的最大公约数为1(见上一节的时钟运算),同事也正是(3)中对E的要求条件。

简单来说,E x D mod L =1保证了对密文进行解密时能够得到原来的明文。

到目前,求出了D和N,就已经生成了密钥对中的私钥

RSA中密钥对的生成汇总

(1)求N

(3)求E

用伪随机数生成器求p和q,p和q都是质数

N = p × q

1 < E < L; 

gcd(E,L) = 1;E与L的最大公约数为1(E和L互质)。

(2)求L

(4)求D

L = lcm(p-1,q-1) 

L是p-1和q-1的最小公倍数

1 < D < L; 

E × D mod L =1; 

5.6.5 具体实践一下吧

举例计算如下:

(1)求N

取p=17, q=19;那么:N=p x q = 17 x 19 = 323;

(2)求 L

L = lcm(p-1, q-1)= lcm(16,18)= 144(16和18的最小公倍数)

(3)求E

gcd(E,L)= 1;  E=5,7,11,13,17...有很多满足的数,我们取E=5。那么E=5,N=323,这就是公钥。

(4)求D

E x D mod L = 1; 5 x D mod 144 = 1计算得到 D=29

公钥(E,N)= (5,323),私钥(D,N)=(29,323)

下面进行加密和解密计算:

要加密的明文必须是<N的数,也就是小于323的数。原因在结尾处再写。我们取明文为123

  加密和解密:

    为什么  明文 < N :

因为解密运算需要mod N,而mod N的结果必定小于N,因此如果明文本身大于N,则解密后无法得到正确的明文。

5.7 对RSA的攻击

5.7.1 通过密文来求得明文

目前没有发现求离散对数的高效算法。

5.7.2 通过暴力破解来找出D

由于现在RSA所使用的p和q的长度都是1024比特以上,N的长度为2048比特以上。在这样的长度下暴力破解极其困难。

5.7.3 通过E和N求出D

      破译者不知道p和q,就不能计算出D。所以对p和q的求解是非常关键的

  1. 对N进行质因数分解攻击:N = p x q,N是公开的,p和q都是质数,因此由N求p和q只能通过将N进行质因数分解来完成。 我们可以说:一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译。然而目前并没有。

  2. 通过推测p和q进行攻击:由于p和q是通过伪随机数生成器产生的,如果生成器的算法很差,密码破译者也可能推测处p和q。

5.7.4 中间人攻击

Mallory混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者。

Alice准备向Bob发送一封邮件,中间人攻击的简单过程:

  1. Alice向Bob索取公钥
  2. Mallory拦截了Bob的邮件,使其无法发送给Alice。Mallory把Bob的公钥保存起来,然后把自己伪装成Bob,把自己的公钥发给Alice
  3. Alice用收到的公钥(Mallory的公钥)加密邮件,发送给Bob
  4. Mallory拦截了邮件,用自己的私钥解密邮件。
  5. Mallory篡改邮件后,再用Bob的公钥进行加密,然后伪装成Alice,发送给Bob
  6. Bob接收到邮件解密后,就看到了Mallory篡改后的邮件,但是他以为是Alice发送的

要防御中间人攻击,还需要一种手段来确认收到的公钥是否真的来自Bob,这就是认证。我们可以使用公钥的证书。关于证书,会在第10章进行探讨。

5.7.5 选择密文攻击

选择密文攻击:发送任意数据,服务器都会将其当做密文来解密并返回解密的结果,这种服务称为解密提示。

如何改进RSA才能地狱选择密文攻击呢:RSA-OAEP,是一种RSA改良算法(RFC2437)。

5.8 其他公钥加密

5.8.1 ElGamal方式

RSA:利用质因数分解的困难度;

ElGamal:利用mod N下求离散对数的困难度。

缺点:加密的密文会变成明文的两倍。

5.8.2 Rabin方式

Rabin:利用mod N下求平方根的困难度。破解难度与质因数分解是相当的。

5.8.3 椭圆曲线密码(ECC)

特点:所需的秘钥长度比RSA短。

是通过将椭圆曲线上的特定点进行特殊的乘法运算来实现的,利用了这种乘法运算的逆运算非常困难这个特性。

5.9 关于公钥密码的Q&A

5.9.1 公钥密码的机密性

Q:公钥密码比对称密码的机密性更高吗?

A:不是,机密性的高低根据密钥长度而变化的。

5.9.2 公钥密码与对称密码的密钥长度

Q:RSA1024 比 AES-256安全性更高吗?

A:不是。不同加密算法,不能直接通过密钥的长短比较安全性。比较复杂。

5.9.3 对称密码的未来

5.9.4 RSA与质数

5.9.4 RSA与质因数分解

5.9.4 RSA的长度

《图解密码技术》笔记5:公钥密码-用公钥加密,用私钥解密相关推荐

  1. 图解密码技术学习笔记

    主题:图解密码技术 简介:密码技术入门学习 参考:译者分享 作者:ybb 时间:2021年12月15日 周自恒直播课学习笔记 4.分组密码的模式 4.1 DES和AES作为对称加密时使用的分组密码只能 ...

  2. 《图解密码技术》读后的总结

    <图解密码技术>我认为是一本密码学入门的易读书,身边的几个做密码相关工具的朋友都推荐我看看,这次有时间就看了下. 本书是我11月份开始阅读的,一共用了25天,每天读完后都会把一些我认为是重 ...

  3. 《图解密码技术》总结

    1.对称加密 对称加密:加密和解密使用相同的密钥 可解决的问题:机密性 常见算法:DES.3DES.AES 存在的问题:密钥配送问题 关于分组密码: DES和AES都属于分组密码 分组密码:只能加密固 ...

  4. 第1讲 几种密码技术的简要介绍——《图解密码技术》

    最近上密码学的课,听不懂老师上课讲的内容,也不理解密码学到现在学的是个什么东西,所以就自己找资料开始啃,我会将我自己学到的加上自己的理解做个记录,以便于复习.本人才疏学浅,如果有理解不对的地方,还恳请 ...

  5. RSA公钥加密与私钥解密算法

    首先是随机生成一个密钥对(一个公钥和一个私钥) package com.zy.demo1.secretTest;import lombok.extern.slf4j.Slf4j; import org ...

  6. Java使用RSA的公钥加密,私钥解密;私钥加密,公钥解密

    Java使用RSA的公钥加密,私钥解密:私钥加密,公钥解密 import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.bina ...

  7. 阅读笔记-《图解密码技术》(日)结城浩

    第1章    环游密码世界 加密和解密 加密之前的消息称为明文(plaintest),加密之后的消息称为密文(ciphertext). 正当的接收者将密文还原为明文称为"解密",但 ...

  8. 《图解密码技术》——读书笔记

    好书,强烈推荐! 密码学家的工具箱 对称密码 公钥密码 单向散列函数 消息认证码 数字签名 伪随机数生成器 Enigma密码机 推荐电影:模仿游戏 The Imitation Game (2014) ...

  9. 《图解密码技术》笔记11:密钥-秘密的精华

    目录 11.1 本章学习的内容 11.2 什么是密钥 11.2.1 密钥就是一个巨大的数字 11.2.2 密钥与明文是等价的 11.2.3 密码算法与密钥 11.3 各种不同的密钥 11.3.1 对称 ...

最新文章

  1. mongo mysql 聚合性能_Mongodb和Mysql的性能分析
  2. MyBatis --教程
  3. Maven实战. 1.3Maven与极限编程
  4. android listview 不显示_Android使用ExpandableListview实现时间轴
  5. Android内容提供器的应用,基于Android的智能终端应用防护系统短信过滤子模块的设计与实现...
  6. 展示魅力东莞,传递亚运激情
  7. 【IDEAEclipse】4、IntelliJ IDEA上操作GitHub
  8. Application应用框架思考(三) 之[插件机制]
  9. matlab差分模型求解,有限差分法求解偏微分方程MATLAB
  10. iphone计算机显示过程,iphone怎么同步显示到电脑
  11. 网络流量在线分析系统的设计与实现
  12. excel max函数的使用
  13. 云端卫士实战录 React + Redux 前端项目实践
  14. 花了10分钟终于明白矩阵的逆怎么用了!
  15. 完整正则表达式语法列表
  16. Python编程:安装自己编写的包
  17. 用C++实现复数的四则运算
  18. Python和Go语言的区别
  19. 下载安全证书到jdk中的cacerts证书库
  20. Layui table无数据时显示Error而不是显示无数据

热门文章

  1. Python numpy函数:reshape()
  2. 《统计学》第八版贾俊平 思维导图
  3. vue中实现省市区三级联动(V-Distpicker插件)
  4. Python实现Excel表格图片下载-腾讯文档收集表下载Excel表格后下载图片
  5. 查看表空间使用率(包括临时表空间)
  6. Source Insight 最新版本
  7. Java开源 Web开发框架 (一)
  8. 使用iperf测试网络性能
  9. 我用Python写了一个小游戏
  10. 直接调节风扇转速的Windows开源工具--Open Hardware Monitor