密码学原理-篇1:重合指数

古典密码学之所以被称为古典,是因为区别于现代密码学,这些密码理论虽然很有价值,但是现在很少使用。因此,学习古典密码学,主要是学习前人设计密码的思路,和他们成功或失败的历史。


多表替换密码(Poly-alphabetic Shift Cipher,Vigenère Cipher)

为了较好地为信息加密,古人发明了加密算法:维吉尼亚密码(Vigenère Cipher)。其特点就是选用某一段字符串作为其密钥,并将密钥重复若干次直到长度与明文相同。

例如,用密钥“THINK”加密明文"ATTACKATONCE",就要将密钥重复并得到密钥排列"THINKTHINKTH"。密钥排列得到的一串字符,每个字符都代表将该位置的明文字母向后移动某位,从而得到密文。对于上述的"THINKTHINKTH"而言,用所需移位的数字表示就是“19,7,8,13,10,19,7,8,13,10,19,7”。

明文第一位(A)对应密钥排列的第一位(T),而T在字母表中排第19位(A是第0位),就将明文的第一位字母(A)向字母表排序的后面移动19位,由于A在字母表中排第0位,移动完是第19位T,因此得到密文第一位字母(T);

明文的第二位(T)对应密钥排列的第二位(H),而H在字母表中排第7位,就将明文的第二位字母(T)向字母表排序的后面移动7位,由于T是第19位,19向后7位是第26位,而字母表中最后一位字母Z是第25位,因此得到新的循环中的字母表第0位,于是得到密文的第二位字母(A);

第三位同理能够得到字母表中第27位,也就是B。以此类推,最终将会得到密文"TABNMDHBBXVL"。

相较于逻辑推演生成密码,维吉尼亚密码还可以使用表格法生成密码。

如下图,对于明文的第三个字母T,对应密钥的第三个字母I,于是使用表格中I行字母表进行加密,得到密文第三个字母B。类似地,明文第六个字母为K,对应密钥的第六个字母T,在表格中使用对应的T行进行加密,得到密文第二个字母D。以此类推,可以得到密文“TABNMDHBBXVL”。

加密表,图片来自百度百科

可以看出,使用表格法无论是加密还是解密,都有着更低的学习成本以及更高的效率。这种密码的高易用性和不错的强度让它声名显赫。

维吉尼亚密码以其简单易用而著称,同时初学者通常难以破解,因而又被称为“不可破译的密码”(法语:le chiffre indéchiffrable)。这也让很多人使用维吉尼亚密码来加密的目的就是为了将其破解。维吉尼亚密码足够地易于使用使其能够作为战地密码。例如,美国南北战争期间,南军就使用黄铜密码盘生成维吉尼亚密码。北军则经常能够破译南军的密码。战争自始至终,南军主要使用三个密钥,分别为“Manchester Bluff(曼彻斯特的虚张声势)”、“Complete Victory(完全的胜利)”以及战争后期的“Come Retribution(报应来临)”。

对包括维吉尼亚密码在内的所有多表密码的破译,都是以字母的出现频率为基础的,但直接的频率分析却并不适用。例如,如果’P‘是密文中出现次数最多的字母,则’P‘所代表的明文很有可能是’E‘(在明文为英文的前提下),其原因在本文的第二章已经论述。由于在维吉尼亚密码中,同一个明文字母可以被加密成不同的密文,因而简单的频率分析在这里并没有用。


然而,维吉尼亚密码也有着很明显的漏洞。如果我们知道了密钥的长度,那密文就可以被看作是交织在一起的恺撒密码,而其中每一个都可以单独破解。例如,上个例子中以”THINKTHINKTH“作为密钥排列,这种情况下明文的第一位和第六位都将以密钥字母’T‘加密,它们的偏移量就是相同的。倘若明文足够长,就可以选取所有模5同余的位上得到字母来组成一组恺撒密码。

因此,对于一个明文足够长、密钥长度为t的维吉尼亚密码,至多需要将其按照模t同余的原则分解为t组平移密码即可破译。于是,破译过程的核心便落在了如何取得t值上。

五、卡西斯基试验(Kasiski’s Method)、弗里德曼试验和重合指数(Index of Coincidence)

为了求出密钥长度t,可以利用卡西斯基实验和重合指数。卡西斯基实验的内容很容易理解,不多做赘述。这里引用百度百科中的例子。

卡西斯基试验是基于类似the这样的常用单词有可能被同样的密钥字母进行加密,从而在密文中重复出现。例如,明文中不同的CRYPTO可能被密钥ABCDEF加密成不同的密文:

        密钥:ABCDEF AB CDEFA BCD EFABCDEFABCD

        明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY

        密文:CSASXT IT UKSWT GQU GWYQVRKWAQJB

此时明文中重复的元素在密文中并不重复。然而,如果密钥相同的话,结果可能便为(使用密钥ABCD):

        密钥:ABCDAB CD ABCDA BCD ABCDABCDABCD

        明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY

        密文:CSASTP KV SIQUT GQU CSASTPIUAQJB

此时卡西斯基试验就能产生效果。对于更长的段落此方法更为有效,因为通常密文中重复的片段会更多。如通过下面的密文就能破译出密钥的长度:

        密文:DYDUXRMHTVDVNQDQNWDYDUXRMHARTJGWNQD

其中,两个DYDUXRMH的出现相隔了18个字母。因此,可以假定密钥的长度是18的约数,即长度为18、9、6、3或2。而两个NQD则相距20个字母,意味着密钥长度应为20、10、5、4或2。取两者的交集,则可以基本确定密钥长度为2。  

除了卡西斯基实验,我们也可以使用别的参数来描述猜测的t值是否准确。当计算某个密文的重合指数(又名:重合概率Index of Coincidence)时,即相当于求在某个密文中随机无放回地抽取其中的两位,这两位的字母相同的概率。

对于一个由任意字母表所构成的密文字母串而言,其重合指数可以表示下图:


图片源自维基百科

其中c是归一化系数,用于对不同字母表进行归一化处理(英语为26),n 下标a是字母“a”出现在文本中的次数,N是文本的长度。重合指数也可以用求和的形式来表示:


图片源自维基百科

我们已经知道,维吉尼亚密码可以被分解为若干组平移密码来破译,而一个明文足够长的平移密码的重合指数接近0.0687。换言之,如果我们选取某个t值,使得分组后的密文的重合指数接近0.065,则说明选取的t值与密钥的长度是一致的。 

在一串无规律的字母中,我们随意抽取两个字母,由于每个字母被抽到的概率相同,因此抽取的两个字母相同的概率为26*(1/26)^2=0.0385。如果是从一篇文章或者一句完整的话中抽取,此时的概率为P(a)^2+P(b)^2+….+p(z)^2=0.067。这种特性是破译密码的一大关键,正常的单表替换,其重合指数更接近于0.067,而像维吉尼亚密码这类周期性多表替换,其重合指数更接近于0.0385。

这里引用维基百科中的例子进一步阐述,为简化描述,下文中“重合指数”全部指明文为英文时的情况:


作为使用IC的实际例子,假设我们截获了以下密文消息:

QPWKA LVRXC QZIKG RBPFA EOMFL JMSDZ VDHXC XJYEB IMTRQ WNMEA IZRVK CVKVL XNEIC FZPZC ZZHKM LVZVZ IZRRQ WDKEC HOSNY XXLSP MYKVQ XJTDC IOMEE XDQVS RXLRL KZHOV

(分为五个字符只是一个电报惯例,与实际字长无关。)我们怀疑这是一个使用Vigenère密码加密的英文密文,其中包含普通的A-Z分量和一个短的重复关键字,我们可以考虑密文“堆叠”成若干列,例如7列:

Q    P    W    K    A    L    V

R    X    C    Q    Z    I    K

G    R    B    P    F    A    E

O    M    F    L    J    M    S

D    Z    V    D    H    X    C

X    J    Y     E    B     I     M

T    R    Q   W    N    ...    ...

如果密钥大小恰好与假定的列数相同,那么单个列中的所有字母都将使用相同的密钥字母加密,实际上是一个简单的恺撒密码,应用于随机选择的英文明文字符。与它们相应的密文字母组,尽管每个字母已被置换(移位对应于密钥字母的量,参考本文第四节),也应具有类似于英语的频率分布的粗糙度。

因此,如果我们计算每列重合指数IC,它应该在0.067左右;另一方面,如果我们猜错了密钥大小(也就是选错了列数),则其重合指数IC应该在0.0385左右。因此,我们分别计算当密钥大小从1到10时的 IC:

t取5或10的时候IC最接近0.067

从上图可以看出,密钥长度t很可能是5.如果实际长度是5,那么当长度取10的时候也会有较高的IC,原因是此时它的每列也对应一个简单的恺撒加密。

在求得密钥长度之后,通过穷举密钥字母的每一种可能取值(A到Z总共26种),并且针对每一行求其在某一取值下重合指数,重合指数最高的情况下该行最有可能为明文原文,此时的穷举结果即为密钥字母。以下是经过解密后得到的明文:

MUSTC HANGE MEETI NGLOC ATION FROMB RIDGE TOUND ERPAS SSINC EENEM YAGEN TSARE BELIE VEDTO HAVEB EENAS SIGNE DTOWA TCHBR IDGES TOPME ETING TIMEU NCHAN GEDXX

从中可以读出明文想要发送的信息为:

是否必须将会议地点从桥改到地下通道,因为据信敌方特工已被派去观看桥头会议.时间不变XX

在明显的位置恢复了单词划分。“ XX”显然是“空”字符,用于填充最后一组进行传输。

整个过程可以很容易地打包成自动算法来破解这些密码。由于正常的统计波动,这种算法偶尔会做出错误的选择,特别是在分析短密文时。


以上内容仅代表本人大学学习思考内容,如有侵权及时删除,欢迎讨论和指教!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容