首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES ECB已知-文本攻击

AES ECB已知-文本攻击
EN

Stack Overflow用户
提问于 2018-08-07 18:55:20
回答 1查看 2K关注 0票数 3

我试图执行已知文本攻击以获得32字节密钥。BlockSize是16字节。

关于这一点:https://crypto.stackexchange.com/a/12512

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

据我所知:

1)加密已知的15字节块

2)用不同的尾迹字节加密已知的256 16字节块。

3)比较块,得到一个字节的秘密

代码语言:javascript
复制
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字节块)时,我只得到了一次匹配,而且它甚至不是任何秘密密钥字节。

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

我怎么才能利用这次攻击得到钥匙?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 00:45:25

EncryptBlock可能会做它说要做的事情:加密一个块。15字节第一条消息的思想是,然后将秘密密钥块连接到它。我不知道这是在哪里发生的(除非EncryptBlock的名字非常糟糕)。

目前,被加密的第16个字节很可能被EncryptBlock函数简单地设置为零(使用零填充)。您可能需要创建一个模拟服务器应该做什么的函数,包括将服务器的秘密添加到初始消息中,并可能处理多个块的加密(假设函数还没有这样做)。

请注意,这不是关于从分组密码中检索密钥的,而是从纯文本检索密钥的。这个秘密可能是作为执行消息身份验证的恶意尝试而添加的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51733627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档