IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> SSL/TLS握手过程 -> 正文阅读

[网络协议]SSL/TLS握手过程


SSL/TLS握手过程可以根据秘钥生成的方式不同分为RSA握手过程和DH握手过程,分别使用RSA非对称加密方法和DH秘钥交换算法生成客户端和服务端共享的秘钥。

基础知识

RSA 非对称加密算法的原理

欧拉函数

欧拉函数用来计算对于给定的正整数 n n n,在小于等于 n n n的元素之中有多少个元素与其互质。其解析式如下:
? ( p k ) = p k ? p k ? 1 \phi(p^k) = p^k - p^{k - 1} ?(pk)=pk?pk?1
如果 n n n为质数,则 ? ( n ) = n ? 1 \phi(n) = n - 1 ?(n)=n?1
如果 n n n可以分解为两个互质的整数 p p p q q q之积,则 ? ( n ) = ? ( p ) ? ( q ) \phi(n) = \phi(p)\phi(q) ?(n)=?(p)?(q)

欧拉定理

如果两个正整数 a a a n n n互质,则 n n n的欧拉函数可以让如下等式成立:
a ? ( n ) ≡ 1 ( m o d ? n ) a^{\phi(n)} \equiv 1(mod\ n) a?(n)1(mod?n)

模反元素

如果 a a a n n n互质,则一定存在元素 b b b,使得如下等式成立:
a b ≡ 1 ( m o d ? n ) ab \equiv 1(mod\ n) ab1(mod?n)
b b b a a a的模反元素。

RSA密钥生成过程

  1. 选取两个不相等的质数 p p p q q q
  2. 计算 n = p q n = pq n=pq的欧拉函数 ? ( n ) = ? ( p q ) = ? ( p ) ? ( q ) = ( p ? 1 ) ( q ? 1 ) \phi(n) = \phi(pq)=\phi(p)\phi(q) = (p - 1)(q-1) ?(n)=?(pq)=?(p)?(q)=(p?1)(q?1)
  3. 随机选择一个整数 e e e,并计算其对于 ? ( n ) \phi(n) ?(n)的模反元素 d d d,则 ( n , e ) (n,e) (n,e)作为公钥, ( n , d ) (n,d) (n,d)作为私钥,其他数字 p , q , n , ? ( n ) p,q,n,\phi(n) p,q,n,?(n)不公开。
    如果一个攻击者在得知公钥的情况下获取私钥,需要根据 n , e n,e n,e计算出 d d d
    因为 d d d e e e关于 ? ( n ) \phi(n) ?(n)的模反元素,因而计算 d d d需要知道 ? ( n ) \phi(n) ?(n),而计算 ? ( n ) \phi(n) ?(n)则需要找到两个质数 p p p q q q,因为 ? ( n ) = ( p ? 1 ) ( q ? 1 ) \phi(n) = (p-1)(q-1) ?(n)=(p?1)(q?1)。而对于大整数的因数分解过程是非常耗时的,只有暴力一种解法。因而RSA算法被认为是安全的。

DH密钥交换算法的原理

DH秘钥交换算法涉及到离散对数的知识。选取两个大数 p p p g g g并公开,其中 p p p是一个质数, g g g p p p的模 p p p本原单位根,则DH密钥交换算法的流程为:

  1. Alice随机选择一个整数 a a a,计算 K a = a g ? m o d ? p Ka=a^g\ mod\ p Ka=ag?mod?p并将其发送给Bob;
  2. Bob随机算则一个证书 b b b,计算 K b = b g ? m o d ? p Kb=b^g\ mod\ p Kb=bg?mod?p并将其发送给Alice;
  3. Allice和Bob开始通过已知的信息计算密钥。Alice计算密钥 k e y = a × K b ? m o d ? p = a × b g ? m o d p = ( a b ) g ? m o d ? p key=a\times Kb\ mod\ p=a\times b^g\ mod p = (ab)^g\ mod\ p key=a×Kb?mod?p=a×bg?modp=(ab)g?mod?p,Bob计算密钥 k e y = b × K a ? m o d ? p = b × a g ? m o d ? p = ( b a ) g ? m o d ? p = ( a b ) g ? m o d ? p key=b\times Ka\ mod\ p= b\times a^g\ mod\ p = (ba) ^ g\ mod\ p = (ab) ^g\ mod\ p key=b×Ka?mod?p=b×ag?mod?p=(ba)g?mod?p=(ab)g?mod?p,所以Alice和Bob计算出的密钥相同。

基于以下原因:

已知 a a a,计算 b = a g ? m o d ? p b = a^g\ mod\ p b=ag?mod?p容易,但是在已知 b , g , p b,g,p b,g,p的情况下计算a很难(很难的意思是计算出结果需要很长很长时间)。函数 f ( x ) = x g ? m o d ? p f(x)=x^g\ mod\ p f(x)=xg?mod?p在密码学中被称为陷门函数,因为已知 x x x f ( x ) f(x) f(x)简单,但是已知 f ( x ) f(x) f(x) x x x很难。

假设有一个中间人Eve通过窃听得到了 p , g , K a , K b p,g,Ka,Kb p,g,Ka,Kb,要想求得Alice和Bob协商得到的密钥 k e y key key,其必须求得 a a a b b b才能算出密钥,因而 k e y key key被认为是安全的,除了Alice和Bob外没人能知道。

RSA握手过程

客户端 服务端 client hello {支持的TLS版本、加密和压缩算法、随机数C} server hello {支持的TLS版本、选择的加密和压缩算法、随机数S} 服务端证书 其他 server hello done 验证证书 pre_master随机数,使用server的公钥加密 change Cipher spec:使用协商的加密算法和秘钥加密信息 握手结束通知,使用协商的密钥和加密算法发送之前发送所有信息的哈希值。 使用pre_master、C和S生成密钥,解密哈希值验证消息。 change cipher spec:使用协商的加密算法和秘钥加密信息。 握手结束通知,发送加密的所有之前发送信息的哈希值 客户端 服务端

DH握手过程

客户端 服务端 client hello {支持的TLS版本、加密和压缩算法、随机数C} 使用私钥加密DH参数、客户端和服务端生成的随机数生成数字签名 server hello {支持的TLS版本、选择的加密和压缩算法、随机数S、数字签名} 验证数字签名 确认数字签名 { 客户端DH参数 } 计算会话密钥 计算会话密钥 change Cipher spec:通知后续使用协商的加密算法和秘钥加密信息 握手结束通知,使用协商的密钥和加密算法发送之前发送所有信息的哈希值。 change cipher spec:通知后续使用协商的加密算法和秘钥加密信息。 握手结束通知,发送加密的所有之前发送信息的哈希值 客户端 服务端

素性检验:如何生成一个大质数

**方法1:**筛法。判断整数 n n n是否为素数的方法是 n ? m o d ? i = 0 , i ∈ [ 2 , n ) n\ mod\ i = 0, i \in [2, \sqrt{n}) n?mod?i=0,i[2,n ?),即从2开始遍历直到 n \sqrt{n} n ?,如果没有整数能被 n n n整除则认为 n n n是素数。
**方法2:**利用费马小定理。费马小定理的内容为:

假设 a a a是整数, n n n是一个质数,则有如下条件成立:
a n ? 1 ≡ 1 ( m o d ? n ) a^{n-1} \equiv 1(mod\ n) an?11(mod?n)

费马小定理是判断一个数是否为质数的充分条件,即存在合数满足费马小定理,这些合数被称为迈克尔数。最小的迈克尔数为561。
利用费马小定理检验素数的方法被称为费马素性检验。费马素性检验是指通过多选择几个整数,如果满足费马小定理则 n n n是素数的可能性会很大。费马素性检验是概率性算法。
米勒—拉宾算法和AKS算法利用费马小定理进行素性检验。其中米勒—拉宾算法是概率性算法,在实际生活中应用较多,而AKS算法是确定性算法。两者都是多项式时间复杂度。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:17:01  更:2022-05-21 19:17:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 11:51:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计