从头开始HTTPS-两类密码体制

从头开始HTTPS-两类密码体制

名词解释

明文:经过加密之前的信息,一般是人类可直接阅读的文字。本文公式中使用X表示明文。

密文:经过加密之后的信息,密文对原始信息进行了加密处理后变成了不可读的信息。不可读指无法还原出原来的信息。本文公式中,使用Y表示密文。

密钥:用来对明文进行加密。本文公式中,使用K表示。

E运算: 加密(encrypt)运算

D运算:解密(decrypt)运算

场景:

漕河泾程序员A对张江程序员B说: Hello,World!

本文将围绕该场景展开,介绍两类密码体制的概念以及主要过程。

1. 对称密钥密码体制

所谓对称密钥密码体制,即加密密钥与解密密钥是相同的密码体制。即明文经过密码加密后形成的密文,可使用相同的密码解密为加密之前的明文。使用公式表示如下

Y=EK(X)
X=DK(Y)
DK(Y)=DK(EK(X)) = X

假设A向B使用对称密钥密码体制发送消息,主要过程如下:

  1. A,B协商出使用英文这个密码Kab来对消息加密
  2. A使用英文对消息进行加密E,形成密文Y,即

Y=EKab(X)

  1. B收到密文后,对密文进行解密计算D,形成明文X,即

X=DKab(Y)

使用对称密钥密码体制进行加密的前提是通信双方均知道该密钥。在该场景中,由于A,B均知道英文这个密钥,因此,对于不知道该密钥的人来说,即便获得了该密文,也无从知晓A跟B说了什么。

2.公钥密码体制

公钥密码体制使用不同的加密密钥与解密密钥。即密文解密所需要的密钥,与加密所使用的密钥不同。
在公钥密码体制中,加密密钥PK(public key,即公钥)是公开的,而解密密钥SK(secret key,即私钥)是需要保密的。
假设A向B使用公钥密码体制发送消息,主要过程如下:

  1. 密钥对产生器产生接受者B的一对密钥,加密密钥PKb和解密密钥SKb。B将PKb公开,是A可以获得。
  2. 消息发送者A使用B的加密密钥PKb对消息进行加密得到要传输的密文Y,即

Y=EPKb(X)

  1. 消息接收者B使用解密密钥SKb对密文Y进行解密运算D,得到A发送过来的明文。即

X=DSKb(Y)

  • DPKb(Y)≠X。即使用B的加密密钥不能解密使用B的加密密钥加密的信息。
  • 虽然使用计算机可以很容易的产生密钥对SKb和PKb,但从已知的PKb推导出SKb是在计算上不可能的

应用案例

iMessage的端到端加密

从头开始HTTPS-两类密码体制_第1张图片
imessage-graphic.png

过程说明:

  1. user1与user2在启用iMessage时,生成一对解密密钥和加密密钥,解密密钥在本地保存,加密密钥上传至苹果服务器。

  2. user1向user2发送消息时,先向苹果服务器请求user2的加密密钥。获得后,将消息使用user2的加密密钥加密后,将密文发送给苹果服务器。

  3. 苹果服务器将消息发送给user2。user2收到苹果服务器发送过来的密文后,使用本地保存的自己的解密密钥解密消息,即可获取明文。

在程序员对话的场景中,A的音色即是公钥,只是,在此处并没有进行对消息本身的加密,而是,对消息进行签名,即让B确认,这句话确实是A说的。而B因为有对A音色的记忆,此处,对A的消息进行了鉴别

数字签名

为了证明书信或文件的真实性,需要发送者进行亲笔签名或盖章。同理,为了证明计算机网络中消息的发送者的真实性,需要使用数字签名。数字签名应至少具备以下三个特性:

  • 报文鉴别,即接收者能够核实消息发送者,也就是说接受者能确认该消息确实是消息中声称的发送者发送的。
  • 报文完整,即接收者能够核实接收到的消息是完整且未经过篡改的。
  • 不可否认,即发送者时候不能抵赖对消息的签名。
数字签名的实现

A使用自己的解密密钥SKa对报文X进行D运算。将密文传送给B。B使用A的加密密钥PKa对收到的密文进行E运算。还原出明文。

  • 由于加密密钥与解密密钥是成对出现的。根据其中一个并不能计算出另外一个。因此,当B使用PKa对密文进行解密后,该报文必然是A使用自己的SKa进行D运算而得出来的。实现了报文鉴别。
  • 如果密文Y在传送过程中被第三方篡改,因为第三方没有SKa。当B使用PKa对密文进行解密后,所获得的报文可以认为是不可读的。或者在传输过程中,丢是了报文的部分。当B使用PKa对密文进行解密后,所获得的报文可以认为是不可读的。这样就实现了报文完整性的验证。
  • 因为只要A掌握SKa。若A对曾发出的密文Y抵赖。则公正方很容易使用A掌握的SKa进行验证。这样就实现了不可否认。

上述过程虽然传输的是密文Y。但由于A的PKa是公开的,所以,并没有对传送报文内容保密。若要在签名的基础上进行加密。则可以使用在原来的过程中,增加在发送前使用接收者的加密密钥PKb进行D运算的步骤,来确保内容只有接收者B使用自己只有自己掌握的SKb来解密。

鉴别

报文鉴别

由于使用公钥密码体制进行加解密计算量较大,因此,对于很多不需要加密但需要签名的情况。使用消息摘要配合数字签名来实现报文鉴别。

报文鉴别的公式如下:

Y=(X,D(H(X)))

其中,
H(X)表示对原文进行H(报文摘要算法)运算。
D(H(X))表示使用发送者SK对报文摘要进行D运算。
报文发送时,将明文附加上明文摘要的数字签名一同发送。接受者收到报文后,对明文部分进行报文摘要运算,然后使用发送者的PK对数字签名部分进行解密,若得出的结果与自行计算的报文摘要相同,则表明对该报文鉴别成功。即报文可信。

报文摘要:
报文摘要算法是一种精心选择的单向散列函数。对一串长度不固定的内容,使用报文摘要算法计算后,能得出一串长度固定的值。而从摘要算法的结果,是不可能推算出摘要的内容的。常见的报文摘要算法有MD5,SHA,SHA-1.

实体鉴别

使用对称密钥传送鉴别实体身份的报文。过程如下:
消息发送者使用对称密钥算法将要发送的消息进行D运算,消息接受者使用相同的密钥将内容解密后进行实体验证。

使用该种方式容易引起重放攻击,重放攻击为第三方C截获消息发送者A发送给消息接收者B的消息。虽然C并不知道AB之间约定的密钥。但C可以简单的保存A发送给B的密文,然后发送给B。使B认为C就是A,从而将要发送给A的消息错误的传送给了C。

为了解决重放攻击,可以使用不重数。不重数是一个不重复使用的大随机数,即“一次一数”。在鉴别的过程中,不重数可以使B把重复的鉴别请求区分开。有不重数参与的实体鉴别过程如下:

  1. A将其身份以及一个不重数Ra使用明文发送给B.
  2. B将一个不重数Rb以及使用密钥加密后的Kab(Ra)发送给A.
  3. A将Rb使用Kab加密后返回给B.

中间人攻击

题外话

关于密钥是读作(mi4 yue4)还是(mi4 yao4)。在搜狗输入法中,读作yue4,但经查,大多认为,在密码学中,该读作(mi4 yao4)。

你可能感兴趣的:(从头开始HTTPS-两类密码体制)