密码学有着深刻的数学背景,看似一门高高在上的贵族知识体系。能够吧啦吧啦一些密码学的名词术语,有助于迅速建立满满的逼格。
因此,在这套笔记的第一部分,汇总一些基本的密码学概念:
- 密码
- 单向散列
- 消息认证码
- 数字签名
- 数字证书
- 伪随机数生成器
- 密码学工具箱
- 隐写术
- 信息安全的常识
为了方便理解,定义几个角色,后面会时不时的进行引用。其实,他(她)们都是经典密码学著作中约定俗成的著名人物。
姓名 | 说明 |
---|---|
Alice | 漂亮姑娘 |
Bob | 帅气小伙 |
Eve | 偷窥癖,热衷于窃听通信内容 |
Mallory | 破坏王,喜欢伪造信息,妨碍正常通信 |
Trent | 可信的第三方 |
Victor | 验证者 |
基本概念一:密码
Alice 和 Bob 正在热恋中,难免发送一些肉麻的消息。消息会在多台通信设备间中转,很有可能被 Eve 偷看。于是 Alice 和 Bob 对消息进行了加密处理,即使被 Eve 窃听,其获取的也是密文,无法得知具体的消息内容。也就是说,密码保证了信息的 机密性 。
从明文生成密文的步骤,称为 加密算法 ,将密文还原为明文的步骤,称为 解密算法 ,加密算法和解密算法统称为 密码算法 。
密码算法由两个重要的部分组成,一个是计算步骤,一个是密钥,基本原理如下图所示:
在现代密码算法思想中,密码算法往往可以公开,但密钥是必须严格保密。这就好比门锁制造商会用相同方法批量生产门锁,但每个门锁都配套独有的钥匙,一旦钥匙丢失,级别再强的门锁也可以被轻易打开。
而根据密钥的使用方法,可以将密码算法分为 对称密码算法 和 非对称密码算法 两种,后者也常常称为 公钥密码算法 。
对称密码算法的其他别名:公共密钥密码算法、传统密码算法、私钥密码算法、共享密钥密码算法。
对称密码算法:加密和解密时采用同一密钥,如下图所示:
非对称密码算法:加密和解密时采用不同密钥,如下图所示:
非对称密码算法体系是20世纪70年代出现的,现代计算机和互联网安全体系,很大程度是基于非对称密码算法体系构建起来的。当然,现代安全体系往往会结合非对称密码算法和对称密码算法的优势,形成了混合密码算法体系。
基本概念二:单项散列
如果你仔细观察,在一些提供软件下载的网站中,除了提供二进制的目标文件,还往往声明一个MD5或SHA字符串。这说明软件发布者具备安全意识,担心有人篡改其发布的软件,在其中植入一些恶意程序。这个字符串就是用单项散列函数计算出来的散列值,散列值也被形象的称为 “数据指纹” 。
现实生活中,侦查员通过将犯罪现场遗留的指纹与嫌疑人的指纹进行比对来确定是否存在关联,而计算机也可以利用数据指纹来确认两段二进制数据是否完全一致。我们不需要一一对比二进制数据,只需要一一比对其数据指纹即可。单项散列函数能够保证不同的二进制序列产生不同的数据指纹 。
总结一句话:单项散列函数保证的不是数据的机密性,而是数据的完整性,或者说不可篡改性。
基本概念三:消息认证码
消息认证码(MAC,Message Authentication Code)是一种能够保证数据完整性和提供认证的密码技术,其主要作用是在保证数据完整性之外,确认 消息是否来自期望的通信对象 。
基本概念四:数字签名
在通信的过程中,保证了数据完整性,对通信对象进行了认证还不够,通信双方还可能对发送的消息进行 “否认” 。比如 Alice 向 Bob 写了一封信,但后来又有点后悔,谎称“当初根本没有写过这封信”,这种行为就称为“否认”。
能够确保完整性、提供认证并防止否认的技术,就是 “数字签名” 。顾名思义,就是对自己发送的内容进行签字,只不过采用的是密码技术。Alice 在信的内容之后签上自己的名字发给 Bob,Bob 收到后对改签名进行 签名验证 ,验证通过后,就代表契约生效,Alice 事后也无法进行否认。
我在上曾经基于大牛阮一峰的网络日志写了一篇讲述数字签名和数字证书的文章,把主体部分再写一遍,文章链接为:数字签名与数字证书
- Bob 有两把钥匙,一把叫做公钥,一把叫做私钥。
- Bob 把公钥给了他的朋友们,Pat、Doug、Susan 每人都有一把。
- Susan 想给 Bob 写一封密信,用 Bob 的公钥进行加密即可。而 Bob 用私钥进行解密。只要 Bob 的私钥不泄漏,别人就无法打开 Susan 的这封密信。
- Bob 给 Susan 回信,为了说明这封信就是自己写的,需要给这封信加盖一个印记,好比皇帝下的圣旨必须加印玉玺是一个道理:
1)第一步,Bob 对回信内容进行 Hash 计算,生成 Digest(摘要)。这里要说明一下,一旦有人篡改了信件内容,Hash 算法保证了摘要一定会发生变化,而且也不可能通过摘要推算信件内容。
2)第二步,Bob 用私钥对这个摘要进行加密,生成了数字签名。
3)第三步,Bob 把数字签名添加到信件上,好比增加一句 “此致,XXX敬上”。
4)第四步,Bob 把签了名的信件发送给 Susan。
5)第五步,Susan 收到信件后,用 Bob 的公钥解密数字签名,成功得到信件摘要,证明此信件确实源自 Bob。同时,Susan 也可以对信件内容再进行 Hash 计算得到一份摘要,对比两份摘要,如果内容完全一致,证明信件内容没有被篡改过。
基本概念五:数字证书
通过数字证书,能够证实信件来源于可信的一方,然而,如果 Doug 想假冒 Bob 和 Susan 进行通信怎么办?继续沿用上一节的例子:
Doug 可能会偷偷使用 Susan 的电脑,将 Bob 的公钥换成自己的公钥。而 Susan 没有发觉使用的公钥已经是 Doug 的了,而 Doug 就用自己的私钥进行上述的数字签名过程,伪装 Bob 与 Susan 进行通信。
而 Susan 终于发现事情不对劲,感觉自己使用的公钥有问题,于是她想到一个办法,希望 Bob 能够到一个权威机构对自己的公钥进行公证,这个权威结构也就是 “证书中心(Certificate Authority,简称CA)” 。证书中心于是用自己的私钥,对 Bob 的公钥和一些相关信息一起加密,生成 "数字证书"(Digital Certificate)。
- Bob 拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。而 Susan 收到信件后,也先用 CA 的公钥解开数字证书,拿到经过认证的公钥,再用这个公钥去验证数字签名,以此来确认是否真的来自 Bob。
这就是数字证书作用。数字证书好比驾照,驾照上记录了驾驶员的姓名、年龄、出生日期等信息,并由交管部门在上面盖章,以示经过权威部门鉴定,可以信任。同理,数字证书也同样记录了姓名、组织、电子邮箱、以及属于此人的 公钥 ,并由权威的 认证机构(Certification Authority,CA) 施加数字签名,也就是说,权威认证机构认定该公钥的确属于证书上记录的人或组织。
实际情况中,往往对数字证书申请者身份的认证,会由一个专门的 注册机构(Registration Authority,RA) 进行处理,以便让 CA 能专注于数字证书的制发和维护。RA 通过与金融机构,如信用报告机构进行合作,对申请人提供的业务和身份信息进行核实,核实通过后通知 CA 颁发相应的证书。
基本概念六:伪随机数生成器
伪随机数生成器(Pseudo Random Number Generator,PRNG)是一种能够模拟产生随机数序列的算法。随机数是密码算法的重要技术基础,承担着 生成密钥 的重要指责。如果伪随机数生成算法不好,就容易被窃听者推测出来,对通信的机密性产生威胁。
基本概念七:密码学工具箱
“密码学家的工具箱” 这个比喻出自布鲁斯.施奈尔写作的《网络信息安全的真相》一书。如下图所示,密码学的几项技术在信息安全中发挥着至关重要的作用,解决了不同维度的威胁问题,让我们再罗列一下这些技术:
- 对称密码
- 非对称密码
- 单项散列函数
- 消息认证码
- 数字签名
基本概念八:隐写术
为了安全的进行通信,人们进行了很多的发明,而密码学的本质是一种让信息变得无法解读的技术。还有一种叫做隐写术的技术,则走的是另外一个路径,它不是让消息内容变得无法解读,而是将真正的消息巧妙的进行隐藏,是信息技术的“障眼法”。
举一个小例子(抄自《图解密码技术》,结城浩):
我 -- 我们先准备一段话
很 -- 很容易看懂的就可以
喜 -- 喜闻乐见的当然更好
欢 -- 欢迎你尝试将另一句话嵌在这段话中
你 -- 你会发现这其实就是一段隐写术
隐写术是一门古老的艺术,远不是上面写的这么简单,是一个非常有意思的领域。将隐写术与密码技术相结合,扬长避短,能够为带来更强大的信息安全保障,后面我也会更深入的进行研究。
基本概念九:信息安全的常识
这里写的一些内容可能会有悖于常识,但细细品味后,更会觉得密码学是一个有趣的领域。
第一、不要使用保密的密码算法
关于秘密,历史和生活告诉我们,越少的人知道,就越安全。然而,这个经验用在密码学中却不适用,主要有两个原因:
- 密码的算法早晚会公诸于世,一旦到了那一天,依靠对密码算法本身保密而建立的安全体系将土崩瓦解,而那些公开密码算法从一开始就没想着要保密,因此算法的暴露根本不影响其安全强度。这其实是一种思想,现代密码体系正是基于这个思想构建的。
- 依靠个人或某个组织开发高强度的密码算法是非常困难的。世界上公认的高强度密码算法,几乎都是经过密码破译者长期尝试破解未果而生存带来的。因此,如果自认为偷偷搞出来的一套“不为人知”的密码算法具有更高的安全性,其实是有点自不量力了。
第二,使用低强度的密码比不进行任何加密更危险
这观点更让人懵逼了。其实这还是在讲述一个思想,那就是人们容易通过“密码”这个词获得一种”错误的安全感”,我们必须清醒的认识到 信息被加密 != 安全强度高 这个道理。使用低强度的密码,自以为获得了安全级别,在处理机密信息时,意识深处会放弃警惕性,这是最危险的。
第三,任何密码总有一天会被破解
如果有人向你推销一种不可能被破解的密码体系时,你一定要打起精神,不要被其欺骗。当然,严格来说,一次性密码本 是绝对不会被破解的(原因在后面的文章中讲述),然而这种密码技术是不具备实际用途的;还有一种可能会实现理想的途径 -- 量子密码,只是现在还为时过早。不要忘记,拥有了量子武器的盾牌,面临的也将是被量子武装的长矛,输赢还是玄学。
第四,密码只是信息安全的一部分
水流的聪明之处在于,它会巧妙的绕开石头。攻击者面对密码技术时,也未必就会选择正面强攻。也许绕道攻击信息持有者的电脑,直接获取加密前或解密后的文件更简单。比起“骗子”,再强大的CPU也会显得很傻。结城浩在《图解密码技术中》说的很棒:
要保证良好的安全性,就需要理解“系统”这一概念本身的性质。复杂的系统就像一根由无数环节相连组成的链条,如果用力拉,链条就会从其中最脆弱的环节断开。因此,系统的强度取决于其中最脆弱的环节的强度。
最错弱的环节并不是密码,而是人。
以上,就是密码学的基本概念。