Randomness
增加隨機數與正常隨機數?
我最近一直在研究物聯網設備的lorawan 協議。
LoraWAN 握手,然後就可以通信了。消息被加密和 MAC’ed。進行加密和 MAC 時,混合的值
FCntUp
和用於上行鏈路消息,而用於下行鏈路消息。FCntDown``FCntUp``FCntDown
這兩個值都從 0 開始,隨著每條消息遞增,然後每隔一段時間重置一次。
所以,我的問題是關於這些遞增值的使用。因此,我猜想使用這種遞增計數器方法的一種替代方法是,對您可以隨消息發送的每條消息使用正常的隨機隨機數。
但是使用正常隨機隨機數與遞增隨機數的優缺點是什麼。它們分別為我們提供了哪些安全功能?我的猜測是隨機隨機數更安全,因為對手可以預測未來隨機數會是什麼。
我將列出兩者的缺點
對於隨機數:
- 隨機隨機數顯然需要一個種子良好的隨機數生成器;
- 由於生日限制,碰撞的可能性更大;
- 因此,順序隨機數通常需要隨機數的所有字節(計數器最初可以由單個字節編碼);
- 隨機隨機數需要與消息的任何其他部分分開發送 - 跟踪消息的數量或使用消息標識符是行不通的。
對於順序隨機數:
- 順序隨機數是有狀態的,即你需要保持狀態,否則你很容易重複它們;
- 如果鍵值碰撞,就有可能發生碰撞(這有點不公平,我們一般沒有碰撞鍵,但可能還有另一個弱點可以觸發相同的鍵值);
- 順序隨機數可能會洩露協議的詳細資訊,因為如果隨消息一起發送它們很容易被檢測到;
- 需要為隨機隨機數指定字節順序(例如在 WinZip 中,CTR 模式使用了一個小字節序計數器,這並不常見);
- 您不能使用隨機 nonce,然後切換到需要不可預測的 IV 而不僅僅是 nonce 的 CBC 模式(無需額外計算;例如,可以加密 IV 並使用該值)。
- 如果隨機數選擇得太小,那麼攻擊者確切地知道他們何時開始“溢出”並重複。