精读《图解密码技术》--第五章 公钥密码

一、密钥配送问题

1.什么是密钥配送问题

  由于对称密码加密时的密钥和解密时的密钥是一致的,所以使用对称密码的时候,要同时保证密文和密钥都发送给接收方,因为只有同时将密钥和密文发给接收方,接收方才能完成解密。但是密钥和密文缺不能同时发送,因为如果同时发送,就会导致不光接收方可以解密,窃听者也可以完成解密工作。如此密钥既必须要发送,又不能发送,这就是对称密码的密钥配送问题

2.解决密钥配送问题的方法

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

3.通过事先共享密钥来解决

  顾名思义,事先共享密钥的方式就是通过一些安全的途径事先将密钥发送给对方,这种方式称为事先共享。这种方法虽然有效,却有一定的局限性,首先,事先共享受发送方与接收方的距离限制,如果是面对面的交付工作,自然比较容易做到安全可靠,可是如果距离较远也会存在被窃听的可能;第二,在人数很多的情况下,密钥数量也会相当巨大。所以,事先共享存在一定程度的局限性。

4.通过密钥分配中心来解决

  若果使用事先共享来解决密钥配送问题,则需要参加加密通信的所有人都事先共享密钥,这会造成密钥的数量巨大,这样的情况,可以使用密钥分配中心来解决。进行加密通信时,密钥分配中心会生成一个通信密钥,参与通信的每个人只需要实现与密钥分配中心事先共享密钥就可以了。密钥分配中心也有局限,首先,每当有员工需要进行加密通信时,密钥分配中心的计算机都需要进行一些操作,随着员工数量增加,计算机的负荷也越来越大,如果密钥分配中心的计算机发生故障,则会影响整个公司所有员工的加密通信;第二,如果主动攻击者Mallory对密钥分配中心的计算机攻击,并盗取了密钥数据库,整个公司的加密通信都会被主动攻击者Mallory破译。

5.通过Diffie-Hellman密钥交换来解决

  通过Diffie-Hellman密钥交换来解决密钥配送问题,需要发送者和接收者双方交换一些信息,这些信息即便被窃听者Eve窃听也没有问题。发送者和接收者可以根据交换的信息生成相同的密钥,而窃听者Eve却不能生成相同密钥

6.通过公钥密码来解决

  在对称密码中,加密秘钥和解密密钥是相同的,而在公钥密码中,加密秘钥和解密密钥并不相同。只要拥有加密秘钥,任何人都可以对信息进行加密,但是只有拥有解密密钥的人才能对信息进行解密。接收者事先将加密秘钥发送给发送者,这个加密秘钥即便被窃听也没有问题,当发送者利用加密秘钥对信息进行加密之后,将加密后的信息发送给接收者,接收者接收到加密后的信息之后用自己的私钥进行解密,就可以事先加密通信。这样,就不用再将密钥发送给接收者了,也就解决了密钥配送问题。

二、公钥密码

1.什么是公钥密码

  在公钥密码中,密钥分为加密密钥和解密密钥两种,发送者使用加密密钥对消息进行加密,接收者使用解密密钥对密文进行解密。加密密钥一般是公开的,任何人都可以对消息加密,所以加密密钥一般被称为公钥,实现加密通信前,要保证将公钥发送给消息的发送者。解密密钥是绝对不能公开的,仅供自己使用,因此也称为私钥。公钥和私钥是一 一对应的,一对公钥和私钥统称为密钥对。由公钥加密生成的密文,必须使用与该公钥配对的密钥才能解密。公钥密码的使用者需要生成一个公钥和私钥配对的密钥对,然后将公钥公开发送给发送者,私钥仅供自己使用。

2.公钥密码的历史

  (1)1976年,Whitfield Diffie和 Martin Hellman发表了关于公钥密码的设计思想。他们提出将加密密钥和解密密钥分开的思想,还描述了公钥密码应当具备的性质。
  (2)1977年,Ralph Merkle和 Martin Hellman共同设计了一种具体的公钥密码算法——Knapsack。但后来被发现并不安全。
  (3)1978年,Ron Rivest、Adi Shamir和 Reonard Adleman共同发表了一种公钥密码算法——RSA。RSA 可以说是现在公钥密码的事实标准。

3.公钥通信的流程

  假设通信中,Alice是发送者,Bob是接收者,Eve是窃听者。其通信过程如下图所示。

  (1)接收者Bob生成一个密钥对,私钥由自己妥善保管。
  (2)接收者Bob将公钥发送给发送者Alice,此过程即便被窃听者Eve窃听也没有关系。
  (3)发送者Alice用接收者Bob发送过来的公钥对消息进行加密,加密后的消息,只有接收者Bob的私钥才能进行解密,发送者Alice虽然有Bob的公钥,但是却没有解密时用的私钥,所以也不能解密。
  (4)发送者Alice将密文发送给接收者Bob,这里的密文如果被窃听者Eve窃听也没有关系,窃听者Eve只能获得公钥,而不能获得私钥,所以也不能将密文解密。
  (5)接收者Bob用自己的私钥对密文进行解密。

4.各种术语

  (1)公钥密码又称为非对称密码。这是相对于对称密码而言的,在对称密码中,加密用的密钥和解密用的密钥保持一致,而在非对称密码中,加密用的公钥和解密时用的私钥不一致,故称为非对称密码。
  (2)私钥也有很多同义别名,如个人密钥、私有密钥、非公开密钥等。

5.无法解决的问题

  公钥密码解决了密钥配送问题,但并不意味着他能解决所有问题,因为我们还需要判断公钥是否合法,这个问题被称为公钥认证问题。

三、时钟运算

1.加法

  首先,我们引入时钟这个概念,如下图所示。如果要用这个时钟做加法运算的话,就相当于让时钟向右转动,也就是顺时针方向转动,但是由于时钟只有0-11,所以结果就相当于(加数+被加数)÷12的余数,也就是mod运算。例如时钟加法运算计算6 + 7,则就是计算( 6 + 7 ) mod 12 = 13 mod 12 = 1,所以时钟运算6+7的结果就为1。

2.减法

  众所周知,减法运算为加法运算的逆运算,加法运算是让时钟向右旋转,也就是顺时针旋转,那么它的逆运算减法运算就应该是时钟向左旋转,也就是逆时针旋转。假设时钟无法逆时针旋转,很容易想到减法运算就相当于(被减数+减数)mod12=需要回到的位置。例如,假设时钟当前位置处于7的位置,那么如何让时钟回到0位置呢,也就会被转化为( 7 + ? ) mod 12 = 0,很容易算出 ? = 5。如下图所示,是( X + Y )mod 12 = 0 的X和Y的结合。

3.乘法

  乘法就是加法多次重复的过程,计算加法的时候我们使用的是mod运算,类似于加法的计算方法,乘法计算的时候则需要计算(乘数×乘数)mod12=最终位置。例如,计算时钟运算7×4的结果,也就相当于计算( 7 × 4 ) mod 12 = 28 mod 12 = 4,于是可以得到最后的计算结果为4。

4.除法

  既然加法是减法的逆运算,我们也将除法看作是乘法的逆运算。例如,( 7 ×? ) mod 12 = 1,这个计算结果就比较难计算了,所以我们给出如下图所示的结果对应表,根据表格就可以进行查表得出结果。

  实数范围内,如果自然数a与自然数b相乘的结果是1,则说明a和b互为倒数,始终运算中,如果( 7 ×? ) mod 12 = 1把“mod12”遮起来的话,跟倒数十分类似。那么,在时钟运算中,0-11这12个数是否都存在这种意义上的倒数呢,具体结果如下,0比较特殊,所以先将他排除在外:
   1 x ? mod 12 → ? = 1
   2 x ? mod 12 → ? = 不存在
   3 x ? mod 12 → ? = 不存在
   4 x ? mod 12 → ? = 不存在
   5 x ? mod 12 → ? = 5
   6 x ? mod 12 → ? = 不存在
   7 x ? mod 12 → ? = 7
   8 x ? mod 12 → ? = 不存在
   9 x ? mod 12 → ? = 不存在
  10 x ? mod 12 → ? = 不存在
  11 x ? mod 12 → ? = 11
  如此可以得知1,5,7,11具有倒数,2,3,4,6,8,9,10不具有倒数,我们可以知道,具有倒数的这些数和12的最大公约数都是1,不具有倒数的这些数和12的最大公约数都不是1,因此,我们可以通过判断一个数跟12的最大公约数是否为1来判断它是否存在倒数。

5.乘方

  乘法也称指数运算,乘法是多次加法的总和,乘方也是乘法运算多次重复的结果,即74也就相当于“7 × 7 × 7 × 7”,
故有74 mod 12 = 7 × 7 × 7 × 7 mod 12
       = [( 7 × 7 mod 12 )× ( 7 × 7 mod 12 )] mod 12
       = [( 49 mod 12 ) × ( 49 mod 12 )] mod 12
       =( 1 × 1 ) mod 12
       = 1 mod 12
       = 1

6.对数

  对数也就是乘方的逆运算,时钟运算中的对数称为离散对数,例如7? mod 13 = 8呢?
  70 mod 13 = 0
  71 mod 13 = 7
  72 mod 13 = 10
  73 mod 13 = 5
  74 mod 13 = 9
  75 mod 13 = 11
  76 mod 13 = 12
  77 mod 13 = 6
  78 mod 13 = 3
  79 mod 13 = 8
  可知?=9,可是,现如今,当数字很大的时候,离散对数的计算依然相当困难。

四、RSA——公钥密码算法

1.RSA加密

  在RSA中,明文、密文和密钥都是数字,RSA的加密过程可以用下面的公式表示,即RSA的加密就是让其明文跟自己做E次乘法,再将其结果除以N的余数,也就是说只要知道E和N这两个数,就可以完成加密操作,所以E和N是RSA加密的密钥,也就是公钥。E和N两个数共同组成的RSA的公钥,他们并不是密钥对,所以一般会写成“公钥是(E,N)”或者“公钥是{E,N}”。

密文 = 明文E mod N (RSA解密)

2.RSA解密

  RSA的解密过程也可以用公式表示如下,即RSA的解密就是让其密文跟自己做D次乘法,再将其结果除以N的余数,也就是说只有知道D和N这两个数,就可以完成解密操作,D和N的组合是RSA解密的密钥,也就是私钥。

明文 = 密文D mod N (RSA加密)

3.生成密钥对

  由于E和N是加密时需要用到的密钥,D和N是解密时需要用到的密钥,所以求E、D和N这三个数就是生成密钥对
(1)求N
  首先,准备两个很大的质数p和q,p和q的大小适中,如果太小会很容易破译,如果太大计算时间又会太长。假设p和q都是512比特大小的数,需要先使用伪随机数生成器生成一个512比特的数,然后需要判断这个数是不是质数,如果不是,就需要用伪随机数生成器生成另一个数。判断一个数是否为质数的方法包括马测试和米勒·拉宾测试等。
  准备好这两个很大的质数p和q之后,将这两个数相乘的结果就是N,用公式表示就是:N = p × q ( p 、 q 为质数)
(2)求L
  L是仅在求解生成密钥对的过程中用到的数,它是p - 1和q - 1的最小公倍数,表示为:L = lcm(p-1,q-1) (L是p-1和q-1的最小公倍数)
(3)求E
  E是一个比1大比L小的数,此外E和L的最大公约数必须是1,E和L的关系如下:
  1 < E < L,
  gcd(E,L) = 1 E和L的最大公约数为1(E和L互质)

  要找出这样的数E,还是需要用到伪随机数生成器。先利用伪随机数生成器,生成一个大于1小于L的随机数,然后再判断E和L的最大公约数是否为1,如果E和L的最大公约数不为1的话,就需要伪随机数生成器再生成一个新的随机数。求最大公约数可以使用欧几里得的辗转相除法。
(4)求D
  数D是由数E计算得到的,D、E、L之间需要具备下列关系:
  1<D<L;
  E × D mod L = 1

  要保证D满足这样的条件就需要满足E和L的最大公约数为1,也就是(3)中提到的对E的条件,E × D mod L = 1保证了密文进行解密后可以得到原来的明文。

4.对RSA的攻击

(1)通过密文求明文
  RSA的加密过程为:密文 = 明文E mod N (RSA解密)
  如果RSA的加密过程为:密文 = 明文E mod N ,那么通过密文求出明文的难度并不大,只是一个简单的求对数问题,可是加上mod N,就变成了很困难的离散对数问题,目前是没有高效计算方法的。
(2)通过暴力找出D
  要是知道D就能通过公式对密文进行解密了,所以不妨用暴力破解的方法找出D。暴力破解的难度会随着D的长度增加而增大,现实运用中,p和q的长度一般为1024比特以上,N的长度为2048比特以上,E和D的长度和N差不多,因此暴力破解也是非常困难的。
(3)通过E和N找出D
  我们已知E × D mod L = 1,好像可以从中破解出D,可是这里出现了L,已知L = lcm(p-1,q-1),因此还需要知道p和q,而密码破译者不可能知道p和q,所以这种方法也是无法破解的。
①对N进行质因数分解攻击
  一旦发现了对大整数进行质因数分解的高效算法,RSA 就能够被破译
②通过推测p和q进行攻击
③其他攻击
(4)中间人攻击
  所谓中间人攻击,就是主动攻击者Mallory混入发送者和接收者的中间对发送者伪装成接收者,对接收者伪装成发送者的攻击方式,在这里,Mallory就是“中间人”。假设,发送者Alice 准备向接收者Bob发送一封邮件,为了解决密钥配送问题,他们使用了公钥密码。Mallory位于通信路径中,我们假设他能够任意窃听或篡改邮件的内容,也可以拦截邮件使对方无法接收到。
(5)选择密文攻击

六、小测验

1.密钥分配中心的处理

  当Alice 发出希望与Bob进行通信的请求时,密钥分配中心会生成一个全新的会话密钥,并将其加密后发送给Alice。
  为什么密钥分配中心不直接将Bob的密钥用 Alice的密钥加密之后发送给Alice 呢?
我的回答:Alice作为本次加密通信的对象,但不是Bob每一次加密通信的对象都是Alice,如果密钥分配中心直接将Bob的密钥发送给Alice,那么Bob从此之后的所有加密通信对Alice来说都是无效加密,此时的Alice就有可能变成窃听者。

2.两个密码算法

  听了密钥配送问题的内容,Alice进行了如下思考。
  密钥配送问题的本质在于,将密钥发送给接收者时不能被窃听,也就是说直接发送密钥是行不通的。那这样行不行呢?首先用AES对消息进行加密,然后用三重DES对加密消息所使用的AES 密钥也进行加密,然后再发送给接收者。由于AES 密钥已经通过三重DES进行了加密,因此就不怕被窃听了吧?
  Alice犯了怎样的错误呢?
我的回答:这样确实解决了密钥会被窃听的问题,可是,使用三重DES对密钥进行加密后发给接收者,并没有给接收者发送解开三重DES的密钥,窃听者虽然不能解密三重DES,可接收者也无法解密,这样并没有解决问题,只是将一个问题变成了另一个问题。

3.乘方的mod

求下列计算结果:716 mod 12 =
我的回答: 716 mod 12 = [(74 mod 12) × (74 mod 12) × (74 mod 12) × (74 mod 12) ] mod 12
∴74 mod 12 = (72 mod 12)×(72 mod 12)
      =1
∴716 mod 12 =1 mod 12 = 1

4.公钥密码的基础知识

下列说法中,请在正确的旁边画O,错误的旁边画×。

(1)用公钥密码加密时需要接收者的公钥。
(2)要对用公钥密码加密的密文进行解密,需要公钥密码的私钥。
(3)公钥密码的私钥需要和加密后的消息一起被发送给接收者。
(4)一般来说,对称密码的速度比公钥密码要快。
(5)如果能够发现一种快速进行质因数分解的算法,就能够快速破译RSA。

我的回答:(1)O;(2)O;(3)×;(4)O;(5)O。
(3)公钥密码中,加密时需要用到的公钥需要接收者发给发送者,私钥由接收者自行保管,不需要发送,公钥密码解决了密钥配送问题。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值