密码学安全性简介
四种安全性
在密码学中,想要安全的传输消息,至少得满足以下四种安全性。密码学假设建立在多种指数级难题上。
1 唯密文(Ciphertext Only)安全
窃听者只能监测传输途径上的密文,窃听者不知道任何有关明文的消息,但是能够结合加密算法对密文进行统计学分析,以此为突破口进行明文恢复。
很显然,一个能够经受多年公开检验的算法在设计时一定是这样的。
窃听者并没有无限的计算资源,对于指数级的计算量将无能为力。
一个最典型的例子是使用一个和明文等长的密钥进行加密,只要能够保证密钥是随机的就能做到COA安全,因为窃听者不知道任何有关密钥的信息(实际上任何第三方都不应该知道一点有关密钥的信息),在M->C的映射上它完全不能通过统计学分析出明文。即使密钥是伪随机的【通过一个短密钥派生出的长密钥】,只要窃听者不能轻松计算指数级难题,就无法确认这个密钥到底是真随机还是伪随机的,这保证了窃听者无法知道有关密钥的任何消息。
2 已知明文(Known Plaintext)安全
在这个阶段,窃听者通过各种手段掌握到本次通信时的一些明文——密文对,那么就能够对密文进一步做统计学分析,这样将大大降低明文恢复难度。
一个最常见的就是古典密码——单表映射密码【通过将26个字母、空格、逗号、句号等构成一张表,然后随机设置一一映射关系】容易泄露明文的统计分布特征。因为早在数百年前,英文字母的使用频率表已经被统计学家做出来了。对于密文的逐渐增长,根据依概率收敛原则,每个符号的频率分布将收敛于统计出的频率表。单表映射的字符一旦超过数百个就会变得极度容易破解。
另一个更知名的古典密码——维吉尼亚密码【将字符数字化,通过设置一个单词作为密钥进行模加运算映射】虽然能够避免直接的字符频率泄露,但是其最致命的缺陷就是密钥的周期性。当正确猜测到密钥长度时,字符分布频率的平方和将会与错误长度密钥的该值有着天大的差别。除此之外,还可以暴力枚举密钥长度,找到该值完全一样的密钥长度,获取最大公因数即为密钥长度。当确定密钥长度之后,哪怕暴力枚举破解也能够在可接受时间内完成。
即使不泄露明文,但是知晓明密文的统计特征将会是致命的。
3 选择明文(Chosen Plaintext)安全
为了弄清楚发送方的消息,第三方完全可以通过掌握的信息进行猜测,然后冒充通信的一方进行二次查询。详细一点,二战时期美国曾截获日本的两次加密通信,第一次的密文中有一个词与第二次通信的一个词一样,而且第一次出事的地点在中途岛,那么美国完全能够猜测下一个目标将是中途岛。明文信息从历史消息上泄露。
为了避免这种情况,一直观的办法是每次通信时都更换密钥,但是即便是科技发达的今天,两台设备安全共享密钥也需要以一定时间,而且容易面临中间人接入的风险。因此,在不更换密钥的情况下,可以采用之前提到过的伪随机方法,使用一定长度的真随机数字插入到加密过程中,设计加密算法让真随机的随机性向每个符号扩展。这样就实现了历史通话不泄露明文消息。【值得一提的是,在通信量达到一定程度时,出现的真随机数碰撞概率超过某个预设参数时,应当更换密钥】
4 选择密文(Chosen Ciphertext)安全
在这里,第三方不仅能翻阅你的历史记录,甚至能有逻辑地篡改通信路径上传输地密文,这样消息地完整性就被破坏了。比如说某次用户与银行之间进行通信时,由于真随机数碰撞泄露了1000元与10000元的明文,第三方完全可以拦截到转账1000元的密文并改成转账10000元的密文。为了保证消息的完整性,可以使用MAC计算密文的哈希值,将哈希值一并传输过去,这样,整条消息只要有任何一个字符错误都会被丢弃。