2015-11-04 63 views
-2

我明白線性化攻擊是什麼以及它是如何執行的。我只是想了解下面的代碼是如何允許的,因爲如果輸入的字符串等於或大於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」); 

} 

} 
+1

[This](https://en.wikipedia.org/wiki/XSL_attack)?這與問題中的代碼無關。 – immibis

+2

線性化攻擊的定義將非常有幫助。 – user3386109

回答

1

線性攻擊是利用某些編碼缺陷的攻擊。如果上面的代碼在輸入不正確的字符時結束,攻擊者可以使用它來確定輸入了多少正確的字符。我和導師一起完成了這項工作,現在我看到,由於每次不正確時都設置標誌,如果7箇中的5個不正確,並且該標誌設置了5次。這個嘗試將比7次全部設置的時間更快。因此,如果攻擊者爲第一個字符嘗試每種可能的解決方案,併爲字符串的其餘部分插入標準字符。使用正確的第一個字符的嘗試會稍快一點。對每個字符應用相同的邏輯最終將獲得序列號。

+0

啊,[定時攻擊](https://en.wikipedia.org/wiki/Timing_attack) – user3386109

+0

這就是馬克郵票上的「信息安全原則和實踐」一書所指的那樣。我會閱讀時間攻擊,但看看他們如何比較。 – prodigy89