IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,用于在不安全的网络上(一般是互联网),建立安全的网络通信,一个很常见的场景就是,我们可以通过IPsec隧道将分公司和总部的内网连接起来,使分支的员工安全的访问总部的资源,按照传统的做法,公司需要租用运营商的专线,专门拉一条网线将总部和分公司组网,虽然更安全,体验更好,但这个价格也灰常的恐怖。
IPsec隧道可以帮助我们安全的从互联网的两端传递数据,主要依靠四大特点(CIAA):
开始介绍IPsec隧道前,我们先整点冷盘,讲讲会涉及到的知识点。
对称加密是指用一把密钥对数据进行加密和解密,我举个最简单的对称加密的例子:
凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文:“Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥,只要凯撒事先将移动的位数告诉手下的大臣们,那么双方就能对作战命令进行加密和解密。
我们通过上述例子可以发现对称加密的两个特点:
目前,比较有名的对称加密算法有3种:
非对称加密就是加密和解密使用的不是相同的密钥:只有同一个公钥-私钥对才能正常加解密。
这玩意非常巧妙,就是说存在一对keyA和keyB,keyA只有我自己知道,所以称为私钥,keyB可以交给任何人,所以称为公钥,我想输出得信息可以用私钥加密,然后其他拿到公钥的人可以对这段信息解密,更为巧妙地是,其他人使用公钥也可以加密信息,对应的只有手持私钥的我可以对其进行解密。非对称加密一般有两种功能:
比较有代表性的就是RSA算法,三个麻省理工的大神在1977年提出,具体过程如下:
两个整数a,b,若它们除以正整数m所得的余数相等,则称a,b对于模m同余,记作: a ≡ b (mod m);
为了举例方便,我们取两个小的质数:
p = 3 ,q = 11
->
n = pq = 33
r = (p-1)(q-1) = 20
在1到20中取e与20互质,取e=3(也可以取其他)
3*d 与 1对20取模后,余数要相同,一下子就能看出来是21,d是7
至此公钥 e, n : 3, 33
至此私钥 d, n : 7, 33
我现在开始发送数据: 2 0 2 4
则私钥加密如下:M^e (mod n) -> (2^3 mod 33) (0^3 mod 33) (2^3 mod 33) (4^3 mod 33)
密文:8 0 8 31
公钥解密:c^d (mod n) -> (8^7 mod 33) (0^7 mod 33) (8^7 mod 33) (31^7 mod 33)
解密的密文:2 0 2 4
现在对方也可以用公钥进行加密:1 3 1 4
用公钥加密如下:M^e (mod n) -> (1^7 mod 33) (3^7 mod 33) (1^7 mod 33) (4^7 mod 33)
密文:1 9 1 16
我用私钥解密:c^d (mod n) -> (1^3 mod 33) (9^3 mod 33) (1^3 mod 33) (16^3 mod 33)
解密的密文:1 3 1 4
可见啊,假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式破解。到2020年为止,世界上还没有任何可靠的攻击RSA算法的方式。
正如上文提到的那样,对称密钥是不好在互联网中交换的,因为中间人可以轻易的窃取到。1976年两位密码学家,发表了一个密钥交换的文章,它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通信中作为对称密钥来加密通讯内容。
我们再回到凯撒的那个通过字母左移几位来加密命令的故事,现在他们可以通过DH进行协商移位的个数:
凯撒 | 军队的leader | |
---|---|---|
双方公开p和g,p是质数,g是整数 | 我说一个p吧,p=11 | 我知道了,那我说一个g吧,g=5,陛下记一下 |
双方都要自己想一个秘密数字a和b,打死也不告诉人 | 脑海中想了a=6 | 脑海中想了b=4 |
双方交换数字,s = (g ^ a或b ) mod p | 我算好了,是(5^6) mod 11 = 5,这个s=5给你 | 我也算好了,是(5^4) mod 11 = 9,这个s=9给你 |
双方通过 key= (对方的s ^ a或b ) mod p算出对称密钥 | k = (9 ^6 ) mod11 = 9, okk移位的个数就9 | k = (5 ^4 ) mod11 = 9,好的,我就逆向移位9个就能解密了 |
Diffie-Hellman(DH)组确定密钥交换过程中使用的密钥的强度。在一组类型(MODP或ECP)内,较高的Diffie-Hellman组号通常更安全。
哈希算法可以保证数据的完整性,这个算法能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要),且若输入的消息不同,它们对应到不同字符串的几率很高,也就是说我们可以很大概率认为这个哈希算法生成的字符串可以代表是源数据。
我们比较熟悉的就是MD5算法,当我们下载完某个电影时,迅雷会做一个MD5值(生成32位长度的字符串)校验,如果和下载源写的MD5值一致,那就认为下载的电影是没有损坏的,但现在MD5有一些脆弱了,我们可以用彩虹表做一个逆向的破解。
hello
B1946AC92492D2347C6235B4D2611184
SHA(安全散列算法,Secure Hash Algorithm)是一个密码散列函数家族,是FIPS所认证的安全散列算法。其中最新的SHA-3 ,2015年正式发布,由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的SHA-3。SHA生成的哈希字符串长度巨长无比,可以是512位长度的字符串,这出现碰撞的概率几乎没有了,可以认为被哈希的字符串和哈希值是一一对应的了:
hello
52fa80662e64c128f8389c9ea6c73d4c02368004bf4463491900d11aaadca39d47de1b01361f207c512cfa79f0f92c3395c67ff7928e3f5ce3e3c852b392f976
我们做个实验,一个很小的改变都会产出几乎完全不同的散列值。举例来说,把一句话中的dog 改成 dof,生成的散列值天差地别:
SHAKE128("The quick brown fox jumps over the lazy dog", 256)
f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e
SHAKE128("The quick brown fox jumps over the lazy dof", 256)
853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c
认证就是让通信的双方,都确定是真正双方,而不是中间人之类的伪造者。一般有两种方法:
AH协议(Authentication Header,验证头部协议):可以证明数据的起源地、保障数据的完整性以及防止相同数据包在因特网重播,使用IP协议号51。AH公共摘要算法(单向散列函数)MD5和SHA1实现此功能。
ESP协议(Encapsulating Security Payload,封装安全载荷协议):具有所有AH的功能(除了ESP不会对整个IP包进行验证),还可以利用加密技术保障数据机密性,使用IP协议号50。ESP通常使用DES,3DES,AES和其他加密算法来加密数据。使用MD5或SHA1。实现数据完整性。
ESP的验证灵活,不验证外侧IP头部,这使得它能很好的兼容NAT。但是,这也使得接收端无法检测IP头部被修改的情况(只要保证校验和计算正确),故ESP的验证服务没有AH的验证服务强大。所以,AH主要用于验证IP头部,ESP主要用于加密,通常会将两者嵌套使用。
有了上文介绍的知识储备,就可以出新手村,挑战一下IPSec隧道这个boss了。
ipsec是一组协议,用于在不安全的网络上(互联网),建立安全的网络通信。
我们可以通过ipsec隧道将分公司和总部的内网连接起来,使分支的员工通过互联网安全的访问总部的资源,这里面的总部和分公司被称为two peers(local和remote),我们一般远程办公都会使用IPSec隧道或者SSL隧道。
两端会定义一些感兴趣的流量,这个流量是指满足一系列规则的流量,比如说某个网段或更复杂的acl策略,无论规则如何,如果一端发起的流量与其中这些规则匹配,则它就会被归为感兴趣的流量,并且会创建ipsec隧道,将该流量送到其目的地。当没有感兴趣的流量时,那么隧道最终被会被拆除,只有下次系统检测到感兴趣的流量来临时,隧道才会重新建立。
ipsec隧道提供了认证功能,因此只有相互验证的对等方才能连接,并且对于旁观者或中间人来说,ipsec隧道所承载的安全数据是加密的,且无法在不被检测到的情况下更改数据的内容。
ipsec隧道的常见架构如下:
一阶段协商有两种模式,主模式和积极模式。主模式是IKEv1的默认模式,用6条消息完成协商,更加安全,积极模式用3条消息,虽然不太安全,但是快。
当主机使用主模式建立了相互的IKE SA后,这些SA被用来保护后续的密钥交换,使这个过程更轻量级。后续的交换称为快速模式或IKE第二阶段。
快速模式的目的是建立IPsec SA,即用于加密和解密应用数据的通道。
在预定的时间间隔(例如按时间或数据量)内,这些IPsec SA会被刷新,即生成和交换新的IPsec SA密钥。
这也是种分层的设计思想,因为第一阶段非常缓慢且繁重,第二阶段相对就很快,所以当感兴趣流量没有时,IPSec隧道会将二阶段断开,但一阶段仍保留,这样感兴趣流量再来时可以迅速的重新立phase2。
IKEv2简化了安全联盟的协商过程。IKEv2正常情况使用2次交换共4条消息就可以完成一个IKE SA和一对IPSec SA,如果要求建立的IPSec SA大于一对时,每一对SA只需额外增加1次交换,也就是2条消息就可以完成。
实验背景
IKEv2协议是4条消息,这4条报文中,前两个报文是不加密的,使用的是UDP端口号500,这一阶段称为IKE_SA_INIT。后两个报文是加密的,使用的是UDP端口号4500,这一阶段称为IKE_AUTH。
第一个报文 初始方SPI设定一个随机值 响应方SPI设定为0
SA,KE,Nonce信息交换
双方使用的安全套件提议
Nonce(Number used ONCE)数据用于增加安全性和防止重放攻击。Nonce是一个只使用一次的随机数或计数器,用于在密钥交换和认证过程中。
DH算法以及互相交换的数字
IKE版本,message id,通过使用Message ID,可以在IPsec会话中跟踪和识别不同的消息。它允许发送方和接收方在交换多个消息时进行匹配和关联,确保消息的正确顺序和处理。
是否做nat探测
第二个报文 和第一个报文差不多,回应发起方的给出安全套件信息,以及用于生成dh key的data
第三个报文和第四个报文是用DH密钥对称加密的,我们装上插件,解开看看里面有什么信息
这部分涉及以下几个信息: 双方标识
感兴趣的流量范围,traffic selector
认证信息,可以看出是用的PSK
IPSec SA用户隧道的一些HAGLE参数提议,算法之类的
后续的报文就是ESP加密的用户数据,两端是有SPI标识和ESP序列号了
解密后可以看到内层的用户报文
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。