安全概述
在典型的场景中,安全主要用于解决4类需求:
- 保密(Security/Confidentiality)
- 鉴别/认证(Authentication)
- 完整性(Integrity)
- 不可否认性(non-repudiation)
对称加密概述
密钥:分为加密密钥和解密密钥
明文:没有进行加密,能够直接代表原文含义的信息
密文:经过加密处理之后,隐藏原文含义的信息
加密:将明文转换成密文的实施过程
解密:将密文转换成明文的实施过程
对称还是非对称,只是K与K’是否相等
加密的方式
- 置换加密
- 转置加密
- 乘积加密
置换加密:原文的字母替换成一个另一个字母, 如:原文:abc 密文:xyz
转置加密:字母还是那些字母,位置交换,如:abc 密文:cab
乘积加密:置换加密和转置加密的乘积:如:abc 密文:zxy
非对称加密(公钥密码)概述
公钥和密钥都有一个产生,公钥公开,私钥保密。
公开密钥的算法的最重要两大数学基础:
- 建立在分解大数的困难度
- 建立在以大素数为模来计算离散对数的困难度
RSA
建立在分解大数的困难度
公钥/私钥长度 至少1024bit
密钥交换概述
对称加密的特点
- 高效
- 密钥交换的问题
- 不如RSA的加密安全程度高,但是当选择256bit的AES,仍然能够胜任绝大多数的安全领域
非对称加密的特点
- 安全性足够高
- 没有密钥交换的问题
- 效率低,对于大数据加密很慢
实际的保密会话应用场景
- 基于高效的对称加密算法对会话进行加密(AES,256Bit Shared Key)
- 会话密钥实时产生且周期性变化
- 基于其他足够安全的方式进行会话密钥的传输和交换
利用公钥密码来交换会话密钥
- 实时随机的会话密钥产生
- 使用对端的公钥对产生的会话密钥加密并传递给对端
- 对端使用私钥解密获取会话密钥
- 双方开始基于共享多线程会话密钥进行对称加密的保密会话同性
Diffie-Hellman密钥交换协议
- 基于以大素数为模计算离散对数的困难度
- 双方各自选定Key,然后以一定算法变换(使得key不以明文传输)后传输给对方
- 双方利用对方交换来的数据和自己选定的key做变换,获得一个一致的结果,作为会话密钥
Hash算法
Hash(散列)函数(算法)的定义是:变长的输入变换成定长的输出。
常见的Hash算法:MD5(128bit) 、 SHA1(160bit)
Hash的特点:
- 易变性:即便原始信息发生1bit的变化,Hash的输出将会有不可预知的巨大变化
- 不可逆:通过hash结果构造出满足的输入信息是不可能的或者及其困难的。
实例:
*文件下载时的MD5 - 消息传送时尾部额外传MD
- CRC校验的作用和不足
- MD检验消息恶劣环境传输的完整性和未受损坏
- 应用程序中对于核心文件/数据库读写的鲁棒性保护,防止掉电和Crash
HMAC (Hash-based Message Authentication Code)
遇到的问题:
直接尾部附带消息摘要的问题(篡改内容的同时篡改摘要)
直接对密码做Hash传输的认证的问题(重放攻击)
HMAC如何解决这个问题:
HMAC就是使用Key对原始消息变换后再进行HASH
电子签名
RSA利用私钥签名
HASH+公钥密码术:成就电子签名
- RSA的低效率特性,导致即便是签名也不适合直接对原始信息进行签名
- 利用HASH先完成消息摘要和完整性鉴别的作用
- 而后对简单的消息摘要进行基于公钥密码术的签名
- 签名一般附着于原始消息尾部或者头部一起发送
数字证书和PKI
公钥作为一个字段存储于数字证书中
证书的交换和传输即可传输/交换公钥
利用签名来保护数字证书本身
数字时代的信任关系: 一个受信任的证书列表
证书链和PKI
人的信任链: 孔子->孔子的徒弟->孔子徒弟的徒弟
数字时代的信任链:证书链
证书签名的不同点:根证书自签名,非根证书父签名
证书的限制:
- 约束
- 用途
- 有效期
基于可信任证书的认证方式被广泛的应用在现代安全领域,比如:WIFI、HTTPS
在HTTPS中,典型的Client对Server的认证和鉴别基于可信任列表