硬體安全

下列關於上述密碼比對函式中潛藏的問題與對策的組合,何者正確?

int check(const char *in, const char *pw, int n) {
    for (int i = 0; i < n; i++)
        if (in[i] != pw[i]) return 0;
    return 1;
}
  1. An很大時運算結果會出錯。比對之前先將n縮小
  2. B遇到第一個不一致就結束,因此可從處理時間得知前幾個字元是正確的。即使有不一致也比對到最後,再彙整結果後回傳
  3. C沒有問題,維持現狀即安全
查看答案與解析

正確答案:B. 遇到第一個不一致就結束,因此可從處理時間得知前幾個字元是正確的。即使有不一致也比對到最後,再彙整結果後回傳

此函式只要第1個字元不同就立即回傳,若第1個字元相符則比對第2個字元後才回傳,因此處理時間會隨相符的字元數而變長。攻擊者逐字元嘗試候選字元,並選出時間變長者,就能不必嘗試所有組合而推測出密碼。若把所有字元的差異以互斥或(XOR)等方式彙整,最後再判定,時間就不會隨相符字元數而改變,維持固定。

  • A. 結果是正確的,但會從時間洩漏資訊。
  • B. 正確。重點是不要製造時間差。
  • C. 這種寫法容易遭受計時攻擊。
練習這個領域 前往領域頁面

硬體安全的其他題目

  1. 下列何者是利用快取的旁路攻擊得以成立的主要原因?
  2. 下列關於稱為Spectre的推測執行漏洞的原理,何者正確?
  3. 下列關於為何即使推測執行的指令結果被取消,Spectre這類攻擊仍會洩漏資訊的原因,何者正確?
  4. 下列關於部分CPU出現問題的Meltdown漏洞的原理,何者正確?
  5. 下列關於作為Meltdown的軟體對策而導入的KPTI(核心分頁表隔離)的概念,何者正確?