前
![](/icons/48677yi.gif)
阵子看了电视剧
![](/icons/48677smhl.gif)
暗算
![](/icons/48677smhr.gif)
![](/icons/48677dou.gif)
蛮喜欢它
![](/icons/48677de.gif)
构思和里面
![](/icons/48677de.gif)
表演
![](/icons/48677dou2.gif)
其中有
![](/icons/48677yi.gif)
个故事提到了密码学
![](/icons/48677dou.gif)
故事本身不错
![](/icons/48677dou.gif)
但是有点故弄玄虚
![](/icons/48677dou2.gif)
不过有
![](/icons/48677yi.gif)
点是对
![](/icons/48677de.gif)
![](/icons/48677dou.gif)
就是当今
![](/icons/48677de.gif)
密码学是以数学为基础
![](/icons/48677de.gif)
![](/icons/48677dou2.gif)
(没有看过暗算
![](/icons/48677de.gif)
读者可以看
![](/icons/48677yi.gif)
下介绍
![](/icons/48677dou.gif)
http://ent.sina.com.cn/v/2005-10-17/ba866985.shtml
![](/icons/48677yinwei.gif)
我们后面要多次提到这部电视剧
![](/icons/48677dou2.gif)
)
密码学
![](/icons/48677de.gif)
历史大致可以推早到两千年前
![](/icons/48677dou.gif)
相传名将凯撒为了防止敌方截获情报
![](/icons/48677dou.gif)
用密码传送情报
![](/icons/48677dou2.gif)
凯撒
![](/icons/48677de.gif)
做法很简单
![](/icons/48677dou.gif)
就是对 2十几个罗马字母建立
![](/icons/48677yi.gif)
张对应表
![](/icons/48677dou.gif)
比如说
![](http://CrazyCoder.cn/WebFiles/20101/857a870b-bc83-4b69-815d-f59d23055839.jpg)
这样
![](/icons/48677dou.gif)
如果不知道密码本
![](/icons/48677dou.gif)
即使截获
![](/icons/48677yi.gif)
段信息也看不懂
![](/icons/48677dou.gif)
比如收到
![](/icons/48677yi.gif)
个
![](/icons/48677de.gif)
消息是 EBKTBP
![](/icons/48677dou.gif)
那么在敌人看来是毫无意义
![](/icons/48677de.gif)
字
![](/icons/48677dou.gif)
通过密码本解破出来就是 CAESAR
![](/icons/48677yi.gif)
词
![](/icons/48677dou.gif)
即凯撒
![](/icons/48677de.gif)
名字
![](/icons/48677dou2.gif)
这种编码思路方法史称凯撒大帝
![](/icons/48677dou2.gif)
当然
![](/icons/48677dou.gif)
学过信息论
![](/icons/48677de.gif)
人都知道
![](/icons/48677dou.gif)
只要多截获
![](/icons/48677yi.gif)
些情报
![](/icons/48677dou.gif)
统计
![](/icons/48677yi.gif)
下字母
![](/icons/48677de.gif)
频率
![](/icons/48677dou.gif)
就可以解破出这种密码
![](/icons/48677dou2.gif)
柯蓝道尔在他
![](/icons/48677de.gif)
“福尔摩斯探案集”中“跳舞
![](/icons/48677de.gif)
小人”
![](/icons/48677de.gif)
故事里已经介绍了这种小窍门技巧
![](/icons/48677dou2.gif)
在很长时间里
![](/icons/48677dou.gif)
人们试图找到
![](/icons/48677yi.gif)
些好
![](/icons/48677de.gif)
编码思路方法使得解密者无法从密码中统计出明码
![](/icons/48677de.gif)
统计信息
![](/icons/48677dou.gif)
但是
![](/icons/48677dou.gif)
基本上靠经验
![](/icons/48677dou2.gif)
有经验
![](/icons/48677de.gif)
编码者会把常用
![](/icons/48677de.gif)
词对应成多个密码
![](/icons/48677dou.gif)
使得破译者很难统计出任何规律
![](/icons/48677dou2.gif)
比如
![](/icons/48677dou.gif)
如果将汉语中
![](/icons/48677de.gif)
“是”
![](/icons/48677yi.gif)
词对应于唯
![](/icons/48677yi.gif)
![](/icons/48677yi.gif)
个编码 0543
![](/icons/48677dou.gif)
那么破译者就会发现 0543 出现
![](/icons/48677de.gif)
特别多
![](/icons/48677dou2.gif)
但如果将它对应成十个密码 0543
![](/icons/48677dou.gif)
3737
![](/icons/48677dou.gif)
2947 等等
![](/icons/48677dou.gif)
每次随机
![](/icons/48677de.gif)
挑
![](/icons/48677yi.gif)
个使用
![](/icons/48677dou.gif)
每个密码出现
![](/icons/48677de.gif)
次数就不会太多
![](/icons/48677dou.gif)
而且破译者也无从知道这些密码其实对应
![](/icons/48677yi.gif)
个字
![](/icons/48677dou2.gif)
这里面虽然包含着朴素
![](/icons/48677de.gif)
概率论
![](/icons/48677de.gif)
原理
![](/icons/48677dou.gif)
但是并不科学化
![](/icons/48677dou2.gif)
另外
![](/icons/48677dou.gif)
好
![](/icons/48677de.gif)
密码必须做到不能根据已知
![](/icons/48677de.gif)
明文和密文
![](/icons/48677de.gif)
对应推断出新
![](/icons/48677de.gif)
密文
![](/icons/48677de.gif)
内容
![](/icons/48677dou2.gif)
历史上有很多在这方面设计得不周到
![](/icons/48677de.gif)
密码
![](/icons/48677de.gif)
例子
![](/icons/48677dou2.gif)
在第 2次世界大战中
![](/icons/48677dou.gif)
日本军方
![](/icons/48677de.gif)
密码设计就很成问题
![](/icons/48677dou2.gif)
美军破获了日本很多密码
![](/icons/48677dou2.gif)
在中途岛海战前
![](/icons/48677dou.gif)
美军截获
![](/icons/48677de.gif)
日军密电经常出现 AF 这样
![](/icons/48677yi.gif)
个地名
![](/icons/48677dou.gif)
应该是太平洋
![](/icons/48677de.gif)
某个岛屿
![](/icons/48677dou.gif)
但是美军无从知道是哪个
![](/icons/48677dou2.gif)
于是
![](/icons/48677dou.gif)
美军就逐个发表自己控制
![](/icons/48677de.gif)
每个岛屿上
![](/icons/48677de.gif)
假新闻
![](/icons/48677dou2.gif)
当美军发出“中途岛供水系统坏了” 这条假新闻后
![](/icons/48677dou.gif)
从截获
![](/icons/48677de.gif)
日军情报中又看到 AF 供水出来问题
![](/icons/48677de.gif)
电文
![](/icons/48677dou.gif)
美军就断定中途岛就是 AF
![](/icons/48677dou2.gif)
事实证明判断正确
![](/icons/48677dou.gif)
美军在那里成功地伏击了日本主力舰队
![](/icons/48677dou2.gif)
事实上
![](/icons/48677dou.gif)
在第 2次世界大战中
![](/icons/48677dou.gif)
很多顶尖
![](/icons/48677de.gif)
科学家包括提出信息论
![](/icons/48677de.gif)
香农都在为美军情报部门工作
![](/icons/48677dou.gif)
而信息论实际上就是情报学
![](/icons/48677de.gif)
直接产物
![](/icons/48677dou2.gif)
香农提出信息论后
![](/icons/48677dou.gif)
为密码学
![](/icons/48677de.gif)
发展带来了新气象
![](/icons/48677dou2.gif)
根据信息论
![](/icons/48677dou.gif)
密码
![](/icons/48677de.gif)
最高境界是使得敌人在截获密码后
![](/icons/48677dou.gif)
对我方
![](/icons/48677de.gif)
所知没有任何增加
![](/icons/48677dou.gif)
用信息论
![](/icons/48677de.gif)
专业术语讲
![](/icons/48677dou.gif)
就是信息量没有增加
![](/icons/48677dou2.gif)
![](/icons/48677yi.gif)
般来讲
![](/icons/48677dou.gif)
当密码的间分布均匀并且统计独立时
![](/icons/48677dou.gif)
提供
![](/icons/48677de.gif)
信息最少
![](/icons/48677dou2.gif)
均匀分布使得敌人无从统计
![](/icons/48677dou.gif)
而统计独立能保证敌人即使看到
![](/icons/48677yi.gif)
段密码和明码后
![](/icons/48677dou.gif)
不能破译另
![](/icons/48677yi.gif)
段密码
![](/icons/48677dou2.gif)
这也是
![](/icons/48677smhl.gif)
暗算
![](/icons/48677smhr.gif)
里传统
![](/icons/48677de.gif)
破译员老陈破译
![](/icons/48677de.gif)
![](/icons/48677yi.gif)
份密报后
![](/icons/48677dou.gif)
但无法推广
![](/icons/48677de.gif)
原因
![](/icons/48677dou.gif)
而数学家黄依依预见到了这个结果
![](/icons/48677dou.gif)
![](/icons/48677yinwei.gif)
她知道敌人新
![](/icons/48677de.gif)
密码系统编出
![](/icons/48677de.gif)
密文是统计独立
![](/icons/48677de.gif)
![](/icons/48677dou2.gif)
有了信息论后
![](/icons/48677dou.gif)
密码
![](/icons/48677de.gif)
设计就有了理论基础
![](/icons/48677dou.gif)
现在通用
![](/icons/48677de.gif)
公开密钥
![](/icons/48677de.gif)
思路方法
![](/icons/48677dou.gif)
包括
![](/icons/48677smhl.gif)
暗算
![](/icons/48677smhr.gif)
里
![](/icons/48677de.gif)
“光复
![](/icons/48677yi.gif)
号”密码
![](/icons/48677dou.gif)
就是基于这个理论
![](/icons/48677dou2.gif)
公开密钥
![](/icons/48677de.gif)
原理其实很简单
![](/icons/48677dou.gif)
我们以给上面
![](/icons/48677de.gif)
单词 Caesar 加解密来介绍说明它
![](/icons/48677de.gif)
原理
![](/icons/48677dou2.gif)
我们先把它变成
![](/icons/48677yi.gif)
组数
![](/icons/48677dou.gif)
比如它
![](/icons/48677de.gif)
Ascii 代码 X=099097101115097114(每 3位代表
![](/icons/48677yi.gif)
个字母)做明码
![](/icons/48677dou2.gif)
现在我们来设计
![](/icons/48677yi.gif)
个密码系统
![](/icons/48677dou.gif)
对这个明码加密
![](/icons/48677dou2.gif)
1
![](/icons/48677dou.gif)
找两个很大
![](/icons/48677de.gif)
素数(质数)P 和 Q
![](/icons/48677dou.gif)
越大越好
![](/icons/48677dou.gif)
比如 100 位长
![](/icons/48677de.gif)
, 然后计算它们
![](/icons/48677de.gif)
乘积 N=P×Q
![](/icons/48677dou.gif)
M=(P-1)×(Q-1)
![](/icons/48677dou2.gif)
2
![](/icons/48677dou.gif)
找
![](/icons/48677yi.gif)
个和 M 互素
![](/icons/48677de.gif)
整数 E
![](/icons/48677dou.gif)
也就是说 M 和 E 除了 1 以外没有公约数
![](/icons/48677dou2.gif)
3
![](/icons/48677dou.gif)
找
![](/icons/48677yi.gif)
个整数 D
![](/icons/48677dou.gif)
使得 E×D 除以 M 余 1
![](/icons/48677dou.gif)
即 E×D mod M = 1
![](/icons/48677dou2.gif)
现在
![](/icons/48677dou.gif)
世界上先进
![](/icons/48677de.gif)
、最常用
![](/icons/48677de.gif)
密码系统就设计好了
![](/icons/48677dou.gif)
其中 E 是公钥谁都可以用来加密
![](/icons/48677dou.gif)
D 是私钥用于解密
![](/icons/48677dou.gif)
![](/icons/48677yi.gif)
定要自己保存好
![](/icons/48677dou2.gif)
乘积 N 是公开
![](/icons/48677de.gif)
![](/icons/48677dou.gif)
即使敌人知道了也没关系
![](/icons/48677dou2.gif)
现在
![](/icons/48677dou.gif)
我们用下面
![](/icons/48677de.gif)
公式对 X 加密
![](/icons/48677dou.gif)
得到密码 Y
![](http://CrazyCoder.cn/WebFiles/20101/939777e2-95e9-40ce-810b-5985b2381180.jpg)
好了
![](/icons/48677dou.gif)
现在没有密钥 D
![](/icons/48677dou.gif)
神仙也无法从 Y 中恢复 X
![](/icons/48677dou2.gif)
如果知道 D
![](/icons/48677dou.gif)
根据费尔马小定理
![](/icons/48677dou.gif)
则只要按下面
![](/icons/48677de.gif)
公式就可以轻而易举地从 Y 中得到 X
![](/icons/48677dou2.gif)
![](http://CrazyCoder.cn/WebFiles/20101/b3cfe2ec-da90-4e30-aa24-e8c7ade6a189.jpg)
这个过程大致可以概况如下:
![](http://CrazyCoder.cn/WebFiles/20101/12afafc4-d92c-486d-b271-22451cf0385d.jpg)
公开密钥
![](/icons/48677de.gif)
好处有:
1.简单
![](/icons/48677dou2.gif)
2. 可靠
![](/icons/48677dou2.gif)
公开密钥思路方法保证产生
![](/icons/48677de.gif)
密文是统计独立而分布均匀
![](/icons/48677de.gif)
![](/icons/48677dou2.gif)
也就是说
![](/icons/48677dou.gif)
不论给出多少份明文和对应
![](/icons/48677de.gif)
密文
![](/icons/48677dou.gif)
也无法根据已知
![](/icons/48677de.gif)
明文和密文
![](/icons/48677de.gif)
对应来破译下
![](/icons/48677yi.gif)
份密文
![](/icons/48677dou2.gif)
更重要
![](/icons/48677de.gif)
是 N,E 可以公开给任何人加密用
![](/icons/48677dou.gif)
但是只有掌握密钥 D
![](/icons/48677de.gif)
人才可以解密, 即使加密者自己也是无法解密
![](/icons/48677de.gif)
![](/icons/48677dou2.gif)
这样
![](/icons/48677dou.gif)
即使加密者被抓住叛变了
![](/icons/48677dou.gif)
整套密码系统仍然是安全
![](/icons/48677de.gif)
![](/icons/48677dou2.gif)
(而凯撒大帝
![](/icons/48677de.gif)
加密思路方法有
![](/icons/48677yi.gif)
个知道密码本
![](/icons/48677de.gif)
人泄密
![](/icons/48677dou.gif)
整个密码系统就公开了
![](/icons/48677dou2.gif)
)
3.灵活
![](/icons/48677dou.gif)
可以产生很多
![](/icons/48677de.gif)
公开密钥E和私钥D
![](/icons/48677de.gif)
组合给区别
![](/icons/48677de.gif)
加密者
![](/icons/48677dou2.gif)
最后让我们看看破解这种密码
![](/icons/48677de.gif)
难度
![](/icons/48677dou2.gif)
首先
![](/icons/48677dou.gif)
要声明
![](/icons/48677dou.gif)
世界上没有永远破不了
![](/icons/48677de.gif)
密码
![](/icons/48677dou.gif)
关键是它能有多长时间
![](/icons/48677de.gif)
有效期
![](/icons/48677dou2.gif)
要破公开密钥
![](/icons/48677de.gif)
加密方式
![](/icons/48677dou.gif)
至今
![](/icons/48677de.gif)
研究结果表明最好
![](/icons/48677de.gif)
办法还是对大字 N 进行因数分解
![](/icons/48677dou.gif)
即通过 N 反过来找到 P 和 Q
![](/icons/48677dou.gif)
这样密码就被破了
![](/icons/48677dou2.gif)
而找 P 和 Q 目前只有用计算机把所有
![](/icons/48677de.gif)
数字试
![](/icons/48677yi.gif)
遍这种笨办法
![](/icons/48677dou2.gif)
这实际上是在拼计算机
![](/icons/48677de.gif)
速度
![](/icons/48677dou.gif)
这也就是为什么 P 和 Q 都需要非常大
![](/icons/48677dou2.gif)
![](/icons/48677yi.gif)
种加密思路方法只有保证 50 年计算机破不了也就可以满意了
![](/icons/48677dou2.gif)
前几年破解
![](/icons/48677de.gif)
RSA-158 密码是这样因数分解
![](/icons/48677de.gif)
395058745832651445264197678006144819960207764603049364541393760515793556265294
50683609727842468219535093544305870490251995655335710209799226484977949442955603
= 3388495837466721394368393204672181522815830368604993048084925840555281177 ×11658823406671259903148376558383270818131012258146392600439520994131344334162924536139
现在
![](/icons/48677dou.gif)
让我们回到
![](/icons/48677smhl.gif)
暗算
![](/icons/48677smhr.gif)
中
![](/icons/48677dou.gif)
黄依依第
![](/icons/48677yi.gif)
次找
![](/icons/48677de.gif)
结果经过
![](/icons/48677yi.gif)
系列计算发现无法归零
![](/icons/48677dou.gif)
也就是说除不尽
![](/icons/48677dou.gif)
我猜她可能试图将
![](/icons/48677yi.gif)
个大数 N 做分解
![](/icons/48677dou.gif)
没成功
![](/icons/48677dou2.gif)
第 2次计算
![](/icons/48677de.gif)
结果是归零了
![](/icons/48677dou.gif)
介绍说明她找到
![](/icons/48677de.gif)
N=P×Q
![](/icons/48677de.gif)
分解思路方法
![](/icons/48677dou2.gif)
当然
![](/icons/48677dou.gif)
这件事能不能用算盘完成
![](/icons/48677dou.gif)
我就不知道了
![](/icons/48677dou.gif)
但我觉得比较夸张
![](/icons/48677dou2.gif)
另外我对该电视剧还有
![](/icons/48677yi.gif)
个搞不懂
![](/icons/48677de.gif)
问题就是里面提到
![](/icons/48677de.gif)
“光复
![](/icons/48677yi.gif)
号”密码
![](/icons/48677de.gif)
误差问题
![](/icons/48677dou2.gif)
![](/icons/48677yi.gif)
个密码是不能有误差
![](/icons/48677de.gif)
![](/icons/48677dou.gif)
否则就是有
![](/icons/48677de.gif)
密钥也无法解码了
![](/icons/48677dou2.gif)
我想可能是指在构造密码时
![](/icons/48677dou.gif)
P 和 Q 的
![](/icons/48677yi.gif)
没找对
![](/icons/48677dou.gif)
其中
![](/icons/48677yi.gif)
个(甚至两个都)不小心找成了合数
![](/icons/48677dou.gif)
这时密码
![](/icons/48677de.gif)
保密性就差了很多
![](/icons/48677dou2.gif)
如果谁知道电视剧里面讲
![](/icons/48677de.gif)
“误差”是指什么请告诉我
![](/icons/48677dou2.gif)
另外
![](/icons/48677dou.gif)
电视剧里提到冯∙诺依曼
![](/icons/48677dou.gif)
说他是现代密码学
![](/icons/48677de.gif)
祖宗
![](/icons/48677dou.gif)
我想是弄错了
![](/icons/48677dou.gif)
应该是香农
![](/icons/48677dou2.gif)
冯∙诺依曼
![](/icons/48677de.gif)
贡献在发明计算机和提出博弈论(game theory)
![](/icons/48677dou2.gif)
不管如何样
![](/icons/48677dou.gif)
我们今天用
![](/icons/48677de.gif)
所谓最可靠
![](/icons/48677de.gif)
加密思路方法
![](/icons/48677de.gif)
数学原理其实就这么简单
![](/icons/48677dou.gif)
![](/icons/48677yi.gif)
点也不神秘
![](/icons/48677dou.gif)
无非是找几个大素数做
![](/icons/48677yi.gif)
些乘除和乘方运算就可以了