《图解密码技术》(点击查看详情)
1、写在前面的话
因为接触了微信公众号开发,之中涉及支付功能时用到了大量签名加密之类的东西,对于密码安全这一块,其实一直不是很明白,大部分方法自己在用到时也是去直接google,然后复制粘贴,可以说完全不知其所以然。
加密这一块查了下有很多人推荐这本书,于是就决定看看。我个人涉及到真正的加密技术的实际应用可能不算那么多,所以这里笔记准备记录一些浅显和核心的东西。
2、加密和解密
发送信息和接受信息的过程中,因为传递过程涉及多方,可能会存在窃听者。就像你给别人写了一封信,在寄出的途中,如果有人恶意想要偷窥信件的内容,是完全可能的,比如邮递员。
如果不想让别人看到明确的信息,就要对信息进行加密,接收者进行解密,这样就算中途被人看到信息,他也看不明白信息的内容。
加密之前的消息称为“明文”,即明白的谁都看得懂的信息,加密之后的消息则称为“密文”。
接收者还原密文称之为“解密”,如果是第三方试图还原,则称之为“破译”。
另外,密码安全涉及的信息方面很广,主要在机密性、完整性、认证和不可否认性上做文章。而相应的,也就诞生了用来应对的密码技术:
3、隐写术和数字水印
密码主要是一种能够让消息内容变得无法解读的技术。除此之外,还有另外一种技术,不是将消息内容变得无法解读,而是能够隐藏信息,这种技术叫做隐写术。
隐写术的第一个典型就是大家都知道的藏头诗:
我画蓝江水悠悠,
爱晚亭上枫叶愁。
秋月溶溶照佛寺,
香烟袅袅绕经楼。
1
我画蓝江水悠悠,
2
爱晚亭上枫叶愁。
3
秋月溶溶照佛寺,
4
香烟袅袅绕经楼。
隐写术在计算机中的应用,数字水印就是其中的一种,将著作权拥有者及购买者的信息嵌入文件中的技术,但仅凭数字水印技术是无法对信息进行保密的,因此需要和其他技术配合使用。
比如将密码和隐写术结合使用,将明文加密后通过隐写术隐藏到图片中,这样即便有人发现了密文的存在,也无法读取内容。密码隐藏的是消息内容,隐写书隐藏的是消息本身。
4、历史上的密码
4.1 恺撒密码
假设我们要保密的信息为 yoshiko 这个女性的名字,我们将每个字母按字母表顺序向后平移3位并转换为大写字母,即:
- y --> B
- o --> R
- s --> V
- h --> K
- i --> L
- k --> N
- o --> R
于是,yoshiko 经过加密就变成了 BRVKLNR 。在这里,将字母平移n位替换,就是密码的算法,这里平移的数量n就是密钥,这种加密叫做恺撒密码。
当然,解密的话,接收者也要知道密钥,即这里是3,反向平移即可得到明文。如果是第三方想要破解该密文,因为字母表只有26个字母,所以密钥实际上也只有0到25共26种,破译者只要从0到25挨个尝试密钥破解,总会得到明文。这种方法称之为暴力破解,也称之为穷举搜索。
4.2 简单替换密码
恺撒密码实际上也是简单替换密码的一种,因为其本质就是字母的替换,但是因为替换的规则是确定的,所以更为简单。
字母之间一对一的对应替换,则是简单替换密码,例如:
当然,简单替换密码的解密就必须要依赖替换表了,所以发送者和接收者都必须同时拥有替换表,而这份替换表也就相当于简单替换密码的密钥。
另外,一个密码能够使用的“所有密钥的集合”称之为密钥空间,密钥空间越大,暴力破解就越困难。简单替换密码中,每个字母可以随意对应字母表中无匹配的任意一个,所以实际上密钥空间为 36*25*...*2*1 = 403291461126605635584000000;而凯撒密码只有0-25共26种,所以简单替换密码更难通过暴力破解来破译,但是,使用“频率分析”的密码破译方法,则能够破译简单替换密码。(频率分析的破译方法在书中有详细例子page27,很有意思,这里不再展开)
5、加密算法和密钥
凯撒密码:
- 加密算法:将明文中的各个字母按照指定的字母数平移
- 密钥:平移的字母数量
简单替换密码:
- 加密算法:按照替换表对字母表进行替换
- 密钥:替换表
不难看出,加密算法是固定的,密钥是可变的。因为如果每次加密都必须完全产生新的加密算法,那太麻烦了,于是我们喜欢加密算法可以重复使用,但是随着重复使用的次数其破译可能性也逐渐增大,所以准备了可变的部分,即密钥。所以加密算法和密钥分开考虑,就解决了加密算法希望得到重复利用,但重复使用会增加风险这个难题。