文章目录

  • 密码学相关概念
  • 对称加密算法
  • 非对称加密算法
  • 对称加密与非对称加密比较
  • Diffie-Hellman密钥交换
  • Diffie-Hellman密钥交换的步骤如下:
  • 简单场景&简单的密钥协商
  • DH算法的一个例子
  • PKI体系
  • PKI体系组成
  • CA中心
  • 数字证书认证技术原理
  • 常见证书类型
  • 数据安全传输案例


密码学相关概念

明文(plain text):发送人、接受人和任何访问消息的人都能理解的消息。
密文(cipher text):明文消息经过某种编码后,得到密文消息。
加密(encryption):将明文消息变成密文消息。
解密(decryption):将密文消息变成明文消息。
算法:取一个输入文本,产生一个输出文本。
加密算法:发送方进行加密的算法。
解密算法:接收方进行解密的算法。
密钥(key):只有发送方和接收方掌握的消息
对称密钥加密(Symmetric Key Cryptography):加密与解密使用相同密钥。
非对称密钥加密(Asymmetric Key Cryptography):加密与解密使用不同密钥,分为公钥和私钥

对称加密算法

在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的,加密和解密都是使用同一个密钥。
通信双方采用相同的密钥来加解密会话内容,即一段待加密内容,经过同一个密钥的两次对称加密后,与原来的结果一样。

举例说明:

根据异或性质: 		
			(A ⊕ B) ⊕ B = A
得到如下加密方法,其中C为密文,P为明文,K是双方约定的常量,
			C  = P ⊕ K
对应的解密方法则为:
			P = C ⊕ K
这就是一种简单的对称密钥算法的过程,其中异或操作是对称加密、解密算法,K则是密钥。

非对称加密算法

非对称加解密算法的密钥是成对出现的,公钥加密过的密文只有对应的私钥能解密;私钥签名过的密文可以通过对应的公钥验签。原则上私钥是不能在网络中传递的。
双方通信时,首先要将密钥对中的公钥传给对方,这个密钥可以在不安全的信道中传输;传输数据时,先使用自己持有的密钥做加密,对方只能用自己传输过去的密钥解密。

举例说明:

有没有啥加密算法加密后密文比较短的_加密解密

其中C表示密文,P表示明文,x是公钥,y是私钥,
并假设 xy= 1,则有下加解密方法

加密方法为:C=P^x
解密方法为:P=C^y=P^xy=P^1

对称加密与非对称加密比较

对称加密:加密速度快,缺点为:密钥分发问题
非对称加密:密钥安全性好,缺点为:加解密对速度敏感

Diffie-Hellman密钥交换

Diffie-Hellman密钥交换的步骤如下:

有没有啥加密算法加密后密文比较短的_密码学_02


Alice 向 Bob 发送两个质数 P 和 G

P 必须是一个非常大的质数,而 G 则是一个和 P 相关的数,称为 生成元 (generator)。G 可以是一个较小的数字。

Alice 生成一个随机数 A

A 是一个 1 ~ P-2 之间的整数。这个数是一个只有 Alice 知道的秘密数字。

Bob 生成一个随机数 B

B 也是一个 1 ~ P-2 之间的整数。这个数是一个只有 Bob 才知道的秘密数字。

Alice 将 G^A mod P 计算结果的数发送给 Bob

Bob 将 G^B mod P 计算结果的数发送给 Alice

Alice 用 Bob 发过来的数计算 A 次方并求 mod P

这个数就是共享密钥。Alice 计算的密钥 = (G^B mod P)^A mod P = G^(A*B) mod P

Bob 用 Alice 发过来的数计算 B 次方并求 mod P

Bob 计算的密钥 = (G^A mod P)^B mod P = G^(A*B) mod P = Alice 计算的密钥。可见两方计算的密钥是相等的。

关于第1步提到的生成元是什么呢?先来看一张表,假设 P = 13:

有没有啥加密算法加密后密文比较短的_有没有啥加密算法加密后密文比较短的_03


其中,2、6、7、11都是13的生成元。这几个数有什么性质呢?从上表可以发现,这几个数的乘方结果中都出现了1~12的全部整数。也就是 说,P 的生成元的乘方结果与 1 ~ P-1 中的数字是一一对应的。正是因为具有这样一一对应的关系,Alice 才能够从 1 ~ P-2 的范围中随机选择一个数字(之所以不能选择 P-1,是因为 G^(P-1) mod P 的值一定是等于1的)。

最后,需要清楚,针对Diffie-Hellman密钥交换是可以发动中间人攻击的。而为了防止中间人攻击,可以使用数字签名、证书等方法来应对。

简单场景&简单的密钥协商

先从一个应用场景说起:

Alice 和Bob想要在一个不安全的信道共享一个密钥,该密钥可被用来进行后续的其他的操作,并且仅被Alice和Bob所知,第三方无法得知。
一个简单的方法就是,现在全世界都是知道一个值 P=100。Alice生成随机值5,然后乘上P,接着发送Pa = 500给Bob;通样Bob生成随机值6,然后乘上P,接着发送Pb = 600给Alice。

这样,Alice 有 100,5 ,600,Bob有100,6,500。

Alice计算: 随机值5(自己私钥) * 600(对端的公钥) = 3000 等式1
Bob计算 : 随机值6(自己私钥) * 500(对端的公钥) = 3000 等式2

这样 Alice就和Bob共享了一个值3000,还有谁知道3000这个值呢?我们知道Alice明文的将500发送到不安全信道,Bob明文的将600发送到不安全信道,这也就意味着第三方仅仅知道500 和 600,想要计算获得共享密钥,第三方要么获取到Alice的随机值然后拿它乘上600,要么获取到Bob的随机值然后拿它乘上500,这样才能获取到Alice和Bob的共享密钥。

问题来了,如何获取到Alice的随机值呢?

第三方知道,Alice发送的500是由P乘上Alice的随机值得到的,所以问题变成了求方程 x*100 = 500的解。一眼就能看出来,Alice的随机值是5。

上述方法很容易被破解的原因是P太简单了。P值再复杂点怎么样?

例如P = 0x123456781234567812345678
Pa = 0xAD77D73E0BFC0E3E0BFC0E3D5E84370
Pb = 0x4EF81E05A6A0F385A6A0F38557A8D58
显然,你不能一眼就求出方程 x*P = Pa 的解

其实 Alice的随机数为 0x98765432, Bob的随机数为0x45681265。

但是这一切对于计算机来说还是太简单了。例如OpenSSL、Mbedtls等众多的开源库都提供了大数运算的API,计算Pa/P可能就几毫秒甚至几微秒的事情。

所以怎么要让中间人难以从Pa或者Pb中分解得到Alice或Bob的随机数,而Alice和Bob又能轻松的通过P和随机数计算得到Pa和Pb,就成了设计这个算法的关键。从上面的例子可以看出,简单的乘法运算是不行的。

一般来说上述所说的全世界都知道的值P称之为公钥,为Alice和Bob的随机数称之为私钥。

DH算法的一个例子

这里举例一个DH算法的例子。

例1:

设有这么一个二元组 (q, p) = (3, 7)

我们定义Alice和Bob这么一个运算:

(1)Alice 选择一个范围在[1, p-1]的随机数,为da= 5

(2)Alice 计算Pa = q^da mod p = 3^5 mod 7 = 5

(3)Bob选择一个范围在[1, p-1]的随机数,为db = 6

(4)Bob计算Pb = q^db mod p = 3^6 mod 7 = 1

(5)Alice和Bob交换Pa和Pb

(6)Alice计算共享密钥S = Pb ^da mod p = 1^5 mod 7 = 1

(7)Bob计算共享密钥S = Pa ^db mod p = 5^6 m 7 = 1

至此,Alice和Bob能够共享一个密钥为1。中间人由于只得到了Pa=5和Pb=1,如果也想要得到S,要么获取da然后执行步骤6中的等式计算得到结果、要么获取db然后执行步骤7中的等式得到结果。而要知道da或者db,需要计算

其实该算法的原理和上一部分中简单乘法及其类似,只是获取da或者db不是简单的方程式了,而是涉及到对数运算。对数运算被认为是“难”的,这个难建立在目前为止没有找到一个快速计算对数的算法,数学上没有证明这个算法是否存在。

看到这肯定有一个问题,随便一个二元组(q, p)都可以参与运算吗?显然不行。

我们来看看如果随便一个(q, p)参与运算,会出现什么情况。

例2:

假设(q, p) = (7,15),我们让Alice和Bob再来协商一遍

(1)Alice 选择一个范围在[1, p-1]的随机数,为da= 3

(2)Alice 计算Pa = q^da mod p =7^3 mod 15 = 13

(3)Bob选择一个范围在[1, p-1]的随机数,为db = 2

(4)Bob计算Pb = q^db mod p = 7^2 mod 15 = 4

(5)Alice和Bob交换Pa和Pb

(6)Alice计算共享密钥S = Pb ^da mod p = 4^3 mod 15 = 4

(7)Bob计算共享密钥S = Pa ^db mod p = 13^2 mod 15 = 4

看起来还是协商成功了,那问题在哪?

7^x mod 15:

7^1 mod 15 = 7

7^2 mod 15 = 4

7^3 mod 15 = 13

7^4 mod 15 = 1

7^5 mod 15 = 7

7^6 mod 15 = 4

7^7 mod 15 = 13

7^7 mod 15 = 1

看到规律了吗?7^x mod 15的结果一共才4种,并且周期循环。

这也就意味着中间人获取到了Pb = 4,中间人不一定需要知道Alice原始的随机值(私钥)是什么,只要在[1 , 14]中随便选择一个满足7^x mod 15 = 13的值进行计算S = 4^7 mod 15 = 4^11 mod 15 = 4 都能正确计算共享密钥。换句话说,中间人不需要暴力遍历[1 , 14]中的所有数就能计算共享密钥。

所以我们选择(b, p)的原则就是,G = b^x mod p,

当x遍历[1, p -1]时,G也遍历了一遍[1, p -1],这样中间人即使暴力破解,在P很大的时候,暴力破解是非常难的。

PKI体系

PKI(公开密钥体系,Public Key Infrastructure)是一种遵循标准的利用非对称加密技术为电子商务的开展提供一套安全基础平台的技术和规范。

简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。用户可利用PKI平台提供的服务进行安全的电子交易、通信和互联网上的各种活动。

PKI 技术采用证书管理公钥,通过第三方的可信任机构——CA认证中心把用户的公钥和用户的其他标识信息捆绑在一起放在用户证书中,在互联网上验证用户的身份。

目前,通用的办法是采用建立在PKI基础之上的数字证书,通过把要传输的数字信息进行加密和签名,保证信息传输的机密性、真实性、完整性和不可否认性,从而保证信息的安全传输

PKI体系组成

PKI是创建、颁发、管理、注销公钥证书所涉及到的所有软件、硬件的集合体。其核心元素是数字证书,核心执行者是CA认证机构。

CA中心

CA中心,即证书授权中心(Certificate Authority ),或称证书授权机构,作为电子商务交易中受信任的第三方。

CA中心的作用:签发证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书,以及对证书和密钥进行管理。

CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公钥。

CA中心的数字签名使得攻击者不能伪造和篡改证书。

数字证书认证技术原理

数字证书:一个经证书授权中心数字签名的包含公开密钥拥有者信息和公开密钥的文件

数字证书是一般包含:

  • 用户身份信息
  • 用户公钥信息
  • 身份验证机构数字签名的数据

从证书用途来看,数字证书可分为签名证书和加密证书。

签名证书:主要用于对用户信息进行签名,以保证信息的真实性和不可否认性。

加密证书:主要用于对用户传送的信息进行加密,以保证信息的机密性和完整性。

常见证书类型

数字证书
根证书
用户证书
设备证书

数据安全传输案例

有没有啥加密算法加密后密文比较短的_密码学_04