精读《图解密码技术》——第十一章 密钥

一、密钥

1.什么是密钥

  在使用对称密码、公钥密码、消息认证码、数字签名的时候,都需要一个被称为密钥的巨大数字。可能出现的密钥的总数量被称为密钥空间,密钥空间越大,密钥破解起来就越困难,密钥空间的大小由密钥的长度所决定。密钥和明文是等价的。

2.各种不同的密钥

(1)对称密码的密钥与公钥密码的密钥
  在对称密码中,加密过程和解密过程使用的是同一个密钥,因此对称密码又称为共享密钥密码。在公钥密码中,加密和解密使用的是不同的密钥,用于加密的密钥称为公钥,用于解密的密钥称为私钥,私钥也称为秘密密钥。相对应的公钥和私钥称为密钥对。
(2)消息认证码的密钥与数字签名的密钥
  在消息认证码中,发送者和接收者使用共享的密钥来进行认证,消息认证码只有持有合法密钥的人才能计算出来。将消息认证码附加在通信内容的后面,就可以识别通信内容是否被篡改或伪装。在数字签名中,签名的生成和验证使用不同的密钥。只有持有私钥的本人才能够生成签名,但由于验证签名使用的是公钥,因此任何人都能够验证签名。
(3)用于确保机密性的密钥和用于认证的密钥
  对称密码和公钥密码的密钥都是用于确保机密性的密钥。消息认证码和数字签名所使用的密钥,则是用于认证的密钥
(4)会话密钥和主密钥
  当我们访问以https://开头的网页时,Web服务器和浏览器之间会进行基于SSL/TLS的加密通信。在这样的通信中所使用的密钥是仅限于本次通信的一次性密钥,下次通信时就不能使用了。像这样每次通信只能使用一次的密钥称为会话密钥。虽然每次通信都会更换会话密钥,但如果用来生成密钥的伪随机数生成器品质不好,窃听者就有可能预测出下次生成的会话密钥,这样就会产生通信内容被破译的风险。相对于每次通信都更换的会话密钥,一直被重复使用的密钥称为主密钥。
(5)用于加密内容的密钥与用于加密密钥的密钥

二、对密钥的管理

1.生成密钥

(1)用随机数生成密钥
  生成密钥的最好方法就是使用随机数,因为密钥需要具备不易被他人推测的性质,我们一般使用伪随机数生成器生成随机数。
(2)使用口令生成密钥
  我们很少直接用口令来作为密钥使用,一般都是将口令输入单向散列函数,然后将得到的散列值作为密钥使用。在使用口令生成密钥时,为了防止字典攻击,需要在口令上面附加一串称为盐的随机数,然后再将其输入单向散列函数。这种方法称为“基于口令的密码”

2.配送密钥

  在使用对称密码时,如何在发送者和接收者之间共享密钥是一个重要的问题,即密钥配送问题。要解决密钥配送问题,可以采用事先共享密钥、使用密钥分配中心、使用公钥密码等方法。除上述方法之外,还有一种解决密钥配送问题的方法称为Diffie-Hellman密钥交换。

3.更新密钥

  有一种提高通信机密性的技术被称为密钥更新,这种方法就是在使用共享密钥进行通信的过程中,定期改变密钥。当然,发送者和接收者必须同时用同样的方法来改变密钥才行。在更新密钥时,发送者和接收者使用单向散列函数计算当前密钥的散列值,并将这个散列值用作新的密钥。简单说,就是用当前密钥的散列值作为下一个密钥。

4.保存密钥

  由于会话密钥在通信过程中仅限使用一次,因此我们不需要保存这种密钥。然而,当密钥需要重复使用时,就必须要考虑保存密钥的问题。保存密钥一方面是由于人类无法记住具有具体长度的密钥,另一方面是如果将密钥随意保存,那么就会失去加密的意义,因为这样被窃听的可能是十分大的,所以我们一般考虑将密钥加密后保存。

三、Diffie-Hellman密钥交换

1.什么是Diffie-Hellman密钥交换

  Diffie-Hellman密钥交换是一种算法,通信双方仅通过交换一些公开的信息就能生成密钥。它虽然叫密钥交换,却没有真正地交换密钥,交换的是通过计算机生成的相同的共享密钥。

2.Diffie-Hellman密钥交换的步骤

  假设Alice和Bob需要共享一个对称密码的密钥,而双方之间的通信线路已经被Eve窃听了,这时我们使用Diffie-Hellman密钥交换,生成共享密钥,如下图所示。

(1)Alice向Bob发送两个指质数P和G。P是一个非常大的质数,G是一个和P相关的数,称为生成元。P和G不需要保密,被窃听也没有问题,可以由Alice和Bob中的任意一方生成。
(2)Alice生成一个取值范围在1~P-2之间的随机整数A,且这个秘密数字只有他本人知道。
(3)Bob生成一个取值范围在1~P-2之间的随机整数B,且这个秘密数字只有他本人知道。
(4)Alice将GA mod P这个数发给Bob。
(5)Bob将GB mod P这个数发给Alice。
(6)Alice用Bob发过来的数计算A次方并求mod P,Alice计算的密钥就是(GB mod P)A mod P=GA×B mod P
(7)Bob用Alice发过来的数计算B次方并求mod P,Bob计算的密钥就是(GA mod P)B mod P=GA×B mod P

四、基于口令的密码

1.什么是基于口令的密码

  顾名思义,基于口令的密码( PBE )就是一种根据口令生成密钥并用该密钥进行加密的方法。其中加密和解密使用同一个密钥。

2.基于口令的密码的加密过程

(1)生成用来加密的密钥KEK
  首先,伪随机数生成器会生成一个被称为盐的随机数。将盐和Alice输入的口令一起输人单向散列函数,得到的散列值就是用来加密密钥的密钥(KEK )。
(2)生成会话密钥并加密
  接下来,我们使用伪随机数生成器生成会话密钥。会话密钥是用来加密消息的密钥(CEK )。会话密钥需要用刚才步骤(1)中生成的加密的密钥KEK进行加密,并和盐一起保存在安全的地方。会话密钥加密之后,加密的密钥就会被丢弃,因为加密的密钥KEK没有必要保存下来,只要通过盐和口令就可以重建加密的密钥KEK。
(3)加密消息
  最后,我们用步骤(2)中生成的会话密钥对消息进行加密。基于口令的密码PBE加密后所产生的输出包括下列3种:盐、用KEK加密的会话密钥用会话密钥加密的消息和其中“盐”和“用KEK加密的会话密钥”需要保存在安全的地方。

3.基于口令的的密码的解密过程

(1)重建KEK
  首先我们将之前保存下来的盐,和Alice输入的口令一起输人单向散列函数。这个计算过程和生成KEK时的计算过程是一样的,因此所得到的散列值就是KEK。
(2)解密会话密钥
  然后,我们获取之前保存下来的“用KEK加密的会话密钥”,用步骤(1)中恢复的KEK进行解密。这一步我们可以得到会话密钥。
(3)解密消息
  最后,我们用步骤(2)中重建的会话密钥对加密的消息进行解密。

3.如何生成安全的口令

(1)使用只有自己才能知道的信息
  ①不要使用对自己重要的事物的名字
  ②不要使用关于自己的信息
  ③不要使用别人见过的信息
(2)将多个不同的口令分开使用
(3)有效利用笔记
(4)理解口令的局限性
(5)使用口令生成和管理工具

小测试

1.学习了Diffie-Hellman 密钥交换的知识后,Alice产生了下面的疑问。

如果主动攻击者Mallory混入进行 Diffie-Hellman密钥交换的两个人中间,能否进行伪装攻击(中间人攻击)呢?
请你解答Alice的疑问吧。

我的回答:如果主动攻击者Mallory混入进行 Diffie-Hellman密钥交换的两个人中间,可以进行伪装攻击(中间人攻击)。

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

(1)由于密钥只是随机的比特序列,因此被别人知道了也没关系。
(2)私钥是可以公开的。
(3)在 Diffie-Hellman密钥交换中,双方可以通过交换一些可以公开的信息生成出共享密钥。
(4)用来加密重要文件的口令,可以使用“妈妈的娘家姓”这种不容易忘记的信息。

我的回答:(1)×;(2)×;(3)○;(4)×;
(1)密钥是随机的比特序列,但是由于明文信息的特殊性,密钥需要妥善保管。
(2)私钥只有自己知道,不能告诉任何人。
(4)用来加密重要文件的口令要使用只有自己才能知道的信息,不要使用别人可能见过的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值