我理解线性化攻击是什么以及如何执行。我只想清楚下面的代码如何允许它,因为如果输入的字符串等于或大于8,它应该以相同的迭代计数终止?
int main(int argc, const char *argv[])
{
int i;
boolean flag = true;
char serial [9] = “S123N456\n”;
if(strlen(argv[1]) < 8)
{
printf(“\nError try again.\n\n”);
exit(0);
}
for(i = 0; i < 8; ++i)
{
if(argv[1][i] != serial[i])flag = false;
}
if(flag)
{
printf(“\bSerial number is correct!\n\n”);
}
}
答案 0 :(得分:1)
线性攻击是一种利用某些编码缺陷的攻击。如果上面的代码在输入错误字符时结束,攻击者可以使用它来确定输入了多少正确的字符。我和导师一起完成了它,现在我看到,因为如果7个中的5个不正确并且标志设置了5次,则每次设置时都会设置标志。该尝试将比所有7次设置的速度更快。因此,如果攻击者为第一个字符尝试了所有可能的解决方案,并为字符串的剩余部分插入标准字符。使用正确的第一个字符的尝试将稍微快一些。对每个字符应用相同的逻辑将最终获得序列号。