MySQL 5.7 传输协议分析
- Client 发起认证请求,经
1``2``3
TCP 协议三次握手后开始通信;
- Server 通过 MySQL 协议 Sever Greeting,向 Client 传输数据,具体如下
重点关注两个
Salt
、Authentication Plugin
报文字段,Server 向 Client 说明以下信息:
- 当前的认证插件是
mysql_native_password
; - 提供两个
Salt
值用于实现身份认证。
- Client 向 Server 发送 Login Request 请求,携带信息
重点关注
Username
、Password
报文字段,Client 向 Server 说明以下信息:
- 用户名是
root
; password
是经过加密传输的。
根据 MySQL 官网,password
的加密算法为
SHA1( password ) XOR SHA1( "20-bytes random data from server" SHA1( SHA1( password ) ) )
其中 20-bytes random data from server
为步骤 2 中 Salt
字段,而password
具体使用算法与 Authentication Plugin
相关。
- Server 向 Client 发送 Response OK,代表认证成功。
MySQL 认证模式总结
Mysql采用的是一种 challenge/response
(挑战-应答)的认证模式
- 客户端连接服务器;
- 服务器发送随机字符串
challenge
给客户端,也就是协议分析中的Sal
; - 客户端发送
username + response
给服务器,其中response
为协议分析中的password
response = HEX(SHA1(password) ^ SHA1(challenge + SHA1(SHA1(password))))
;
- 服务器验证
response
。
MySQL 5.7 鉴别信息存储保密性分析
authentication_string
是用户的密码存在数据库中的字段,根据官网,其加密算法为 SHA1,具体
总结
根据抓包对报文的分析、MySQL 官网的解读,涉及等保测评的测评结果应为:
当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。 | 当进行远程管理时,数据库通过 mysql_native_password 插件,利用 SHA1 算法对鉴别信息进行加密,且每次认证都会生成 Salt 保证无法构造登录信息,从而防止鉴别信息在网络传输过程中被窃听。 |
---|---|
应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。 | 数据库通过 mysql_native_password 插件,利用 SHA1 算法对鉴别信息在传输过程中的保密性进行保护,但未采用密码算法对重要配置信息的传输保密性进行保护。 |
应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。 | 数据库利用两次 SHA1 算法保证鉴别信息的保密性,但未采用密码算法对重要配置信息的存储保密性进行保护。 |