我的作业中有这段代码,这是一个破解的一部分。现在,我们被要求对此crackme实施侧通道攻击以找到正确的密码。 我知道你可以通过查看计算所需的时间来找到它。这也取决于角色的不同。 我不知道如何开始编码攻击,而且时间变化,并且是随机的。 通过尝试一些可能性并查看打印答案所需的时间,密钥的长度等于6.
有人可以帮忙吗?
代码片段(用C编写):
int compare_key() {
unsigned int len = strlen(key_input);
unsigned int correct_len = strlen(correct_key);
int i, wait_time = 0, random_time, diff;
struct timeval t;
gettimeofday(&t, NULL);
srand(t.tv_usec * t.tv_sec);
if (len != correct_len) return 1;
for (i = 0; i < correct_len; i++) {
if (key_input[i] != correct_key[i]) {
diff = key_input[i] - correct_key[i];
if (diff < 0)
diff = -diff;
// delay stops brute force attack
wait_time += diff;
}
}
random_time = rand() % 10;
usleep(10000 * (wait_time + random_time));
return wait_time > 0;
}