Side-Channel-Attack
關於索引雜湊輸出以組成最終鍵的問題
最近,我在執行時和編譯時(21:56 段)觀看了 C++ 中密碼學的多精度算法影片:
演講者說,使用使用者密鑰中的一個字節作為數組的下標允許側通道攻擊。我的問題是如果在關鍵的處理階段使用它會怎樣:
Do HashOut = DoHash() FinalKey += HashOut[currentKeyByte mod KeySize] currentKeySize += 1 While (Len(FinalKey) < WantedSized);
讓我們暫時忘記廣為人知的 KDF,好嗎?上面的虛擬碼背後的想法會干擾恆定時間方面嗎?
如果是這樣。如果使用散列鍵中的字節而不是鍵的原始字節怎麼辦?
提前致謝!
演講者說,使用使用者密鑰中的一個字節作為數組的下標允許側通道攻擊。
使用秘密數據(無論是使用者密鑰、實際密鑰還是內部密鑰或加密常式的依賴於秘密的數據)都可以,這取決於您在做什麼以及攻擊者在您訪問您的機器時對您的機器擁有何種訪問權限重新使用密鑰。
我的問題是如果在關鍵的處理階段使用它怎麼辦
FinalKey + = HashOut
$$ currentKeyByte mod KeySize $$
這取決於 currentKeyByte 是什麼(您的虛擬碼沒有指定它)。
如果它是以可預測的方式在 0 和 WantedSize 之間迭代的索引,那麼這不是問題。攻擊者可能會推斷出 currentKeyByte 是什麼的資訊;另一方面,如果他知道這是第 5 次迭代,他已經知道 currentKeyByte 是 4,因此他從側通道獲得的任何進一步資訊都不會告訴他任何他不知道的事情。現在,如果是這樣的話,那麼如果 KeySize < WantedSize; 這可能不是您想要做的,但這是一個不相關的問題。
另一方面,如果 currentKeyByte 實際上是使用者密碼中的一個字節,那麼,是的,這可能是一個問題(如果攻擊者可以在上述程式碼執行的同時在同一台電腦上合理地執行程序);如果我是你,我會重新考慮這一點,並重新編寫這段程式碼。