写下此博客记录心得体会,如有不足之处请指正
 
先是手稿笔记 : 

正文:

 
在Https协议中,Client端和Server端需要三个参数才能生成SessionKey来加密信息。
三个参数分别是
Client Random(客户端随机数) 假设是C
Server Random(服务端随机数) 假设是S
PreMaster Random(待加密随机数) 假设是P
 
前两个都是通过明文的方式传输,即C从客户端以明文的方式发送给服务端,S从服务端以明文的发送发送给客户端
 
而P则是最重要,也是最关键的信息了,默认通过RSA算法对其加密,再传输到服务端,服务端再用私钥对密文进行解密,得到P。
 
如果被而已的第三方截取了P加密后的密文,是否有P信息泄露的危险呢?
 
我们知道RSA算法的公钥是对外公开的。假设公钥对(e,n),密钥对(d,n)那么从客户端发送到服务端关于P的密文 M = P^e mod n
假设密文M被攻击者拦截,如果要求得明文,必须求得
(log(P)M) mod n = e 的底数P,然而解P是十分复杂的过程,所以攻击者一般无法获得P的值。或者说要获得私钥的话,
 
ed = k f(n)[f = 欧拉函数] + 1, 而f(n) = f(p*q) = f(p)*f(q) = (p-1)*(q-1),而对n进行大素数分解的计算过程是十分难的。也不能通过M^d mod n 来获得P
 
RAS是相对来说比较安全的算法,但是用算力大的机器暴力破解,也是可以成功的。一般银行的重要密码需要30秒左右更换一次。
 
第二种算法是DH算法,假设DH算法的数对为(p,q)
 
客户端选取【1 ~ q - 1】中的一个随机数RC,通过计算得出一个参数 PC
 
PC = (p ^ RC)  mod q
 
服务端同样选取【1 ~ q - 1】中的一个随机数RS,通过计算得出一个参数 PS
 
PS = (p ^ RS) mod q
 
客户将自己的PC参数交给服务端
服务端将自己的PS参数交给客户端
 
服务端计算 PC ^ RS mod q = A
客户端计算 PS ^ RC mod q = B
 
实际上A = B,下面来证明一下,
 
首先 要用到一个定理
((W ^ X)  mod Y) ^  Z mod Y = W ^ (X * Z) mod Y
 
为什么呢,设 U = (W ^ X)  mod Y , 那么 U + k*Y = W^X (k为正整数)
即 : U  = W^X - k*Y
 
(W^X - k*Y)^Z 的中间的项和最后一项都含有Y 而只有第一项W^(X*Y)
不含有Y 所以
((W ^ X)  mod Y) ^  Z mod Y = W^(X*Z) mod Y
A = PC ^ RS mod q =
((p ^ RC)  mod q) ^ RS mod q = p ^ (RC * RS) mod q
 
B = PS ^ RC mod q =
((p ^ RS)  mod q) ^ RC mod q = p ^ (RC * RS) mod q
 
证明完毕,客户端和服务端交换参数后计算得到的最终数字A 和 B是相等的,聪明的你应该猜到了, A = B 就是服务端和客户端需要达成一致的PreMaster随机数!
 
可见只要我们知道了 RC * RS 就可以知道PreMaster!
 
其实两者交换的参数实际上是带有他们各自生成的随机数的信息的,因为,传输的参数公式为 ,参数P = (p ^ 各自随机数) mod q
 
当 p 和 q是已知的时候,拦截了P的话,要算出各自随机数,则要算出 (log( p)P) mod q = 各自随机数,
对数运算复杂,我没有实际想办法计算过大数的对数运算,先暂不做解析。
 
另外就是(p,q)对的选取,
p^x mod q = L (x = 1, 2 , 3, 4 ......)
当L从1开始向上逐一递增,L的取值不能周期性变化,
假设L以6为周期变化
那么p^1 mod q = p^7 mod q = p^13 mod q = ...
 
假如我们是攻击者
假设我们知道了
PC = (p ^ RC)  mod q 中 PC的值
PS = (p ^ RS) mod q 中PS的值
因为p^x mod q = L是呈周期性变化的,通过观察,我们就能轻易找到一个数 O
让 PS = (p ^ O) mod q
 
假设周期是6,那么 O 和原来服务端随机数RS的差值就是6*k(k为整数)
 
那么我们只要计算
ANS =   PC ^ O mod q = p ^ (RC * O) mod q   =  p ^ (RC * (RS + 6*k)) mod q   =   p ^ (RC * RS + 6 *k *RC )) mod q
 
因为p^x mod q = L是以6为周期变化的,又因为6 *k *RC是6的整数倍,所以p ^ (RC * RS + 6 *k *RC )) mod q = p ^ (RC * RS) mod q = PreMaster
 
我们盗取PreMaster成功!无需知道 RS 和 RC 的各自具体值, 直接知道他们的乘积就好了
 
所以(p,q)对的分布要满足p^x mod q = L,x取【1~ q -1】的时候,L的取值是无序不重复的,这样才能保证一定的安全性
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

SSL握手两大加密算法 : RAS算法 和 DH算法解析的更多相关文章

  1. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议

    node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...

  2. 详解聚类算法Kmeans的两大优化——mini-batch和Kmeans++

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第13篇文章,我们来看下Kmeans算法的优化. 在上一篇文章当中我们一起学习了Kmeans这个聚类算法,在算法的最后我 ...

  3. SSL握手流程

    一.SSL是什么? 安全套接字(SSL)协议是Web浏览器和Web服务器之间安全交换信息的协议. SSL介于应用层和TCP层之间,应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层 ...

  4. SSL 握手协议详解

    这里重点介绍一下服务端的验证和密钥交换.这个阶段的前面的(a)证书 和(b)服务器密钥交换是基于密钥交换方法的.而在SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hell ...

  5. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理

    转自:https://blog.csdn.net/andylau00j/article/details/54583769 本系列的前一篇,咱们聊了“密钥交换的难点”以及“证书体系”的必要性.今天这篇来 ...

  6. 一次ssl的手动实现——加密算法的简单扫荡

    引言 最近LZ在公司里接了一个活,要发布一些服务给公司的合作伙伴调用.这种工作LZ可谓是轻车熟路,之前已经做了无数服务端.不过与以往不同的是,这次的服务是要发布在互联网上的,因此不能再像之前的套路一样 ...

  7. SSL握手过程

    原文地址: http://my.oschina.net/u/1188877/blog/164982 一.SSL握手有三个目的:1. 客户端与服务器需要就一组用于保护数据的算法达成一致:2. 它们需要确 ...

  8. 加密、签名和SSL握手机制细节

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 背景知识 对称加密     :加密解密使用同一密钥,加解密速度快.随 ...

  9. java加密算法入门(一)-算法概念及单向加密

    说起加密,我的第一印象就是电视剧各种密码本破解解密的场景,这两天在看加密相关的东西,做下笔记以便以后查看,也提供给大家个参考. 本文是java加密的第一篇,主要讲述下消息编码Base64以及简单的消息 ...

随机推荐

  1. 140. 单词拆分 II

    Q: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使用字典 ...

  2. 深度学习之numpy.poly1d()函数

    1.np.poly1d()此函数有两个参数: 参数1:为一个数组,若没有参数2,则生成一个多项式,例如: p = np.poly1d([2,3,5,7]) print(p)    ==>> ...

  3. python之路之课后作业

    以下代码只包含管理员代码,用户代码和管理员相似 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import os sys.path. ...

  4. 初识Java爬虫之Jsoup,提供参考代码

    本文主要分享的是关于Java爬虫技术其中一个方式   ==>  Jsoup 1.Jsoup简介 推开技术大门,爬虫技术琳琅满目,而今天要分享的Jsoup是一款Java的HTML解析神器,,可直接 ...

  5. while、for循环结构_python

    一.while循环的基础例子: 例子1:判断是否大于50 例子2:按需打印乘法口诀 例子3:无限循环 while True: print (“true”) 二.for循环 1.for循环的常见范围的用 ...

  6. maven web报错:org.apache.jasper.JasperException: Unable to compile class for JSP

    原博文地址:https://blog.csdn.net/ken1583096683/article/details/80837281 maven web项目启动没问题,访问页面就报错:org.apac ...

  7. VS调试工具

    F5--启动运行,跳到下一个断点 F10--逐步调试 F11--逐句调试 F10和F11的区别: method(); int a = 1; 当程序运行到如上面的method方法时,按F10会直接跳到下 ...

  8. 从ICG cell 在 library 中的定义说起

    如Coding 时需要考虑什么样的代码风格会使gating 的效率更高:综合时需要特别设置要插入的gating 类型,每个gating 的fanout 范围,是否可以跨层次,是否需要做physical ...

  9. Spark On Yarn搭建及各运行模式说明

    之前记录Yarn:Hadoop2.0之YARN组件,这次使用Docker搭建Spark On  Yarn 一.各运行模式 1.单机模式 该模式被称为Local[N]模式,是用单机的多个线程来模拟Spa ...

  10. 【NS-3学习】ns3-模拟基础:关键概念,日志,命令行参数

    前言 本篇博客先介绍在仿真过程中会使用到的一些关键概念,然后介绍便于调试仿真脚本的常用技术:日志.命令行参数. 关键概念 节点 在因特网术语中,主机(终端)是指任何一台连接到网络的计算设备.ns-3并 ...