Chapter 1: 秘密的约定 / The Secret Pact
一个潮湿的周六下午,Lily和Leo在祖母家的阁楼上探险。灰尘在阳光中跳舞,空气中弥漫着旧木头和回忆的味道。Leo推开一个布满蜘蛛网的木箱,里面露出一本皮质封面的旧日记。日记的扣子已经生锈,但封面上的字迹依然清晰:“To my dearest, 1945”。Lily小心翼翼地翻开第一页,上面画满了奇怪的符号——有的像星星,有的像波浪,还有的像小动物,但没有任何一个字词他们认识。
“这些是什么?”Leo用手指轻触那些凹陷的墨迹,指尖沾上了一点棕色的锈斑。 “看起来像密码,”Lily的眼睛亮了起来,她最近在学校读过一本关于秘密代码的书,“也许这是一本秘密日记!就像间谍用的那样。” 他们盘腿坐在地板上,木地板发出轻微的吱呀声。Leo拿起日记,逐页翻看。每一页都布满了类似的符号,有些反复出现,有些则独一无二。他指着一个类似太阳的图形:“看,这个太阳符号总是出现在每页的开头。它可能代表‘The’或者‘A’?” Lily摇头:“但‘The’有三个字母,这个符号只有一个。也许它代表单个字母,比如T?或者它只是装饰?” 他们尝试将符号与字母对应,但很快陷入困境。如果每个符号代表一个字母,他们需要完整的对应表才能解读任何内容。否则,即使猜到太阳符号是T,也无法知道下一个符号是什么。 “我们需要一套规则,”Lily总结道,她的声音在阁楼的寂静中显得格外清晰,“就像发明一种只有我们知道的语言。” Leo点头:“一种秘密语言(secret language)!这样我们可以写只有彼此能懂的消息。” 这就是他们发明第一种秘密语言的开端——一种简单替换密码(Simple Substitution Cipher)。简单替换密码的核心思想是:明文中的每个字母(或符号)被唯一的密文字母(或符号)替换,且替换关系在整个消息中保持固定。例如,如果约定A=★,那么消息中所有的A都变成★,反之亦然。 他们决定,用符号来代表字母。最初,他们想用图画:A=苹果(🍎),B=熊(🐻),C=猫(🐱)。但很快发现,绘制复杂图案太慢,而且容易画得不一致。Leo提议用简单的几何图形:“看,这些符号本身也是几何形状。我们可以用★、☆、△、○这些。” Lily赞同:“对!我们就用这些。但必须提前约定好每个字母对应哪个符号,不然又乱套了。” 他们找来一张旧报纸的边角,开始制定他们的“秘密约定书”(The Secret Pact)——一份完整的字母-符号映射表。经过讨论,他们选择了容易书写和区分的图形:
- A: ★
- B: ☆
- C: △
- D: ○
- E: □
- F: ▢
- G: ◼
- H: ◻
- I: ▪
- J: ▫
- K: ◽
- L: ◾
- M: ⬛
- N: ⬜
- O: ◯
- P: ◎
- Q: ●
- R: ◉
- S: ◐
- T: ◑
- U: ◒
- V: ◓
- W: ◔
- X: ◕
- Y: ◖
- Z: ◗
但列完整表太长了,他们决定只用在需要加密的消息中出现的字母。第一条消息,他们选了简单的“HELLO”。 根据约定,H=◻,E=□,L=◾,O=◯。所以“HELLO”加密后变成“◻□◾□◯”。 Leo写下密文,然后对照约定表解密:“◻是H,□是E,◾是L,□又是E,◯是O——HELLO!成功了!” Lily笑了:“但等等,我们怎么知道◻对应H?因为我们约定好了。这就是关键:规则必须提前共享(shared rule)。只有知道规则的人才能加密或解密。” 他们测试了另一条消息:“SECRET”。S=◐,E=□,C=△,R=◉,E=□,T=◑。密文是“◐□△◉□◑”。Leo解密时,先看到◐,查表是S;□是E;△是C;◉是R;□又是E;◑是T。正确还原。 “如果别人拿到这张纸,”Leo指着密文,“他们只看到一堆符号,完全不知道什么意思,除非他们也有我们的约定表。” “这就是密码的魔力,”Lily轻声说,“它让信息只对知道规则的人可见。” 这时,楼下传来祖母喊他们吃点心的声音。他们匆忙把日记和约定表藏进木箱,但Leo突然想到一个问题:“如果我们把约定表弄丢了,我们自己也会忘记规则,那密文就永远解不开了。” L莉点头:“所以,规则本身也必须被保护。它就像一把钥匙(key)——没有钥匙,打不开锁;没有规则,解不开密码。” 他们决定,把约定表分成两部分:Lily记一半,Leo记另一半,这样即使一方忘记,另一方还能回忆。或者,他们把规则设计成只有他们两人能理解的暗示,比如用只有他们知道的童年回忆作为映射依据。 阁楼的光线渐渐暗下来,夕阳透过小天窗洒进灰尘。他们约定,以后所有的秘密消息都用这套系统,并且永远不泄露规则。临走前,Lily最后看了一眼那本旧日记:“也许这本日记的主人,也用了类似的约定。只是我们不知道他们的规则是什么。” Leo若有所思:“所以,破解密码,就是找出那个隐藏的约定。” 回家的路上,他们已经在计划下一条消息:“明天带上你的风筝”该加密成什么。而他们不知道的是,这本旧日记将引领他们踏上一段跨越时空的密码探秘之旅——从简单的图形替换,到改变历史的机械密码机,再到现代网络世界的数字锁。一切,都始于这个阁楼里的秘密约定(The Secret Pact)。
---
阁楼奇遇:发现旧日记
阁楼总是充满神秘感。对Lily和Leo来说,祖母家的阁楼是一个时间胶囊——堆满了老式家具、褪色相册和不知用途的古怪物件。那个周六,原本只是避雨躲进老宅,却成了他们人生中第一个密码冒险的起点。
环境与氛围的营造
阁楼的空间狭长,屋顶倾斜,只有一扇小天窗透进光线。阳光穿过灰尘,形成一道道光柱,如同舞台的追光。木箱、旧箱子和包裹随意堆放,覆盖着厚厚的灰色绒毛。空气中有松木、旧纸张和一丝霉味混合的气息,深吸一口仿佛吞下了过去几十年的记忆。
Leo个子稍高,胆子大,总是第一个探索未知角落。Lily则更细心,喜欢观察细节。当她发现那个皮质日记本时,它被塞在一个铁皮饼干箱下面,封面磨损,但铜扣依然闪着微弱的光。
“看这个!”Leo把它抽出来,拍掉表面的灰。日记本发出“咔”的一声轻响,仿佛打开了某个开关。
日记的物理特征
日记本不大,约手掌大小,封面是深棕色的真皮,边缘卷曲。正中央烫着几个模糊的字母,已难以辨认,但翻到内页时,一行钢笔字清晰可见:“*To
一个潮湿的周六下午,Lily和Leo在祖母家的阁楼上探险。灰尘在阳光中跳舞,空气中弥漫着旧木头和回忆的味道。Leo推开一个布满蜘蛛网的木箱,里面露出一本皮质封面的旧日记。日记的扣子已经生锈,但封面上的字迹依然清晰:“To my dearest, 1945”。Lily小心翼翼地翻开第一页,上面画满了奇怪的符号——有的像星星,有的像波浪,还有的像小动物,但没有任何一个字词他们认识。
“这些是什么?”Leo用手指轻触那些凹陷的墨迹,指尖沾上了一点棕色的锈斑。 “看起来像密码,”Lily的眼睛亮了起来,她最近在学校读过一本关于秘密代码的书,“也许这是一本秘密日记!就像间谍用的那样。” 他们盘腿坐在地板上,木地板发出轻微的吱呀声。Leo拿起日记,逐页翻看。每一页都布满了类似的符号,有些反复出现,有些则独一无二。他指着一个类似太阳的图形:“看,这个太阳符号总是出现在每页的开头。它可能代表‘The’或者‘A’?” Lily摇头:“但‘The’有三个字母,这个符号只有一个。也许它代表单个字母,比如T?或者它只是装饰?” 他们尝试将符号与字母对应,但很快陷入困境。如果每个符号代表一个字母,他们需要完整的对应表才能解读任何内容。否则,即使猜到太阳符号是T,也无法知道下一个符号是什么。 “我们需要一套规则,”Lily总结道,她的声音在阁楼的寂静中显得格外清晰,“就像发明一种只有我们知道的语言。” Leo点头:“一种秘密语言(secret language)!这样我们可以写只有彼此能懂的消息。” 这就是他们发明第一种秘密语言的开端——一种简单替换密码(Simple Substitution Cipher)。简单替换密码的核心思想是:明文中的每个字母(或符号)被唯一的密文字母(或符号)替换,且替换关系在整个消息中保持固定。例如,如果约定A=★,那么消息中所有的A都变成★,反之亦然。
---
符号迷局:尝试破译日记
他们决定先弄清楚日记里的符号系统。Lily拿出随身携带的素描本和铅笔,开始临摹出现的所有符号。Leo则负责计数每个符号出现的频率。
“看,”Leo指着第一页,“这个波浪符号 `~` 出现了12次,那个星星符号 `★` 出现了8次,还有这个小圆点 `•` 出现了5次。” Lily在纸上列出:
- `~` : 12次
- `★` : 8次
- `•` : 5次
- `▲` : 4次
- `■` : 3次
- 其他符号各1-2次
“在英文中,字母E出现频率最高,”Lily回忆道,“也许波浪符号是E?” 他们尝试将波浪符号当作E,然后看周围符号组合成常见单词。但很快遇到问题:如果`~`是E,那么`~★`可能是什么?BE? ME? 无法确定。而且日记中有些符号组合根本不像英文单词。
“也许这不是英语?”Leo猜测,“可能是法语?或者德语?” “但1945年,这个地区主要说英语,”Lily说,“而且符号看起来像自创的,不是标准字母。” 他们意识到,仅凭频率分析不够,因为消息可能太短,或者符号不代表单个字母。也可能每个符号代表整个单词或音节。可能性太多,没有额外信息无法缩小范围。
“我们就像在黑暗中摸索,”Leo叹气,“没有规则,永远解不开。” Lily点头:“所以,密码的关键不是符号本身,而是背后的约定(the agreement)。日记的主人和收信人提前约定了符号对应什么。我们不知道那个约定,所以无法破解。” 这让他们更坚定:要创建自己的密码,必须确保规则只有他们知道。
---
发明秘密语言:从想法到规则
为什么选择几何图形?
他们考虑过用动物图案(A=苹果,B=熊),但发现绘制复杂图形太耗时,而且容易画得不像。Leo指着日记中的符号:“看,这些符号本身都是简单形状——星星、圆、三角、方块。也许原始密码也是用几何图形,因为容易书写和识别。” Lily赞同:“对!几何图形 universal,不分语言。而且我们可以在任何地方画:纸上、沙子、树干。” 他们决定采用几何图形作为符号集。但需要一套完整的映射表。他们找来一张旧报纸的边角,开始设计。
创建映射表:我们的“秘密约定书”
他们讨论哪些图形容易区分、容易书写。最终选择了16个基本图形,覆盖26个字母(有些字母共享图形?不,简单替换要求一一对应,但儿童版可以简化,只覆盖常用字母)。实际上,他们决定只加密常用字母,其他字母保留原样或跳过。但为了教学清晰,我们假设他们覆盖全部26字母。
经过讨论,他们制定出映射表:
| 字母 | 符号 | 字母 | 符号 | |------|------|------|------| | A | ★ | N | ⬜ | | B | ☆ | O | ◯ | | C | △ | P | ◎ | | D | ○ | Q | ● | | E | □ | R | ◉ | | F | ▢ | S | ◐ | | G | ◼ | T | ◑ | | H | ◻ | U | ◒ | | I | ▪ | V | ◓ | | J | ▫ | W | ◔ | | K | ◽ | X | ◕ | | L | ◾ | Y | ◖ | | M | ⬛ | Z | ◗ |
他们用彩色铅笔给每个符号上色,使它们更醒目。但很快发现,颜色在复印或黑白打印时会丢失,所以决定依赖形状而非颜色。
“这就是我们的密钥(key)!”Leo兴奋地说,“没有这张表,谁也解不开我们的消息。” Lily提醒:“但密钥本身必须保密。如果别人拿到这张表,我们的密码就失效了。” 他们决定不把完整表写下来,而是各自记忆一部分。Lily记A到M,Leo记N到Z。或者,他们可以设计一个只有他们能理解的生成规则,比如“从字母表开头数,奇数位用黑图形,偶数位用白图形”——但那样需要额外规则,可能复杂。最初,他们选择直接记忆映射。
加密与解密:一步步演示
他们想测试密码。第一条消息:“HELLO”。
加密过程: 1. 写出明文:H E L L O 2. 查映射表:H→◻, E→□, L→◾, L→◾, O→◯ 3. 连接符号:◻ □ ◾ ◾ ◯
所以密文:`◻□◾□◯`(注意:L重复,所以◾出现两次)。
解密过程: 1. 收到密文:◻ □ ◾ □ ◯ 2. 查表反向:◻→H, □→E, ◾→L, □→E, ◯→O 3. 组合:H E L L O
成功!
第二条消息:“SECRET”。 加密:S→◐, E→□, C→△, R→◉, E→□, T→◑ → `◐□△◉□◑` 解密:◐→S, □→E, △→C, ◉→R, □→E, ◑→T → SECRET。
“看,只要规则一致,加密解密很简单,”Lily说,“但前提是双方都有同样的映射表。”
遇到问题:消息中的“未知”符号
他们想加密“I LOVE YOU”,但发现映射表中没有字母“V”?等等,表中有V→◓。但“I”是I→▪,“L”是◾,“O”是◯,“V”是◓,“E”是□,“Y”是◖,“U”是◒。全部覆盖。
但假设他们想加密“HI,MOM!”(包含逗号和感叹号)。他们的映射表只针对字母,标点怎么办?他们决定保留标点原样,不加密。所以“HI, MOM!”加密为“◻▪, ⬛◯⬛!” 这样解密时,遇到非字母符号就跳过。
另一个问题:大小写。他们约定所有字母转大写再加密,所以小写a变成A再加密。这样简化。
“规则必须明确所有细节,”Leo总结,“包括字母表范围、是否保留标点、大小写处理等。这些都属于加密算法(algorithm)的一部分。”
---
密码的核心:约定规则的力量
规则必须提前共享
Lily和Leo意识到,密码的威力不在于符号多复杂,而在于规则只有通信双方知道。如果规则被泄露,密码就失效了。这就像两个人之间的秘密握手:只有他们知道动作的含义,外人看到只是普通动作。
“保密通信(secure communication)的基础是共享秘密(shared secret),”Lily说,“这里就是我们的映射表。” 但共享秘密本身有风险:如何安全地传递规则?如果他们不在同一个地方,如何让朋友也加入?这引出了密钥分发问题(key distribution problem)——如何安全地把密钥给对方,而不被窃听者截获。
他们讨论解决方案: 1. 面对面交换:最安全,但需要物理见面。 2. 记忆密钥:不写下来,但可能遗忘。 3. 暗示法:用只有他们知道的回忆作为密钥生成依据。例如,“用我们第一次去海滩的日期作为偏移量”——但那是凯撒密码变体。
最终,他们选择记忆部分密钥,并约定下次见面时核对。
密钥:打开秘密的钥匙
在密码学中,密钥(key)是控制加密解密操作的信息。在简单替换密码中,密钥就是字母到符号的映射表。没有密钥,即使知道加密算法(简单替换),也无法解密特定消息,因为可能有无数种映射。
“就像一把锁,”Leo比喻道,“锁的结构是公开的(简单替换算法),但钥匙(密钥)只有我们有。” 这引出了柯克霍夫原则(Kerckhoffs' principle)的雏形:密码系统的安全性应依赖于密钥的保密,而非算法保密。但儿童版简化:算法可以公开,只要密钥保密就安全。
他们测试:如果告诉别人他们用的是简单替换密码,但不说映射表,别人仍无法破解。但如果映射表泄露,密码立刻失效。
规则的一致性:加密解密的基石
一次,Leo想给Lily留个惊喜:在书房书里夹一张加密纸条。他加密“Don’t forget the kite”时,不小心把“K”映射成了◽(应为◽?表中K=◽,对),但写密文时误写成◻(那是H)。Lily收到后解密:“HON’T FORGET THE HITE”——完全不对。她检查映射表,发现Leo写错了符号。
“规则必须严格一致,”Lily指出,“一个符号对应一个字母,不能随意变动。否则解密就失败。” 这强调了确定性(determinism)在密码中的重要性:相同的输入总是产生相同的输出。
---
小试牛刀:第一条秘密消息
他们决定用新密码写第一条正式秘密消息。内容:“Meet at the old oak tree at 4 PM. Bring the map.”(在老橡树下4点见面,带上地图。)
加密步骤: 1. 转大写,移除非字母:MEETATTHEOLDOAKTREEAT4PMBRINGTHEMAP → 但数字和标点?他们约定数字保留原样,所以“4”和“PM”中的“P”“M”加密。最终处理:只加密字母,数字和空格保留。 实际明文:MEET AT THE OLD OAK TREE AT 4 PM BRING THE MAP 移除非字母后:MEETATTHEOLDOAKTREEAT4PMBR
他们想加密第一条正式秘密消息。内容:“Meet at the old oak tree at 4 PM. Bring the map.”(在老橡树下4点见面,带上地图。)
制定加密规则:处理细节
在加密之前,他们需要明确规则细节,否则解密时会产生歧义。经过讨论,约定如下:
1. 字母大小写:所有字母先转为大写,再加密。这样避免大小写不一致。例如,“Meet”变成“MEET”。 2. 非字母字符:空格、数字、标点符号(如逗号、句号、感叹号)不加密,保留原样。这样密文保留原始消息的结构,方便阅读时断句。 3. 字母范围:只加密A到Z的26个字母。其他语言字符(如他们可能用的法语重音字母)暂时不考虑。 4. 符号一致性:每个字母严格对应一个符号,且加密解密时使用同一张映射表。
“这些规则就像游戏的说明书,”Lily说,“我们必须写下来,但说明书本身也要保密。”
他们在一张更小的纸条上写下规则摘要,与映射表分开保存:
- 规则1:全大写
- 规则2:仅加密字母,保留空格、数字、标点
- 规则3:使用几何符号映射表(见附件)
但“附件”就是映射表本身。他们意识到,规则和密钥是紧密结合的。严格说,密钥(key)就是映射表,而算法(algorithm)是简单替换规则。算法可以公开(大家都知道是简单替换),但密钥必须保密。
加密过程:一步步来
现在,应用规则到消息:“Meet at the old oak tree at 4 PM. Bring th