安全要解决什么问题?
- 保密(Security、Confidentiality):只想让部分有权限的人知晓,其他人是看不到的;
- 鉴别、认证(Authentication):确保通信的对方就是自己信得过的人;
- 完整性(Integrity):能够验证信息在传输过程中是否发生了篡改,或者数据丢失等现象
- 不可否认性(Non-repudiation):谁发的信息,能够表明发送者等身份。
一些常用术语:
- 密钥:分为加密密钥和解密密钥。
- 明文:没有进行加密,能够直接代表原文含义的信息。
- 密文:经过加密处理之后,隐藏原文含义的信息。
- 加密:将原文转换成密文的实施过程。
- 解密:将密文转换成明文的实施过程。
密码术
说到密码术似乎感觉很高大上,这不都是各种谍战片里面经常出现的吗?其实,在我们现实生活中,多多少少也会接触一些简单的密码术,例如:字母加密、藏头诗、倒写文等。我们可以采用任何规则来定义密码术,但是通常我们并不会自己去写新的密码术,为什么呢?
这主要是因为:
- 安全性:没有经过验证的密码术,确保不了该密码术一定安全。
- 密码术里面是否有后门,因为自己定义的密码术不公开,不知道里面是否包含一些其他后门的类似程序。
概括来讲,加密主要分为:置换加密 、转置加密、乘积加密(多次置换加密和转置加密的混合使用)。
加密模型
对称加密模型
DES
AES
应用场景
存在的问题:密钥如何交换?
非对称加密模型
下面首先通过一个例子来简单说明公钥私钥、数字签名、消息摘要是什么,然后再详细分析非对称加密模型里面的重要知识点:
鲍勃采用某种产生密钥的算法,生成两把密钥:一把是公钥,一把是私钥。
鲍勃将自己的公钥发送给他的朋友--帕蒂、道格、苏珊--每人一把,以后谁想给鲍勃写私密邮件,则可以使用该公钥进行加密。
现在苏珊想给鲍勃写一封保密邮件,他写完之后用鲍勃的公钥加密,就可以达到保密的效果。
鲍勃收到信之后,用自己的私钥解密,看到了信件的内容。这里要强调的是,只要鲍勃的私钥不泄漏,这封信就是安全的,即使落在别人的手里,也无法解密。
鲍勃给苏珊回信,决定采用“数字签名”。他写完之后先用Hash函数,生成信件的摘要(Digest)。
然后,鲍勃再使用私钥对这个摘要加密,生成“数字签名”。
鲍勃将这个签名附在邮件下方,一起发给苏珊。
苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行比对。如果两者一致,就证明这封信未被修改过。
复杂的情况出现了,道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成”数字签名”,写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找”证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成”数字证书”(Digital Certificate)。
鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明”数字签名”是否真的是鲍勃签的。
- 公钥和私钥
通过上面的例子,我们可以很轻松的知道,公钥和私钥都是由鲍勃产生的,私钥由自己保管,公钥交可以交给任何人。
应用场景:
- 公钥算法的理论基石
数学是科学之基
基础学科研究之物,虚虚实实,先虚后实
公钥算法的最重要的两大数学基础
建立在分解大数的困难度
建立在以大素数为模来计算离散对数的困难度 - RSA算法
RSA的名字由来?就是三个科学家的名字首字母的组合
建立在分解大数的困难度
公钥私钥的长度至少1024bit
两大加密模型的优缺点:
优点:相对于非对称加密非常高效。
缺点:密钥交换问题
不如RSA的加密安全程度高,但是当选择256bit的AES时,仍然能胜任绝大多数的安全领域
非对称加密的优缺点:
优点:安全性足够高
没有密钥交换的问题
缺点:效率低,对于大数据加密很慢
密钥交换
实际的保密会话场景:
- 基于高效的 对称加密 算法对会话进行加密
- 会话密钥实时产生且周期性变化
- 基于其他足够安全的方式进行会话密钥的传输和交换
利用公钥密钥来交换会话密钥
- 实时随机的会话密钥产生
- 使用对端的的公钥对产生的会话密钥加密并传递给对端
- 对段使用私钥解密获取会话密钥
- 双方开始基于共享的会话密钥进行对称加密的保密会话通信
其他的密钥交换方式
Diffie-Hellman密钥交换协议
- 基于以大素数为模计算离散对数的困难度
- 双方各自选定Key,然后以一定算法变换(使得Key不以明文传输)后传输给对方
- 双方利用对方交换过来的数据和自己选定的key做变换,获得一个一致的结果,作为会话密钥
消息摘要
- Hash与散列函数的定义与特点
定义:变长的输入变成定长的输出。
特点:
易变性:即便原始信息发生1bit的变化,Hash的输出将会有不可预知的巨大变化。
不可逆性:通过Hash的结果构造出满足的输入信息是不可能的,或者极其困难的。
常见的Hash算法:MD5(128位)、SHA1(160位)
- 消息摘要和数字指纹
人的指纹的特点:
双胞胎的指纹不同
通过指纹猜不出它的主人
与Hash的对应关系:
易变性
不可逆
数字指纹由此而来,通过对消息采用某种Hash算法得到的输出就是消息摘要,也叫数字指纹。
- Hash的应用场景
- 防篡改
基于易变特性
保证完整性
示例:
网络下载某个文件时,都会指定该文件的一个MD5值,确保文件没有被替换
消息传送时尾部额外传MD 防损坏
基于易变特性
保证完整性
示例:
CRC校验的作用和不足
MD校验消息恶劣环境传输的完整性和未受损坏
应用程序中对于核心文件/数据库读写的鲁棒性保护,防止掉电和Crash认证
基于不可逆特性
可认证对端
示例:
HTTP的Basic和Digest认证
PPP的PAP和CHAP认证
手机登陆密码和隐藏MMI的设计
HMAC
我们遇到了什么问题?
直接尾部附带消息摘要的问题(篡改内容的同时篡改摘要)
直接对密码做Hash传输的认证的问题(重放攻击)HMAC怎么解决的?
HMAC就是使用Key对原始信息变换后再进行Hash
电子签名
签名要解决什么问题?
通过上面的图例说明我们知道对于公钥密码术,我们不仅可以使用公钥加密,反过来也可以通过公钥来实现电子签名。
证书与PKI
- 证书的作用
证书的存储和交换
公钥作为一个字段存储于数字证书中
证书的交换和传输即可传输/交换公钥现代信任基石
证书只是存储和交换公钥的吗?那我不可以吧公钥直接作为一个文件来存储和交换吗?
另外,我不可以篡改证书吗?我作为第三者,篡改苏珊发给鲍勃的证书,把里面的公钥改成我自己的,由此来HACK别人发给鲍勃的信息。
利用签名来保护数字证书本身。
- 证书链和PKI
根证书自签名,非根证书父签名
证书的限制:约束、拥堵、有效期
参考资料
http://www.youdzone.com/signature.html
http://www.jikexueyuan.com/course/32_7.html?ss=1
http://www.cnblogs.com/f1194361820/archive/2015/01/29/4260025.html