文章目录
- 一、前言
- 二、重点概念
-
-
- 1. 安全外壳(SSH)
- 2. SSH概述
- 3. SSH-2的安全目标
- 4. SSH传输层协议
- 5. SSH密钥指纹
- 6. SSH密钥指纹
- 7. SSH-2算法
- 8. SSH传输层协议
- 9. SSH传输层协议
- 10. SSH传输层协议
- 11. SSH传输层协议
- 12. SSH传输层协议
- 13. SSH传输层协议
- 14. SSH用户认证协议
- 15. SSH连接协议
- 16. SSH端口转发
- 17. SSH端口转发
- 18. SSH端口转发(应用)
- 19. SSH端口转发(本地)
- 20. SSH端口转发(远程)
- 21. 端口转发
- 22. SSH应用
- 23. SSL/TLS
- 24. SSL/TLS应用
- 25. SSL/TLS架构
- 26. TLS记录协议
- 27. TLS记录协议格式
- 28. TLS记录协议
- 29. TLS更改密码规范协议
- 30. TLS警报协议
- 31. TLS警报协议
- 32. TLS握手协议
- 33. TLS握手协议
- 34. TLS握手协议的四个阶段
- 35. Diffie-Hellman重新介绍
- 36. 密钥传输
- 37. TLS1.2支持的密钥交换方法
- 38. 握手协议
- 39. 握手协议
- 40. 握手协议
- 41. 握手协议
- 42. 握手协议
- 43. 握手协议
- 44. 握手协议
- 45. SSL密钥派生
- 46. SSL密钥派生
- 47. TLS密钥派生
- 48. 会话恢复(Session Resumption)
- 49. HTTPS (HTTP over SSL/TLS)
-
一、前言
二、重点概念
1. 安全外壳(SSH)
- SSH = Secure Shell(安全壳)
- 最初设计用于替代不安全的rsh和telnet工具。
- 主要用于安全的远程管理(通常是Unix系统)。
- 后来,SSH被用于提供网络应用程序的通用安全通道。
- 只保护明确指定的流量。
- 应用程序需要进行修改,但端口转发在一定程度上简化了这个过程。
2. SSH概述
SSH协议栈采用三层架构:
-
SSH传输层协议
- 负责初始连接。
- 服务器认证。
- 通过密钥交换等方式在客户端和服务器之间建立安全通道。
-
SSH认证协议
- 在安全的传输层通道上进行客户端认证。
-
SSH连接协议
- 在一个传输层协议的安全通道上支持多个连接。
- 提高了效率(会话复用)。
3. SSH-2的安全目标
- 服务器认证:在传输层协议中进行服务器认证。
- 客户端认证:通过公钥(DSS,RSA)或简单密码在认证协议中进行客户端认证。
- 建立新的共享密钥:
- 共享密钥用于派生进一步的密钥(加密密钥、MAC密钥、IV等),类似于SSL/TLS。
- 用于SSH传输层协议中的保密性和真实性。
- 安全加密套件协商:
- 包括加密、MAC和压缩算法。
4. SSH传输层协议
- 服务器认证:基于服务器的主机密钥对(公钥和密钥)。
- 数据包交换:
- 建立TCP连接。
- 然后可以交换数据(数据包交换)。
- 包括标识字符串交换、算法协商、密钥交换、密钥交换结束、服务请求。
- 服务请求:用户认证或连接协议。
5. SSH密钥指纹
- 连接的安全性依赖于服务器向客户端认证自身。
- 当你第一次连接到远程主机时,主机会将其公钥发送到你的本地电脑以识别自己。为了帮助你验证主机的身份,主机会向你展示其公钥的指纹供你验证。
- 许多用户会盲目接受展示的密钥。
- SSH对普通大众来说并不友好。
6. SSH密钥指纹
- 通过Diffie-Hellman密钥交换建立密钥。
- 短暂的Diffie-Hellman密钥交换。
- 服务器认证通过RSA或DSS签名进行。
- 采用HMAC-SHA1或HMAC-SHA256作为MAC算法。
- 采用3DES、AES、RC4等作为加密算法。
7. SSH-2算法
SSH传输层协议
- Diffie-Hellman密钥交换:
- 客户端生成一个随机数
xc
并计算yc = g^xc mod p
。 - 客户端将
yc
发送给服务器。
- 客户端生成一个随机数
8. SSH传输层协议
Diffie-Hellman密钥交换
- 服务器生成一个随机数
xs
并计算ys = g^xs mod p
。 - 服务器计算共享密钥
K = yc^xs mod p
。
9. SSH传输层协议
Diffie-Hellman密钥交换
- 服务器计算交换的哈希值
H = hash(idC || idS || initC || initS || PKS || yc || ys || K)
。idS
、idC
:服务器和客户端的标识字符串。initS
、initC
:服务器和客户端的初始消息。
10. SSH传输层协议
Diffie-Hellman密钥交换
- 服务器对交换的哈希值
H
生成签名signature = SignSKS(H)
,并将(ys, PKS, signature)
发送给客户端。
11. SSH传输层协议
密钥派生
- 在密钥交换之后,服务器和客户端都获得了两个共享值:
- 共享的密钥值
K
。 - 交换的哈希值
H
。
- 共享的密钥值
- 加密密钥和MAC密钥是从
K
和H
派生的。 - 第一次密钥交换的交换哈希值
H
还用作会话标识符。
12. SSH传输层协议
密钥派生
- 加密密钥的计算方法是:将共享密钥
K
和哈希值H
组合并进行哈希运算。- 客户端到服务器的初始IV:
hash(K || H || "A" || session id)
。 - 服务器到客户端的初始IV:
hash(K || H || "B"
- 客户端到服务器的初始IV: