重庆大学大数据与软件学院信息安全导论实验S-DES算法的实现,在胡海波老师的指导下,由崔函旭和陈果使用JAVA语言共同完成。
根据S-DES算法编写和调试程序,提供GUI解密支持用户交互。输入可以是8bit的数据和10bit的密钥,输出是8bit的密文。
考虑到是算法标准,所有人在编写程序的时候需要使用相同算法流程和转换单元(P-Box、S-Box等),以保证算法和程序在异构的系统或平台上都可以正常运行。设有A和B两组位同学(选择相同的密钥K);则A、B组同学编写的程序对明文P进行加密得到相同的密文C;或者B组同学接收到A组程序加密的密文C,使用B组程序进行解密可得到与A相同的P。
考虑到向实用性扩展,加密算法的数据输入可以是ASII编码字符串(分组为1 Byte),对应地输出也可以是ACII字符串(很可能是乱码)。
假设你找到了使用相同密钥的明、密文对(一个或多个),请尝试使用暴力破解的方法找到正确的密钥Key。在编写程序时,你也可以考虑使用多线程的方式提升破解的效率。请设定时间戳,用视频或动图展示你在多长时间内完成了暴力破解。
根据第4关的结果,进一步分析,对于你随机选择的一个明密文对,是不是有不止一个密钥Key?进一步扩展,对应明文空间任意给定的明文分组P_{n},是否会出现选择不同的密钥K_{i}\ne K_{j}加密得到相同密文C_n的情况?
如下图所示,在此界面中我们可以输入数据与密钥进行加密、解密,单是输入与输出的内容只能是是二进制数。
使用密钥1010101010对明文10101010进行加密:
在Test4.java文件中,我们可以通过输入明文密文对来输出密钥,可以破解出一组的明文密文的密钥,并得出运算时间和多组破解的平均时间(时间精确到0.1毫秒,少于0.1毫秒则为0)。
在Test5.java文件进行封闭测试,输入明文11110000,密文10101010,运行结果如下:
从结果可知,随机一个明密文对可能不止一个密钥key。由此可以得到对应明文空间任意给定的明文分组P_{n},会出现选择不同的密钥K_{i}\ne K_{j}加密得到相同密文C_n的情况。