跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

  • 0

由浅入深了解AES ECB模式加密和明文主动攻击


HACK1949

问题

由浅入深了解AES ECB模式加密和明文主动攻击

5ff0579e111bd.png

加密算法是信息技术领域常常运用的安全算法,运用场景包括了付出、电商、即使通讯等各类应用。在常用的对称加密算法中,AES(Advanced Encryption Standard)凭仗安全性逐步成为国际主流加密算法。对称/分组加密一般分为流加密(如OFB、CFB等)和块加密(如ECB、CBC等)。关于流加密,需求将分组暗码转化为流形式作业。关于块加密(或称分组加密),假如要加密超越块巨细的数据,就需求涉及填充和链加密形式。ECB(Electronic Code Book 电子暗码本)的缺点是不能躲藏明文的形式并且或许对明文进行自动进犯。在CWE(Common Weakness Enumeration 通用缺陷列表)中界说为“损坏或风险的加密算法”,可是在实际的开发中,由于开发者缺少对加密算法知道或许偷闲(究竟ECB形式不需求偏移向量iv,少了 一个变量)常常运用ECB加密形式,本文主要就ECB形式的加密原理及“明文自动进犯”进行由浅入深的论述。

AES ECB加密形式原理

AES ECB加密的大致流程如图1所示,明文依照16字节分红n块,经过加密器对每一块进行加密取得n个密文块。最后一块通常不够16字节需求依照必定的填充规矩进行填充。

1608192751_5fdb12ef95982adda7d62.jpg!sma图1:AES ECB加密流程图

图1中的加密器加密进程如图2所示。加密的轮次根据密钥长度确认,密钥长度128位则n=10,密钥长度为192位,则n=12,密钥长度为256次则n=16。明文块16个字节被排列成4×4的二维数组,每一轮的扩展密钥W(i,i+15)相同被排列成4×4密钥数组。。

1608192865_5fdb13612fd389df6fa3a.jpg!sma图2:AES 加密器

从AES ECB形式加密原理可知明文分组和密文分组一一对应,例如明文:"this is block 10this si block 10this is block 10",能够分为三块“this is block 10”、”this si block 10”、”this is block 10”,加密后的对应的密文(字节):” 78 -128 64 -49 -89 100 -126 16 -103 -12 36 49 22 -56 86 -75 82 30 41 -119 -102 -90 58 -64 -2 101 -96 -31 60 ·-8 -1 -3 78 -128 64 -49 -89 100 -126 16 -103 -12 36 49 22 -56 86 -75”密文的前16字节和后16个字节对应明文的前16个字符和后16个字符,且是密文共同。由于在某些情况下,进犯者不需求破解密钥和密文就能够实现对密文的进犯。例如发送者发送“A phone number is +08612611112222 B phone number is +08612611110000”密文:“-67 106 -88 -115 12 47 -10 -24 -105 -13 124 66 -92 80 -126 -126 75 -71 92 31 -77 19 73 116 -34 123 81 -84 41 82 -95 120 26 -23 -18 -59 -87 3 107 -80 -124 114 -128 -77 11 -58 -54 -57 19 -20 62 -83 -59 -10 58 -74 66 28 110 14 -41 -65 -119 -94”。进犯者不需求知道密钥也不需求破解密文,直接对调密文第17-32和第49-64,接受者收到的音讯解密后就变成“A phone number is +08612611110000 B phone number is +08612611112222””。

“对明文的自动进犯”

人为进犯一般分为被迫进犯和自动进犯,被迫进犯一种是指直接获取音讯的内容,还有一种是对音讯的某些特征进行剖析,尽管不能得到完整的音讯内容但也能够推测出信息的一些特点,而这些特点有或许是通讯双方不想被走漏的。例如图3和图4,该图画的一个位图版本(图3)经过ECB形式或许会被加密成图4。在AES ECB形式中被迫进犯一般情况下不会改动音讯的内容,所以很难检测到,只能提前防备——禁止运用 ECB形式加密。

1608261188_5fdc1e441fcde42ae683a.jpg!sma

图3
1608261208_5fdc1e58b60b54a98ea3d.jpg!sma图4

自动进犯是指对明文数据的篡改来发生对进犯有价值的密文数据,防止自动进犯一般都十分困难,需求提前防备,要求在安全架构层面需求更加专业的常识和经验。挑选明文进犯是指暗码剖析者不仅可得到一些明文-密文对,还能够挑选被加密的明文,并取得相应的密文。针对明文的进犯的举例:

假设条件:

  • aes ecb加密,进犯者能够随意输入参数paraString;
  • 加密明文plain=paraString+flag;
  • 采用PKCS5Padding填充,即对明文填充n个n(这儿n在不同的言语中表明方法不同,可是n的取值范围是[1,16],用一个字节表明),使得使得传入加密器的输入巨细为16倍数;

进犯者不知道加密密钥和flag,可是能够经过结构特定的明文,在有限时间内爆炸出flag。

第一步:输入字符串””,长度为0,回来密文“-64 74 29 -100 105 -44 -61 -73 104 42 -76 -97 11 66 -93 102 16”,可知flag长度[0,15],以为假如flag的长度为16也需求填充16个16;

第二步:依次输入“a”,“aa”,“aaa”……“aaaaaaaaaaaaaaaa”,发现输入“aaaaaaaaaa”密文长度为16,输入“aaaaaaaaaaa”密文长度为32可知“aaaaaaaaaa”+flag的长度是15,“aaaaaaaaaaa”+flag的长度为16(plain长度为16也需求填充16个字节);所以flag的长度为5。

第三步:爆炸flag的第一位,由于1位有8bit位,有2的8次方(128)种或许,普通计算机爆炸耗时能够疏忽。假设flag=“ABCDE”,首要输入“aaaaaaaaaaaaaaa”+“ABCDE”,则第一块密文是 “aaaaaaaaaaaaaaaA”,对应“77 121 -104 -86 86 93 1 -101 119 -90 75 -105 0 55 4 18”,咱们结构k归于[0,128]+’\0’,发现当104,对应ASCII码表的’h’, “aaaaaaaaaaaaaaak”和“aaaaaaaaaaaaaaaA”密文相同,则A=’h’。爆炸B的时分输入“aaaaaaaaaaaaaa”取得“aaaaaaaaaaaaaahB”的密文即可爆炸出B=e,再依次爆炸出CDEF为“ello”,终究咱们拿到flag为“hello”。

String empStr = "";
byte[] encBytes1 = AesEcbUtils.encrypt(empStr);
System.out.println("encByte1 length: " + encBytes1.length);
int len0 = encBytes1.length;//flag长度在[00,15]之间
//获取flag长度
for (int i = 1; i <= 16; ++i) {
String tmpStr = getStringByCount(i);
byte[] tmp = AesEcbUtils.encrypt(tmpStr);
if (tmp.length != len0) {
System.out.println("flag len: " + (16 - i));
break;
}
}
//爆炸flag第1位
String str1 = "aaaaaaaaaaaaaaa";
byte[] byte1 = AesEcbUtils.encrypt(str1);
for (int i = 0; i <= 128; ++i) {
char c = (char) ('\0' + i);
String str1Temp = str1 + (c);
byte[] byte1Tmp = AesEcbUtils.encrypt(str1Temp);
if (bytesArrayEqual(byte1, byte1Tmp, 16)) {
System.out.println("A: " + (char) ('\0' + i));
}
}

总结

在本文中咱们首要介绍了AES根本的加密原理和加密器加密流程,其次介绍了ECB形式中分组独立加密的不安全性,进犯者能够直接对密文进行进犯或许加密无法躲藏明文数据形式。最后咱们结构了一个简单的对AES ECB加密进行自动明文进犯例子(具体代码可在GitHub上获取)。写这么多的意图便是希望让普通人能够理解并不是加密了就安全,咱们在开发进程中运用加密的意图便是为了保护数据,因此有必要慎重考虑挑选最好的加密算法及或许发生的不安全因素。

链接帖子
意见的链接
分享到其他网站

这个问题有0个答案

推荐的帖子

此问题没有答案

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...