diff --git a/加密/1 公钥秘钥加密原理.md b/加密/1 公钥秘钥加密原理.md index bf9ce729..d72767bc 100644 --- a/加密/1 公钥秘钥加密原理.md +++ b/加密/1 公钥秘钥加密原理.md @@ -26,14 +26,16 @@ ### 签名与签名验证概念 * 摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。 -* 签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。(看最下面的一部分就明白了) -* 签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。 +* 签名,首先使用文本摘要算法进行摘要,然后使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。 +* 签名验证,数据接收端,拿到传输文本,拿自己持有的公钥对签名进行解密,得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。 + * 防止文本被替代,是发送者本人发送的数据(私钥签名) + * 防止文本被篡改,没有被第三方进行修改(摘要指纹) ### 秘钥算法目标 * 加密,保证数据的隐私性。肯定是不希望别人知道我的消息,所以只要我才能解密。所以得出,公钥负责加密,私钥负责解密。 -* 签名,保证数据的完整性。那肯定是不希望有人冒充我发消息,只有我才能发布这个签名, 所以得出,私钥负责签名,公钥负责验证。 +* 签名,保证数据的完整性。那肯定是不希望有人冒充我发消息,不希望消息被篡改,只有我才能发布这个签名, 所以得出,私钥负责签名,公钥负责验证,并使用消息摘要验证其准确性 ## 2 非对称加密RSA实现 @@ -57,7 +59,11 @@ ![](image/2021-06-15-22-28-36.png) -AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。下图给出了AES加解密的流程,从图中可以看出:1)解密算法的每一步分别对应加密算法的逆操作,2)加解密所有操作的顺序正好是相反的。正是由于这几点(再加上加密算法与解密算法每步的操作互逆)保证了算法的正确性。加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。 +AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。下图给出了AES加解密的流程,从图中可以看出: +1. 解密算法的每一步分别对应加密算法的逆操作. +2. 加解密所有操作的顺序正好是相反的。 + +正是由于这几点(再加上加密算法与解密算法每步的操作互逆)保证了算法的正确性。加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。 ## 4 非对称加密RSA+对称加密AES ![](image/2021-06-15-22-28-00.png) @@ -91,7 +97,7 @@ AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(Shift ### 概念 -为了保证公钥的可信性,提供第三方的认证。保证公钥没有被篡改。相当于由第三方可信机构发起的一次摘要----签名----签名验证过程。主要确认了目标公钥的证书的可信性。 +为了保证公钥的可信性,提供第三方的认证。保证公钥没有被篡改。相当于由第三方可信机构发起的一次消息摘要算法----签名----签名验证过程。主要确认了目标公钥的证书的可信性。 一个证书包含以下内容: * 可信的证书的发布机构 diff --git a/加密/2 TSL加密协议.md b/加密/2 TLS加密协议.md similarity index 82% rename from 加密/2 TSL加密协议.md rename to 加密/2 TLS加密协议.md index e1d9a223..b59e1365 100644 --- a/加密/2 TSL加密协议.md +++ b/加密/2 TLS加密协议.md @@ -3,20 +3,28 @@ ### 协议简介 SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。 - -SSL(Secure Socket Layer)安全套接层,是1994年由Netscape公司设计的一套协议,并与1995年发布了3.0版本。 - -TLS(Transport Layer Security)传输层安全是IETF在SSL3.0基础上设计的协议,实际上相当于SSL的后续版本。 +* SSL(Secure Socket Layer)安全套接层,是1994年由Netscape公司设计的一套协议,并与1995年发布了3.0版本。 +* TLS(Transport Layer Security)传输层安全是IETF在SSL3.0基础上设计的协议,实际上相当于SSL的后续版本。 ### 加密算法 +包括秘钥生成、加密、解密三个主要过程。 * 非对称加密算法:RSA,DSA/DSS,Diffie–Hellman * 对称加密算法:AES,RC4,3DES -* HASH算法:MD5,SHA1,SHA256 -* Record协议中的MAC(Message Authentication Code)算法 -* premaster secret、master secret生成算法 +* 秘钥生成算法:premaster secret、master secret + +### 消息摘要算法 +**消息摘要算法**即**HASH算法**,**消息摘要**(Message Digest)简要地描述了一分较长的信息或文件,它可以被看做一分长文件的**数字指纹**。主要分为以下三类 + +* MD(Message Digest):消息摘要。生成的消息摘要都是128位的。包括:MD2,MD4,MD5 +* SHA(Secure Hash Algorithm):安全散列。固定长度摘要信息。包括:SHA-1,SHA-2(SHA-224,SHA-256,SHA-384,SHA-512) +* MAC(Message Authentication Code):消息认证码。HMAC(keyed-Hash Message Authentication Code):含有密钥的散列函数算法,包含了MD和SHA两个系列的消息摘要算法,HMAC只是在原有的MD和SHA算法的基础上添加了密钥。HMAC运算利用hash算法,以一个消息M和一个密钥K作为输入,生成一个定长的消息摘要作为输出。HMAC算法利用已有的Hash函数,关键问题是如何使用密钥。能够通过MD、SHA确保数据的完整性,通过秘钥确定数据的身份认证(相当于用私钥签名) + * MD 系列算法有 HmacMD2、HmacMD4 和 HmacMD5 三种算法; + * SHA 系列算法有 HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384 和 HmacSHA512 五种算法。 + + ### 协议概念 @@ -77,14 +85,14 @@ TLS主要分为两层 * Application data protocol应用数据协议负责将TLS承载的应用数据传达给通信对象的协议。 -## 4 握手协议 +## 4 握手协议——典型过程 握手协议是TLS协议中非常重要的协议,通过客户端和服务器端的交互,和共享一些必要信息,从而生成共享密钥和交互证书。 ![](image/2021-06-15-23-09-52.png) -![](image/2021-06-15-20-41-00.png) -![](image/2021-06-16-22-33-20.png) + + -### 4.1 客户端请求SSL内容 +### 步骤1 客户端请求SSL内容 * client hello客户端向服务器端发送一个client hello的消息,包含下面内容: ``` @@ -96,7 +104,7 @@ TLS主要分为两层 6. 可用的压缩方式清单。 ``` -### 4.2 服务器响应SSL内容 +### 步骤2 服务器响应SSL内容 * server hello服务器端收到client hello消息后,会向客户端返回一个server hello消息,包含如下内容: @@ -116,7 +124,7 @@ TLS主要分为两层 * 可选步骤:CertificateRequest如果是在一个受限访问的环境,比如fabric中,服务器端也需要向客户端索要证书。如果并不需要客户端认证,则不需要此步骤。 * server hello done 服务器端发送server hello done的消息告诉客户端自己的消息结束了。 -### 4.3 客户端交换秘钥证书 +### 步骤3 客户端交换秘钥证书 * 可选步骤:Certificate。客户端发送客户端证书给服务器。 @@ -128,15 +136,15 @@ TLS主要分为两层 * finished(握手协议结束)客户端告诉服务器端握手协议结束了。 -### 4.4 服务器交换秘钥证书 +### 步骤4 服务器交换秘钥证书 * ChangeCipherSpec。服务器端告诉客户端自己要切换密码了。 * finished(握手协议结束)服务器端告诉客户端,握手协议结束了。 -### 握手协议——RSA握手协议 +## 4.1 握手协议——RSA握手协议 ![](image/2021-06-17-11-43-17.png) -### 握手协议——DH握手协议 +## 4.2 握手协议——DH握手协议 ![](image/2021-06-17-11-46-08.png) @@ -150,9 +158,6 @@ TLS记录协议主要负责消息的压缩,加密和认证。当TLS完成握 * 在接收端:将数据(Record)解密,验证MAC,解压并重组得到密文之后会附加类型,版本和长度等其他信息,最终组成最后的报文数据。 - - - ## 6 master secret密码计算 1. [明文] 客户端发送随机数client_random 2. [明文] 服务器返回随机数server_random @@ -171,7 +176,37 @@ session_hash = Hash(handshake_messages) master_secret = PRF(pre_master_secret, "extended master secret",session_hash)[0..47]; ``` -### 三重握手攻击 + +## 7 Cipher suite密码套件 + +### 典型构成 +* key establishment (typically a Diffie-Hellman variant or RSA)密钥协商算法(通常是 Diffie-Hellman 变体或 RSA等非对称加密算法) +* authentication (the certificate type)身份验证算法(证书类型RSA、DSA等签名算法) +* confidentiality (a symmetric cipher)机密性算法(对称加密算法) +* integrity (a hash function)完整性算法(消息摘要函数) + +### “AES128-SHA” + +* RSA for key establishment (implied) +* RSA for authentication (implied) +* 128-bit Advanced Encryption Standard in Cipher Block Chaining (CBC) mode for confidentiality +* 160-bit Secure Hashing Algorithm (SHA) for integrity + +### “ECDHE-ECDSA-AES256-GCM-SHA384” + +* Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) key exchange for key establishment 椭圆曲线 Diffie-Hellman Ephemeral ( ECDHE ) 密钥交换 +* Elliptic Curve Digital Signature Algorithms (ECDSA) for authentication 身份验证的椭圆曲线数字签名算法 ( ECDSA ) +* 256-bit Advanced Encryption Standard in Galois/Counter mode (GCM) for confidentiality +* 384-bit Secure Hashing Algorithm for integrity + + +## 8 中间人攻击 + + +### 中间人攻击模型 + +![](image/2021-06-21-00-59-31.png) + 三重握手(Triple Handshake) (CVE-2014-1295):攻击者(A)分别与客户端(C)和服务器(S)握手,协商出同一个主密钥;之后令客户端(C)和服务器(S)之间重新协商(renegotiation)或继续(resumption)会话来握手。可攻破重新协商,TLS Exporter RFC5705和"tls-unique" RFC5929。 ``` @@ -198,26 +233,3 @@ S向A发送“完成”。A计算其“完成” 与C的连接,并将其发送给C。 ``` 通过以上方式,如果使用无“Extended Master Secret”扩展字段的计算方式将发现,从C->A和从A->S之间使用的会话密钥是一样的,这种叫做未知密钥共享(unkown key-share(UKS))攻击。当使用扩展主密钥的计算方式时,因为有session_hash,计算了所有协商消息的hash,如果中间攻击者A对协商消息进行改动,则客户端和服务端计算的hash值则不一样,最后计算出的主密钥也会不同。 - - -## 7 Cipher suite密码套件 - -### 典型构成 -* key establishment (typically a Diffie-Hellman variant or RSA)密钥建立(通常是 Diffie-Hellman 变体或 RSA) -* authentication (the certificate type)身份验证(证书类型) -* confidentiality (a symmetric cipher)机密性(对称密码) -* integrity (a hash function)完整性(散列函数) - -### “AES128-SHA” - -* RSA for key establishment (implied) -* RSA for authentication (implied) -* 128-bit Advanced Encryption Standard in Cipher Block Chaining (CBC) mode for confidentiality -* 160-bit Secure Hashing Algorithm (SHA) for integrity - -### “ECDHE-ECDSA-AES256-GCM-SHA384” - -* Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) key exchange for key establishment 椭圆曲线 Diffie-Hellman Ephemeral ( ECDHE ) 密钥交换 -* Elliptic Curve Digital Signature Algorithms (ECDSA) for authentication 身份验证的椭圆曲线数字签名算法 ( ECDSA ) -* 256-bit Advanced Encryption Standard in Galois/Counter mode (GCM) for confidentiality -* 384-bit Secure Hashing Algorithm for integrity \ No newline at end of file diff --git a/加密/3 TSL协议变迁.md b/加密/3 TLS协议变迁.md similarity index 100% rename from 加密/3 TSL协议变迁.md rename to 加密/3 TLS协议变迁.md diff --git a/加密/5 TLS实验.md b/加密/5 TLS实验.md index 3144a2e5..1732d963 100644 --- a/加密/5 TLS实验.md +++ b/加密/5 TLS实验.md @@ -1 +1,24 @@ ![](image/2021-06-17-14-34-10.png) + + +# TLS实验 + +> 主要包括两部分实验 +> * TLS协议数据内容 +> * TLS协议交互过程 + + +## TLS1.3数据内容 + + +## TLS1.3协议交互过程 + +### 原理 +握手是为了协商出一个client和server端都认可的一个对称秘钥,典型的秘钥协商算法有两种,RSA和ECDH,简明介绍下这两种算法会让你对这个过程更加清晰。 + + +## TLS1.3协议交互过程 + +### + +## TLS1.3协议交互过程 \ No newline at end of file diff --git a/加密/6 加密算法.md b/加密/6 加密算法.md index 40248cd2..e69de29b 100644 --- a/加密/6 加密算法.md +++ b/加密/6 加密算法.md @@ -1,6 +0,0 @@ - -* 非对称加密算法:RSA,DSA/DSS -* 对称加密算法:AES,RC4,3DES -* HASH算法:MD5,SHA1,SHA256 -* Record协议中的MAC(Message Authentication Code)算法 -* premaster secret、master secret生成算法 \ No newline at end of file diff --git a/加密/image/2021-06-21-00-59-31.png b/加密/image/2021-06-21-00-59-31.png new file mode 100644 index 00000000..388af222 Binary files /dev/null and b/加密/image/2021-06-21-00-59-31.png differ