数字签名
手写签名:1. 签名者身份(身份可鉴定),2. 签名者认可文件内容(文件内容不可篡改)。
数字签名算法去实现上述数字签名类似的特性(实际上需要数字证书的辅助)
主要数字签名算法(属于加密算法的一种)
- RSA
- DSA
- ECDSA
加密算法
- 双向加密算法:对称加密算法和非对称加密算法
- 单向加密算法:哈希算法
主要对称机密算法(单密钥加密算法)
- DES
- 3DES
- AES
主要非对称加密算法(公开密钥加密算法)
- RSA
- ECC
主要哈希算法
- MD5
- SHA-1
- SHA-256
- SHA-512
消息认证码(MAC)
使用对称加密,2个密钥,一个生成消息认证码,一个生成加密数据
并将两个密钥安全的发给对端
密文 + 消息认证码密钥 + hash = 消息认证码
随机数 + 消息认证码密钥 + hash = 消息认证码2
随机数
密文和消息认证码 一起发给B,B根据密文加密hash得到一致的消息认证码确认消息的完整性以及认证一定是A发的,因为用的是A给的消息认证码密钥。
对消息进行认证并确认其完整性
- HMAC
hmac主要应用在身份验证中,如下是它的使用过程: 1. 客户端发出登录请求(假设是浏览器的GET请求) 2. 服务器返回一个随机值,并在会话中记录这个随机值 3. 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器 4. 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法。
在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的hmac结果,而对于截获了这两个值的黑客而言这两个值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。
Nonce
Nonce是一個在加密通信只能使用一次的數字
RSA数字签名算法
- 小明用RSA生成公钥/私钥
- 对文件做哈希运算得到文件哈希值H
- 用私钥对H进行签名运算的到数字签名S
- 公钥/文件/S/哈希算法可以通过互联网发送网络
- 我们可以通过公钥解密S得到哈希值Hs (确认签名者身份)
- 我们可以通过对文件进行哈希得到Hd
- 比较Hd和Hs就可以确认签名者认可文件内容
步骤5有漏洞,可能公钥被篡改
通过数字证书保证公钥不被篡改
即确认公钥是小明的
- 小明将公钥发给CA(数字证书颁发机构)
- CA颁发数字证书给小明
- 数字证书内包含小明身份信息和公钥,随公钥发到网上
- 其他人可以通过数字证书确认公钥是小明
数字证书保证未被篡改
- 数字证书中包含由CA机构通过私钥加密小明信息得到的数字签名
- 每个人电脑或者手机系统里安装了CA根证书
- CA根证书里包含了可以信赖的CA机构及其公钥
- 通过CA机构公钥就可以验证数字证书不被伪造
X509 is an ITU standard defining the format of public key certificates
中间人攻击: Certchain可以增加中间人攻击难度
攻击的种类
- 窃听
- 假冒和篡改 <-- 消息认证码/数字签名
- 事后否认 <-- 数字签名
- 重放攻击 <-- 消息认证码