什么是密码学?为什么你需要知道它?
第1章:什么是密码学?为什么你需要知道它?
纸条上的秘密
想象一下这个场景:下课铃声刚刚响起,教室里一片喧闹。你坐在座位上,想要把一个小秘密传给你的好朋友。你们之间隔着好几排同学,而那个总是爱打探消息的“八卦大王”正眼巴巴地盯着你们的一举一动。你会怎么做?
你可能会把纸条握在手心里,趁着没人注意的时候悄悄递过去。或者,你更聪明一点——把纸条上的内容先用一种奇怪的方式写出来,只有你的好朋友才能看懂。比如,把每个字都往后推一个字母,“我喜欢你”就成了“噢券厌欢你”;或者用谐音,“晚上七点老地方见”变成“完场气电老滴访见”。这样一来,就算“八卦大王”中途截获了纸条,看到的也只是一堆莫名其妙的符号,根本不知道你们在说什么。
恭喜你,你刚才做的其实就是密码学(Cryptography)最核心的事情:把真实的信息(明文)转换成只有特定的人才能理解的秘密信息(密文),而把密文还原成明文的过程叫做解密。
现在,让我们把时间拨回到两千多年前的古罗马。有一位威风凛凛的将军,名叫尤利乌斯·凯撒。他带领罗马军团南征北战,建立了庞大的罗马帝国。但有一个问题始终困扰着他:如何把自己写在羊皮纸上的作战命令安全地送到远在前线的将领手中?要知道,那时候的邮差可不像今天的快递小哥那样有严格的保密协议,他们很可能会被敌人收买,或者在半路上被截获。
凯撒想出了一个聪明的办法。他没有直接写下真正的命令,而是使用了我们现在称为“凯撒密码”的方法:把字母表向后移动三位。比如,字母A变成D,B变成E,C变成F……这样一来,真实的命令就被隐藏在了一堆乱码之中。即便是邮差中途拆开了羊皮纸,看到的也只是一些莫名其妙的字母,根本无法理解其中的含义。而前线的将领们知道这个秘密规则,只需要把字母向前移动三位,就能还原出真正的命令了。
这种古老而巧妙的方法,开启了人类使用密码的漫长历史。而密码学,正是研究如何保护信息安全的一门学问——它教会我们如何把秘密藏起来,又如何把秘密找出来。
当密码学走进你的生活
也许你会想:凯撒将军的密码是两千多年前的事了,和我有什么关系?我又不是什么大将军,我的纸条里也没什么了不起的秘密。
如果你这样想,那就大错特错了。
事实上,密码学每天都在你身边发生着,而且次数多得超乎你的想象。当你打开手机查看微信消息时,密码学在保护你的聊天记录不被别人偷看;当你登录游戏账号输入密码时,密码学在验证你的身份,防止别人冒充你进入游戏;当你用手机扫码支付购买零食时,密码学在确保这笔交易不被篡改,保证你的钱准确地到达卖家手中。
你可能觉得这太神奇了,让我慢慢给你解释。
想想看,如果你和一个朋友在微信上聊天,你们之间的消息是怎么传递的?你的手机先把消息发送到腾讯的服务器,然后腾讯的服务器再转发给你朋友的手机。在这个过程中,你的消息要经过很多很多“中间人”——网络设备、路由器、服务器……理论上,任何一个环节的人都可能看到你的消息内容。
这就好比你想要把一封情书交给隔壁班的女生,但又不想让别人看到。你不可能直接拿着情书走过去,因为一路上会有无数人看到。于是你想了一个办法:把情书装进一个带锁的盒子里,只有收件人有钥匙可以打开。你把锁好的盒子交给女生,她用钥匙打开,就能看到情书了。在这个过程中,即使有人截获了盒子,没有钥匙也打不开,里面的情书内容就安全了。
密码学就是那把神奇的“锁”,而数学就是制造这把“锁”和“钥匙”的工厂。
密码学的三大守护神
如果把密码学比作一位保护信息安全的超级英雄,那么它有三位得力的助手,我们称之为密码学的三大目标:机密性、完整性和认证性。这三位“守护神”各有各的本领,缺一不可。
机密性:只让该看到的人看到
机密性(Confidentiality)是密码学最基本的目标,意思很简单:只有指定的人能够看到信息的真实内容,其他人即使截获了信息也看不懂。
我们来玩一个小游戏。现在有一句话:“今天数学考试考了95分。”如果你用一种只有你和好朋友知道的方式把这句话加密,比如把每个汉字用拼音字母替代,“今天数学考试考了95分”可能就变成了“enf xfgl udkqu udkqu le enf udkqu 95udf”。现在,如果“八卦大王”截获了这张纸条,他看到的只是一堆莫名其妙的字母,完全不知道你在说什么。但你的好朋友知道你们之间的秘密规则,他能够轻松地把这些字母还原成原来的句子。这就实现了机密性。
在现实生活中,机密性的应用非常广泛。军事命令、外交密电、商业机密、个人隐私……所有这些不想让别人知道的信息,都需要依靠密码学的机密性来保护。试想一下,如果没有密码学,你的银行卡密码可能被黑客盗取,你的聊天记录可能被监控,你的病历可能被泄露给无关人员……后果简直不堪设想。
完整性:确保信息没有被篡改
现在你知道怎么保护信息不被别人看到了,但新的问题来了:信息在传递过程中有没有被人偷偷修改过?
这可不是杞人忧天。想象一下这个场景:你给妈妈发了一条短信:“妈妈,我需要500块钱买学习资料。”妈妈收到短信后,把钱转给了你。但实际上,你的手机被坏人入侵了,他截获了这条短信,把“500”改成了“5000”。妈妈收到改过的短信后,可能不假思索地就把5000块钱转了过去。等你发现问题时,钱已经追不回来了。
这就是信息完整性(Integrity)被破坏的后果。完整性的目标是确保信息在传输过程中没有被篡改、删除或添加任何内容。如果信息有丝毫的改变,接收者必须能够发现这一点。
在古代,人们是怎么验证信息完整性的呢?有一种方法叫做“封泥”。古人写信时,把写好的竹简用绳子捆起来,然后在绳结处涂上黏土,盖上印章。如果有人想要打开竹简偷看内容,就必须割断绳子、打开封泥,这样收信人就会发现绳子和封泥被破坏过,从而知道信息可能被篡改过了。
现代密码学也有类似的方法。我们可以把信息的“指纹”计算出来,这个“指纹”在密码学中叫做哈希值(Hash Value)或消息摘要(Message Digest)。就像每个人的指纹都独一无二一样,每一段信息都有独一无二的哈希值。如果你改变了信息中的任何一个字符——哪怕只是一个标点符号——重新计算出的哈希值都会完全不同。接收者只需要验证收到的信息计算出的哈希值和发送者提供的是否一致,就能判断信息是否被篡改过。
认证性:确认信息确实来自声称的发送者
假设你收到一条消息:“我是你的班主任,明天不用来上学了。”你怎么知道这条消息真的来自你的班主任,而不是某个调皮同学搞的恶作剧?
认证性(Authentication)正是解决这个问题的。认证的目标是确认信息确实是由声称的发送者发出的,而不是有人冒充的。
在古代,认证的方式有很多种。皇帝发布的诏书会盖上玉玺印章,因为玉玺是皇帝独一无二的印信,普通人无法仿造。武侠小说里的高手们会使用各种信物——玉佩、半块铜镜、特定的信物——作为身份认证的凭证。
现代密码学提供了更加精妙的认证方法。想象一下,每一个人都有一对独特的“魔法钥匙”:一把是私钥(Private Key),只有你自己知道,就像你的指纹一样独一无二;另一把是公钥(Public Key),你可以放心地告诉所有人,就像你的名字一样公开。当你想发送一条消息并证明“这确实是我发的”时,你用私钥给消息加一个“数字签名”。任何收到消息的人都可以用你的公钥来验证这个签名——如果验证通过,就说明这条消息确实是你发的,因为只有你的私钥才能产生能被你的公钥验证通过的签名。
密码学的这三大目标——机密性、完整性、认证性——就像是信息安全的三大支柱,缺一不可。它们共同构成了现代密码学的基石,也保护着我们在数字世界中的每一天。
快递包裹里的密码学
如果你觉得上面的解释还是有点抽象,那么让我用一个你肯定熟悉的例子——快递包裹——来详细说明密码学是如何工作的。
想象你要给远在外地的奶奶寄一封重要的家书。这封家书价值连城(至少对你来说是这样的),你可不希望它在运输过程中被人偷看或者篡改。你会怎么做?
首先,你需要把家书放进一个信封里封好。这个信封就是加密的过程。加密就是把你的明文(可读的信息)转换成密文(看起来毫无意义的乱码)。只有拥有正确“钥匙”的人才能打开信封,看到里面的内容。
那么,怎么加密呢?你可能会和奶奶事先约定一个暗号。比如,你们约定:每个汉字用它在拼音键盘上位置对应的数字替代。这样一来,“奶奶,我很想你”可能就变成了“nn w3 hx3 s4 n2”。即使快递员偷看了信封,也只能看到一堆莫名其妙的数字,根本不知道你在说什么。
奶奶收到信封后,需要用约定的规则把这堆数字还原成真正的文字。这个过程就是解密。解密是加密的逆过程,需要使用正确的密钥才能完成。
但是等等,这里还有一个问题:如果有人在运输过程中偷偷拆开信封,看完内容后再重新封好,你和奶奶会发现吗?答案是:如果你只是把信放进普通信封里,你根本不会发现。这就像你把一张没有封口的纸条传给同学,中途被人改了几个字你却浑然不知。
所以,你需要一个更加安全的信封——这就是完整性保护。你可以用一种特殊的方法给信封加一个“封条”,比如在信封开口处撒上一些只有在特定光线下才能看到的粉末,或者在信封上贴一个一旦撕开就会显示“已开封”字样的贴纸。只要奶奶收到信封时发现封条完好无损,就说明信在运输过程中没有被拆开过。
更高级的方法是,你可以计算家书内容的“指纹”(哈希值),把这个指纹写在一张小纸条上,和家书一起放进信封。奶奶收到后,首先重新计算一下家书的指纹,和信封里的纸条对照,如果完全一致,就说明家书完好无损;如果不一样,那就说明有人在途中篡改了内容。
最后,你还需要证明“这封信确实是我寄的,而不是别人冒充我寄的”。你可以在信封上签名,或者在信封里附上一张写着“此信由小明亲笔”的字条。但这都太容易被伪造了。更好的方法是使用数字签名:你用只有你自己知道的私钥给家书加一个“数字印章”,奶奶收到后可以用你公开给她的公钥来验证这个印章——如果印章是真的,就说明这封信确实是你寄的。
你看,一个简单的寄快递场景,就包含了密码学的所有核心要素:加密、解密、完整性验证和身份认证。现实世界中的网络安全,比这要复杂得多,但基本原理是一样的。
密码学史上的有趣人物
任何一门学科的发展都离不开那些富有好奇心和创造力的先驱者。密码学也不例外。在漫长的历史长河中,无数杰出的头脑为这门学科的发展做出了贡献。让我给你介绍几位特别有趣的人物,他们的故事或许能让你对密码学产生更浓厚的兴趣。
阿兰·图灵:从破译密码到人工智能之父
如果你看过电影《模仿游戏》(The Imitation Game),一定对阿兰·图灵(Alan Turing)这个名字不陌生。1912年,图灵出生于英国伦敦,从小就展现出了惊人的数学天赋。
在第二次世界大战期间,纳粹德国使用了一种叫做“恩尼格玛”(Enigma)的加密机器来传递军事指令。这种机器能够产生上万亿种不同的密码组合,据说即使敌人截获了加密信息,想要破解也需要几百万年的时间。当时,几乎所有人都认为恩尼格玛是不可战胜的。
但图灵不这么想。他带领一群天才数学家,在英国布莱切利公园建立了一个秘密实验室,专门研究如何破译恩尼格玛密码。经过艰苦卓绝的努力,图灵和他的团队终于发明了一种叫做“炸弹”(Bombe)的机器,成功破译了德军的密码系统。
据估计,图灵的这一成就至少让第二次世界大战提前两年结束,拯救了数千万人的生命。丘吉尔首相曾经说过,如果没有破译恩尼格玛,整个战争的结果可能会完全不同。
然而,这样一位功勋卓著的英雄,战后却因为个人性取向问题遭受了不公正的对待。1954年,年仅41岁的图灵在曼彻斯特的公寓中去世。直到2013年,英国女王伊丽莎白二世才正式追授图灵特赦,为这位天才数学家平反昭雪。
图灵不仅是一位密码破译专家,还是人工智能之父。他提出了著名的“图灵测试”——如果一台机器能够与人类对话而不被识别出是机器,那么就可以说这台机器具有“智能”。今天,当你和智能客服聊天、和语音助手对话时,你其实正在体验图灵当年的远见卓识。
埃德加·爱伦·坡:作家里的密码高手
提到埃德加·爱伦·坡(Edgar Allan Poe),你可能会想到《黑猫》《乌鸦》《厄舍古厦的倒塌》这些经典的惊悚小说。但你可能不知道,爱伦·坡还是一位狂热的密码学爱好者。
1843年,爱伦·坡在《亚历山大每周新闻》上发表了一篇文章,声称自己能够破译任何密码,并邀请读者向他发送加密信息进行挑战。结果,爱伦·坡收到了数百封加密信件,他几乎全部成功破译,这一壮举让他声名大噪。
爱伦·坡对密码学的痴迷也体现在他的文学作品中。在他的侦探小说《金甲虫》中,主人公通过破译一张加密的羊皮纸上的密码,发现了海盗的宝藏。这部小说被认为是密码学在文学中的经典呈现,影响了后来无数关于密码和宝藏的探险故事。
爱伦·坡相信,密码术是一种“纯粹智力的游戏”,是人类思维能力的最高体现。他的这一观点至今仍然影响着密码学的研究方向——现代密码学不仅追求安全性,也追求算法的优雅和效率。
布莱切利公园的“破译者俱乐部"
除了图灵之外,布莱切利公园还有许多传奇人物。琼·克拉克(Joan Clarke)就是其中之一。
琼是一位天赋异禀的数学家,但在那个年代,女性不被允许参与军事情报工作。她只能以“平民”的身份加入布莱切利公园,被分配到图灵的团队工作。
尽管遭受性别歧视,琼的工作能力丝毫不逊色于任何一位男性同事。她在破译恩尼格玛密码的过程中发挥了关键作用,特别是在设计更高效的破解方法方面做出了重要贡献。后来,她和图灵订婚了,虽然最终因为性格不合取消了婚礼,但琼在密码学领域的地位是不可磨灭的。
另一位值得一提的是戈登·韦尔奇曼(Gordon Welchman)。他在布莱切利公园开发了一种叫做“便车”(Hindsight)的设备,大幅提高了密码破译的效率。韦尔奇曼后来移居美国,在密码学领域继续做出贡献。他的回忆录《布莱切利公园的绝密行动》(The Hut Six Story)是了解二战密码破译历史的重要文献。
这些故事告诉我们,密码学的发展凝聚了无数人的智慧和心血。从凯撒的古老密码,到图灵的破译机器,再到今天的量子加密技术,密码学始终是人类最聪明头脑的竞技场。
你需要知道的密码学基础概念
在我们正式踏上密码学的奇妙旅程之前,有一些基础概念你需要先了解。这些概念就像是学习任何一门新学科前的“预备知识”,掌握了它们,你就能更好地理解后面章节的内容。
明文与密文:信息的两种面孔
明文(Plaintext)是指原始的、可以直接阅读的信息。你写的日记、发的短信、邮件的内容,都是明文。明文的特点是任何人都能理解其含义。
密文(Ciphertext)是明文经过加密算法处理后的结果。密文看起来就像一堆毫无规律的乱码,没有密钥的人根本无法理解其中的含义。
加密和解密的过程可以简单地表示为:
$$密文 = 加密算法(明文, 密钥)$$
$$明文 = 解密算法(密文, 密钥)$$
这里的密钥(Key)是一种特殊的信息,是加密和解密过程中必不可少的关键参数。就像一把锁需要钥匙才能打开一样,加密后的信息也需要正确的密钥才能还原。
对称加密:一把钥匙的学问
你有没有遇到过这种情况:你和同学约定了一个暗号,比如把每个字都用同音字替代。你们两个人都知道这个暗号(密钥),可以用来加密信息,也可以用来解密信息。这就是对称加密(Symmetric Encryption)的基本原理。
在对称加密中,加密和解密使用相同的密钥。就像一把钥匙既能锁门也能开门一样,发信人和收信人拥有相同的密钥,用它来加密,也用它来解密。
对称加密的优点是效率很高,适合加密大量的数据。但它有一个致命的弱点:密钥的分发问题。在你用对称加密和朋友通信之前,你们必须先安全地交换密钥——但如果你们已经有安全的信道可以交换密钥,为什么不直接用它来传信息呢?
对称加密的代表算法有DES(Data Encryption Standard,数据加密标准)、AES(Advanced Encryption Standard,高级加密标准)等。我们会在后面的章节中详细介绍这些算法。
非对称加密:公钥与私钥的奇妙组合
为了解决对称加密的密钥分发问题,密码学家们发明了一种全新的加密方式——非对称加密(Asymmetric Encryption)。
在非对称加密中,每个人有两把钥匙:一把是公钥(Public Key),可以公开给所有人;另一把是私钥(Private Key),必须严格保密,谁也不能告诉。
这两把钥匙是数学上关联的一对,但有这样一个神奇的特性:用公钥加密的信息,只能用对应的私钥解密;反过来,用私钥加密的信息,也只能用对应的公钥解密。就像一个特别的锁,这把锁有两把钥匙,但一把锁只能配一把钥匙——公钥锁上的门只能用私钥打开,私钥锁上的门只能用公钥打开。
这种奇妙的性质带来了无限可能。如果你想给小明发送秘密信息,你只需要用小明的公钥对信息进行加密,然后发给他。小明收到后,用自己的私钥解密,就能看到信息了。在这个过程中,即使有人截获了密文和公钥,也无法解密,因为他没有私钥。
非对称加密的另一个神奇应用是数字签名。你可以用自己的私钥对信息进行“签名”,任何拥有你公钥的人都可以验证这个签名确实是你生成的——因为只有你的私钥才能产生能被你的公钥验证通过的数字签名。这完美地解决了认证问题。
非对称加密的代表算法是RSA算法(由Rivest、Shamir和Adleman三位数学家发明)。我们会在专门讲解RSA的章节中,详细解释它的数学原理。
哈希函数:信息的数字指纹
哈希函数(Hash Function)是一种神奇的数学函数,它能够把任意长度的信息压缩成一个固定长度的“指纹”,这个指纹叫做哈希值或消息摘要。
哈希函数有三个重要的特性:
1. 单向性:从哈希值几乎不可能反推出原始信息。就像你可以通过指纹识别一个人,但从一个人的指纹却无法知道他长什么样子。
2. 抗碰撞性:很难找到两条不同的信息,它们的哈希值恰好相同。就像世界上很难找到两个完全相同的指纹一样。
3. 固定输出:无论输入多长,输出的哈希值长度都是固定的。比如,SHA-256算法输出的哈希值总是256位(64个十六进制字符)。
哈希函数在密码学中有着广泛的应用:密码存储、数字签名、区块链……到处都有它的身影。
常见的哈希算法有MD5、SHA-1、SHA-256等。但需要注意的是,MD5和SHA-1由于被发现存在安全漏洞,已经不再推荐使用。目前最常用的是SHA-256和SHA-3算法。
本书的学习地图
恭喜你!你已经迈出了了解密码学的第一步。现在,让我给你介绍一下这本书的整体结构,让你对接下来的旅程有一个清晰的了解。
本书共分为15章,从易到难,循序渐进地带你探索密码学的奥秘:
第一部分:基础入门(第1-4章)
我们从这