古典密码体制的统计分析—— Vigenere密码
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
在实验室页面,单击创建资源。
(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. 背景知识
背景知识
Vigenere 密码是提高单字母表密码安全性的思路之一。
加密
以 FUDAN 为关键词,明文为 THEBASICOFCRYPTOGRAPHY (The Basic of Cryptography),举例说明 Vigenere 密码的加密过程:
构建密钥
密钥与明文等长,循环重复关键词。
明文:THEBASICOFCRYPTOGRAPHY
密钥:FUDANFUDANFUDANFUDANFU
对照字母表编写密文
根据密钥字母,在字母表中找到对应行;
根据明文字母,在字母表中找到对应列;
由已知明文 T 和密钥 F 得出密文 Y
解密
解密过程与加密过程相反。
算法实现
若用 0-25 的整数与 A-Z 的 26 个字母一一对应,P 为明文,C 为密文,K 为密钥,那么可以将加密算法和解密算法写成:
例如已知明文 T,密钥 F,如果 T 为19,F 为5,密文即为 (19+5) mod 26 = 24,对应字母为 Y,所以密文为 Y。(提示:可以借助ASCII码在数字和字母之间转换,也可以发挥自己的想法用字典、列表或数组存储相关关系)
参考资料
3. 实验内容
实验内容
给定密钥,用 C/C++/Python 实现 Vigenere 密码的加密和解密算法;(提供测试用例帮助同学们检测代码的准确性,原则上使用的编程语言不限,要求工作量相近)
加密测试用例(明文为THEBASICOFCRYPTOGRAPHY,密钥为SECURITY)
输入:THEBASICOFCRYPTOGRAPHY SECURITY
输出:LLGVRABAGJELPXMMYVCJYG
解密测试用例(密文为YBHBNXCFOSHLBPGTAUACMS,密钥为FUDAN)
输入:YBHBNXCFOSHLBPGTAUACMS FUDAN
输出:THEBASICOFCRYPTOGRAPHY
解密文档 lab1-1_input.txt (提示:密钥为 CRYPTOGRAPHY),输出的结果保存在lab1-1_output.txt 中,并将其中包含的信息写入报告的实验结果中。请同学们自行创建文件并将其中包含的信息写入报告的实验结果中
4. 拓展实验
拓展实验
分别实现使用 Kasiski 测试 和 Friedman 测试破解密码长度的算法。
有兴趣的同学可以完成,非强制性要求,且不计分。
破解 Vigenere 密码
破译 Vigenere 密码虽然不能直接使用频率分析,但由于密钥循环反复,当得知密钥长度时,可利用类似于 Caesar 密码的方法破解。 密钥长度的破解可通过以下两种方法: Kasiski 测试 & Friedman 测试。
Kasiski 测试
原理是常用单词或高频出现的单词片段,可能被同样的密钥字母进行加密。当密文足够长时,包含该信息更多,更有可能推断出密钥长度。例如:
密钥: ABCDABCDABCDABCDABCDABCDABCD
明文: CRYPTOISSHORTFORCRYPTOGRAPHY
密文: CSASTPKVSIQUTGQUCSASTPIUAQJB
相隔 16 个字符出现相同字符片段,密钥有可能是 16 的约数(16,8,4,2)。当密文长度足够长时,还能找到其他的重复片段,取其公约数,即可确定密钥长度。
Friedman 测试
定义重合指数来描述字母在频率分布上的不匀性,从而破译密码。
其中,𝑐是指字母表的长度(英语中为 26),𝑁指密文文本的长度,𝑛1到𝑛𝑐到是指密文的字母频数, 为整数。得到重合指数 IC 后,可用以下公式估计密钥长度:
其中,𝐿是密钥长度,𝑘𝑝为目标语言中两个任意字母相同的概率(在英文中𝑘𝑝约为 0.655),
𝑘𝑟 为字母表中出现相同字母的概率(在英文字母表中,𝑘𝑟 =1/26=0.0385)
已知密钥长度后,可按照密钥长度重新改写密文,对于被密钥中同一个位置加密的密文,即可单独做类似于 Caesar 密码的字母频率分析破译,从而推断出密钥中的每个字母。
实验链接:https://developer.aliyun.com/adc/scenario/ac09c818ce5a4d7794378c02904a531e