gpt4 book ai didi

c++ - AES ECB 已知文本攻击

转载 作者:太空狗 更新时间:2023-10-29 23:11:08 60 4
gpt4 key购买 nike

我正在尝试执行已知文本攻击以获得 32 字节 key 。BlockSize 为 16 字节。

关于此:https://crypto.stackexchange.com/a/12512

或者这个:https://security.stackexchange.com/a/102110

据我了解:

1) 加密已知的15字节 block

2) 用不同的尾部字节加密已知的256个16字节 block

3)比较 block 并得到一个字节的 secret

void test() {
unsigned char KnownText[15];
memset(KnownText, 'A', 15);

unsigned char EncryptedText[32];
int result_size = AES_ECB.EncryptBlock(EncryptedText, KnownText, 15);

unsigned char CKnownText[16];
for (int i = 0; i < 256; ++i) {
memset(CKnownText, 'A', 16);
CKnownText[15] = i;

unsigned char Encrypted[32];
int enc_result = AES_ECB.EncryptBlock(Encrypted, CKnownText, 16);

if(memcmp(EncryptedText, Encrypted, 16) == 0) {
//match found
}
}
}

当 i=0 时我只得到一个匹配(假设因为 0 被附加到第一个 15 字节 block )并且它甚至不是任何 secret key 字节。

我可以加密任何长度的任何已知数据并得到加密结果。

我如何使用这种攻击获得 key ?

最佳答案

EncryptBlock 可能按照它所说的那样做:加密一个 block 。 15 字节的第一条消息的想法是,您然后连接 key block 到它。我看不出这是在哪里发生的(除非 EncryptBlock 的名字非常糟糕)。

目前,EncryptBlock 函数可能会将加密的第 16 个字节简单地设置为零(使用零填充)。您可能需要创建一个函数来模拟服务器应该做的事情,包括将服务器的 secret 添加到初始消息中,并可能处理加密多个 block (假设该函数尚未执行此操作)。

请注意,这不是从分组密码中检索 key ,而是从明文中检索 secret 。这个 secret 可能是作为执行消息身份验证的某种恶意尝试而添加的。

关于c++ - AES ECB 已知文本攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733627/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com