对称密码体制是如何满足上述要求的
一、通信内容保密--对要传输的数据进行保护,让其他人无法看到/知道
思路 类比 初级示例(高级示例请参见DES、AES算法)
A要向B发送一个机密的消息 A要给B寄一份秘密的信件 A向B发送的消息是字符串:Love(ASCII表示为 0x4C 0x6F 0x76 0x65)
A、B事先共享一个密钥 A、B各有一把相同的钥匙 A、B共享密钥也是字符串:Love(这里取最简单的例子,即消息与密钥相等)
A发送消息前先用密钥处理一下 A写好信后用钥匙锁上箱子 A发送前将密钥与原始消息逐位进行异或,得到的结果为 0x00 0x00 0x00 0x00
A发送处理后的消息(不同于原始消息) A再把箱子寄给对方 A将4字节0x00发给B
接收方用共享的密钥处理收到的消息 B收到后用另一把相同的钥匙打开箱子 B收到后,将结果与共享密钥进行位异或
B得到原始消息 B得到原始的信件 B得到恢复后的字符串Love
说明:
1、异或的概念请参见C语言教程
2、基本术语:发送前的原始消息称为明文,A用密钥处理明文的过程称为加密,加密明文得到的结果称为密文,B用密钥从密文中还原出明文的过程称为解密
换句话说,明文经过加密得到密文,密文经过解密得到明文
从数学角度上讲,明文与密文之间必须具有一一对应的关系(想想为什么?)
二、数据的完整性--能够验证接收到的数据在传输过程中是否被修改(包括有人恶意修改、通信信道产生的自然干扰)
在上例中,如果B收到的内容变成 0x00,0x00,0x00,0x01,则B无法判断(密文)是否被修改。
要想检测收到数据的完整性,通常需要通过其它手段加以保证(后面会涉及)。
PS:IEEE 802.11协议(又称为WiFi)中的无线加密协议WEP就是采用异或操作来保护明文,但是加上了密文的完整性校验机制。
三、事前身份认证--正式传输(机密)数据前,能够确认当前正在与我通信的对方确实就是我期望与之通信的人,即对方不是假冒的
能够明确的是:如果需求二(即数据的完整性)能够得到保证,则身份认证也可以得到保证。
假设A和B共享了密钥K(没有第三人知道),A为了验证远方正在与之通信的人确实就是B,用K加密一个问题“浙江的省会是哪个城市”,发给B
B收到后解密得到问题(即明文),再用K加密答案“杭州”并发回给A,A解密B的答案得到明文“杭州”。至此,A可以验证对方就是B。
分析:对方的答案解密后正确,说明他(她)知道原始问题,这需要知道正确的密钥(随便用一个密钥解密A发出的密文,得不到正确的问题)
而除了A外只有B知道密钥,所以对方只能是B。
基本术语:A与B之间为了达到某个特定的目标,共同执行的明确的规定或规则,称为协议。
上述例子中,规则就是:A加密提问,B加密回答,其目标是:A确定B的真实身份,因而称为身份认证协议,简称认证协议
说明:为了保证安全,每次A认证B的时候,提的问题都不能与前面重复,否则会面临重放攻击。
设想一下,有个坏人E想冒充B,如果A每次认证B时都问相同的问题,则E只要偷偷截获B的答案(注意是密文哦)
然后在下次A认证B的时候,E把B的答案提交给A,使A误信E为B,达到欺骗A的目的。
PS:密码协议需要经过精心设计,才能保证充分的安全。
四、事后对方不可抵赖--当前通信结束后,可以给出明确的证据证明对方参与了本次通信,使对方无法否认或抵赖
不能做到。因为双方共享相同的密钥,都可以伪造通信记录(密文),第三方无法分辨。
对称密码体制引出的问题:
1、密钥如何在通信双方间共享
如果A,B相互认识,则A事先选择好一个密钥,然后通过可信途径(比如给B打电话、发手机短信等)通知对方。
确切地说,这称为密钥的分配(或分发)
如果通信双方是陌生人呢?如何通过不安全的信道在陌生人之间共享密钥?(双方事先不认识,所以没有对方的可信的联系方式)
数学家已经给我们找到了办法,后面会作介绍。
PS:陌生人之间需要安全通信的典型例子:在京东商城上购买电子产品。
2、密钥维护:A与n个人通信需要n个密钥,n越大,维护越困难(要区分、保存多个不同的密钥)
3、密钥的安全需要双方同时保证,密钥安全性不完全可控
一方泄露密钥,另一方只能放弃此密钥,且无法判断密钥是被对方故意泄露还是被黑客盗取?(从某种角度讲,不信任是密码学产生的土壤)
从这个角度,我们得到结论:尽量不要使用静态共享密钥(多次使用可能有风险)
共享密钥最好临时生成(称为临时共享密钥),随用随扔。
临时共享密钥的一个好处是:如果密钥万一泄露,则仅有被该密钥加密的密文能被解密,其他密钥产生的密文安全性不受影响