TCP/IP协议二十一:HTTPS/SSL协议详解(1)加密原理
TCP/IP协议二十二:HTTPS/SSL协议详解(2)HTTPS三次握手及其详解
https://blog.csdn.net/lqy971966/article/details/125391550
1. 加密历史–对称加密算法
1.1 加密
加密就是利用技术手段把重要的数据变为乱码(加密)传送
如:
123 二进制为:1111011
简单加密规则(奇数位取反)就变成加密数据: 0101110
对方收到数据之后解密得到 123
1.2 密钥
加密或解密使用的规则,就叫做密钥
例子:
1. 上面的奇数位取反的方法就是密钥
2. 对“Hani i love u”进行加密,密钥y=12345,其二进制:11 0000 0011 1001,假设生成:0xAkji893
y这种加密算法/规则就叫做密钥
1.3 对称加密算法
1976年以前,所有的加密方法都是同一种模式
1.甲方选择某一种加密规则,对信息进行加密;
2.乙方使用同一种规则,对信息进行解密。
如上面的对123的二进制进行奇数位取反加密,加密和解密用的同样的密钥:就是奇数位取反。
对称加密算法:
由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"
缺点:
甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
2. 非对称加密算法
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。
这个算法启发了其他科学家。
人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥
这种新的加密模式被称为"非对称加密算法"。
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
2.1 RSA算法
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。
这种算法用他们三个人的名字命名,叫做RSA算法。
这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。
也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。
因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
2.1.1 RSA 非对称加密原理
RSA加密算法原理图:
参考: https://blog.csdn.net/jijianshuai/article/details/80582187
RSA详细推导参考:RSA算法原理(二)
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
2.1.2 RSA通信示例
在实际应用中我们以Https通信为例来分析RSA的使用过程,现在模拟https通信中client和server的常见对话:
client >>server:你好,我是clientA
server>>client: 你好,我是server。
client >>server:请证明你是Server,str [str 是随机字符串]
server>>client:str{"love u"-hash} //{}中是私钥RSA加密后内容,hash为str的hash
[client 收到str原文,计算str的hash1,通过证书中RSA公钥解密XXX-hash,获得密文中的内容与hash2,
比较解密内容与原内容的hash值是否一致,解密的hash和原文计算的hash是否一致,
都一致说明服务器是真的,可以进行下一步]
client >>server:你确实是server,这是RSA加密算法的秘钥X={0xj8KJ344},以后就用X加密算法通信吧
server>>client:{可以,我做好通信准备了} [内容经X算法加密]
client >>server:{查询一下我的账户余额} [内容经X算法加密]
3. 公钥密码体制(public-key cryptography)
公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:
加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。
解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。
公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的。
两者都可以加解密数据,公钥加密的内容只能私钥解密,私钥加密的内容只能公钥解密
4. 数据签名
签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。
签名一般使用的方案:
是对信息做一个hash计算得到一个hash值,然后把这个hash值(加密后)作为一个签名和信息一起发出去。
Hash值需要进行加密是为了防止有人修改hash值。
接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过。
1. 这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。
2.不同的内容一定会得到不同的hash值,hash的加解密是为了防止传输过程中被更改,造成信息是否被篡改无法准确验证。
参考:
https://blog.csdn.net/luo_boke/article/details/106013674
RSA算法原理(一)
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
RSA算法原理(二)
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html