【密码学】"一"文读懂TLS(一)
本文来聊一下TLS的相关知识,由于我网络知识学的实在是匮乏,因此呢,文章当中不会涉及到有关网络层面的知识,仅仅聊聊TLS当中用到的密码学的相关算法,** 由于本人水平有限, 如果您发现错误, 欢迎指出, 在这里先感谢各位读者了**,手动狗头,逃~~
「本文所涉及到的所有代码,均未经过严格的测试,仅供学习使用,请勿直接用于生产环境」
因为TLS所涉及到的内容比较多,因此呢一篇文章是写不完的(才不是因为我想多水几篇文章),所以呢这个会拆成多篇文章来讲,溜了溜了。
什么是TLS
「传输层安全协议(TLS)」是一种安全协议,其目的是为网络通信提供安全以及完整性保障。
TLS发展历史
-
SSL1.0由网景公司(Netspace)提出(1994), 但未公开过,因为存在严重的安全漏洞。 -
SSL2.0版本在1995年2月发布,2011年,RFC6176弃用了SSL2.0 -
SSL3.0版本在1996年发布,2015年,RFC7568弃用了SSL3.0 -
1999年IETF对SSL进行了标准化,即RFC2246,称其为TLS1.0 -
TLS1.1版本在2006年4月发表,2021年3月,RFC8996启用了TLS1.0和TLS1.1 -
TLS1.2版本在2008年8月发表(RFC5246),至今(2022)依然安全 -
TLS1.3版本在2018年8月发表(RFC8446),至今(2022)依然安全
TLS的运用场景
这里有请密码学当中出镜率最高的两个人物Alice和Bob,发现自己好像好久没有写代码了,这里咱们用代码来模拟一下网络中Alice和Bob的通信。后文代码将采用UDP协议模拟一下Alice和Bob在网络当中的通信。
这里为了回顾一下我之前学习的语言的知识,依然采用两种语言,对于Alice作为发送端,这里采用Go来实现一下吧,然后Bob是接收端,这里还是用Rust来实现了。
Alice发送UDP数据给Bob
package main
import (
"fmt"
"net"
)
func main() {
c, err := net.DialUDP("udp", nil, &net.UDPAddr{
IP: net.IPv4(127, 0, 0, 1),
Port: 8080,
})
if err != nil {
fmt.Printf("dial dail,err:%vn", err)
return
}
defer func(c *net.UDPConn) {
err := c.Close()
if err != nil {
}
}(c)
_, err = c.Write([]byte("Hello, I am Alice."))
if err != nil {
fmt.Printf("send data failed, err:%vn", err)
return
}
var buf [1024]byte
n, addr, err := c.ReadFromUDP(buf[:])
if err != nil {
fmt.Printf("recv data failed, err:%vn", err)
return
}
fmt.Printf("size: %v, src: %v, data: %vn", n, addr, string(buf[:n]))
}
Bob接收到Alice发送的消息并回复Alice
use std::net::UdpSocket;
use std::str;
fn main() {
let listener = UdpSocket::bind("0.0.0.0:8080").expect("bind address failed");
let mut buf = [0; 128];
loop {
let (size, src) = listener.recv_from(&mut buf).expect("recv data failed");
println!(
"size: {}, src: {}, data: {}",
size,
src,
str::from_utf8(&buf[..size]).expect("convert byte failed")
);
listener
.send_to("Hello, I am Bob.".as_bytes(), src)
.expect("send data failed");
}
}
那么这么发送会有什么问题呢?我们来抓包看一下,这里采用tcpdump工具来抓包
sudo tcpdump -i lo0 udp port 8080 -w ./tcpdump.cap
这条命令是抓取本机的8080端口的udp报文并保存到 tcpdump.cap
文件下。
然后我们用wireshark工具打开抓取的报文。
我们可以发现Alice发送给Bob的明文数据,当然Bob回复给Alice的数据同样的也可以看到。那么这样Alice和Bob所有的通信过程都可以被监听到,这对于Alice和Bob显然是无法忍受的,那么Alice和Bob应该如何处理呢?欲知后事如何,且听下回分解。
参考资料
-
图解密码技术 第三版(结城浩) -
https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/ -
https://en.wikipedia.org/wiki/Transport_Layer_Security -
https://hpbn.co/transport-layer-security-tls/ -
https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/ -
https://www.internetsociety.org/deploy360/tls/basics/ -
https://www.biaodianfu.com/https-ssl-tls.html -
https://datatracker.ietf.org/doc/html/rfc8446 -
https://datatracker.ietf.org/doc/html/rfc6176 -
https://datatracker.ietf.org/doc/html/rfc7568 -
https://datatracker.ietf.org/doc/html/rfc2246 -
https://datatracker.ietf.org/doc/html/rfc5246 -
https://datatracker.ietf.org/doc/html/rfc8996
原文始发于微信公众号(Coder小Q):【密码学】一文读懂TLS(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论