密码学知识普及
Table of Contents
- 加密
- 单向加密
- 信息认证码
- 数字签名
- 公钥基础设施 PKI
- 随机数
加密
对称密码: 机密和解密的密钥是相同的, 因此必须向接受者配送密钥
公钥密钥 (非对称密码): 无需向接收者配送用于解密的密钥
对称密码算法: DES, 3DES, AES (Rijndael)
公钥密码算法: RSA, ELGamal, Rabin, 椭圆曲线
加密密钥 和 解密密钥 不同
接收者 先将加密密钥发给发送者 (在这个过程中, 加密密钥即使被窃听者知道了也没所谓), 发送者使用加密密钥对通信内容进行加密并发送给接收者, 而只有拥有解密密钥的人 (即接收者本人) 才能够进行解密 加密密码 叫 公钥 pubilc key, 解密密码叫 private key
中间人攻击:
假装成接收者, 向发送者提供自己的公钥, 然后发送者以 假公钥 加密内容, 中间人就可以解密了
对称密码不会被公钥密码取代:
公钥密码处理速度只有对称密码的几百分之一, 因此, 公钥密码并不适合用来对很长的消息内容进行加密
混合密码系统:
用对称密码提高速度, 用公钥密码保护回话密钥
dec 和 dec3 加密可以通过一定的时间来破解, 目前比较好的算法是 aes
aes 又有 ECB CBC CFB OFB CTR 等模式, 不推荐使用 ECB 模式, CBC 和 CTR 比较好 – 《实用密码学》
加密 openssl enc -des3 -a -salt -in IN_FILE_NAME -out OUT_FILE_NAME 解密 openssl enc -d -des3 -a -salt -in IN_FILE_NAME -out OUT_FILE_NAME openssl enc -aes-xxx -a salt -in IN_FILE_NAME -out OUT_FILE_NAME openssl enc -d -aes-xxx -a salt -in IN_FILE_NAME -out OUT_FILE_NAME
单向加密
对数据进行计算特征码, 特性 One-Way (Collision-free)
算法:
md5 已经被攻破 sha1 已经被攻破 sha256 sha512
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
信息认证码
单向加密的延伸应用 message authentication code MAC
数据完整性检验, 通信双方认证
算法:
CBC-MAC HMAC: 使用 md5 和 sha1 算法
MAC 的应用
- SWIFT 环球银行金融电信协会
- IPsec
对互联网基本通信协议 – IP 协议 增加安全性的一种方式, 对通信内容的认证和完整性校验都是采用消息认证码 - SSL/TLS
https
数字签名
- 生成消息签名的行为
由消息发送者完成 (称为对消息签名), 意味着 "我认可该消息的内容" - 验证消息签名的行为
接收者 或者 第三方机构验证者完成, 验证成功意味着这个签名是正确的, 失败意味着这个消息是伪造的
在数字签名中, 生成签名和验证签名都是需要 不同的密钥 完成的
签名密钥只有发送方才有 (private key) 验证密钥是 第三方机构 或者 接收者拥有 (public key) 使用 private key 进行数字签名, 其他人无法生成相同的签名 (密文)
和公钥密码相反的是
数字签名使用 private key 加密生成签名, 用 public key 解密验证签名
实际上, 由于消息一般很长, 不对消息进行签名, 而对消息的散列值进行签名
签名的应用:
如, 确定发布的网页没有被第三方篡改
中间人攻击:
伪装成接收者, 对发送者发送的数据进行接收, 然后以发送者的身份发送给接收者, 接收者误以为他是发送者, 就 确定接收, 然后中间人就可以发送垃圾信息了, 例如篡改网页
证书, 就是 public key
certification authority, CA 认证机构 (就是第三方机构, 用来确认 public key 是不是真的) VeriSign 公司: 最有名的认证公司
证书的标准规范 X.509
公钥基础设施 PKI
假设 a 访问 b, b 为了证明自己是真的, 就要向 CA 证明自己是真的
- 生成一个密钥对
- 然后向 CA 发送一个请求, 生成一个证书 (里面含有公钥信息) 保存到 CA 仓库中
- CA 提供仓库中的证书给 a, 让 a 下载得到 b 的 public key
随机数
伪随机数, 例如可以使用 time() 函数, 然后对一个数取模, 这样容易遭受到攻击
真随机数, 事先在一个名为随机数池的文件中积累随机比特序列, 当密码软件需要伪随机数种子的时候,
可以从这个随机数池中去取出所需长度的随机比特序列来使用 (当前随机池里面的内容要保密, 否则没有意义)
时间: 2024-10-25 23:53:07