Aes

使用 CBC-AES-256 加密使用者名

  • February 17, 2013

我在我們的項目中遇到了一些使用以下參數加密使用者名(限制為 50 個字元,大多數小於 10 個字元)的程式碼:

IV 大小為 16 字節

密鑰大小為 32 字節

算法是 CBC-AES (256bits)

這些參數是否存在安全問題?為什麼要使用 CBC 而不是 ECB 的密鑰大小大於 50 個字元?使用小於密鑰大小的 IV 是否危險?在數據庫中加密使用者名的正確方法是什麼?

編輯:IV 被重用於每個使用者名。這顯然不好。只要使用者名最終加密,我就可以編寫遷移腳本並更改算法等。如果有人對如何最好地安全地做到這一點有任何建議,那將非常有幫助。

假設:

  • 目的是保護使用者名的機密性,使其免受具有對加密數據的讀取訪問權限、添加她選擇的使用者名的能力以及其他任何內容(特別是,即使通過電腦代理也無法訪問密鑰)或持有鑰匙的設備,或側通道);
  • IV 是為每個加密(或在編輯後重新加密)的個人使用者名隨機選擇的;
  • 密鑰是隨機選擇的,沒有被洩露,並且僅用於該用途;

那麼據我們所知,使用 CBC 的系統是安全的(這來自 CBC 模式下 AES-256 的 IND-CPA 安全性)。請注意,這是高度理論化的。如果對手可以遠端訪問 PC,並且除非使用 HSM 或智能卡來保存密鑰,否則您沒有強有力的論據來證明密鑰沒有洩漏。即使您使用這種防篡改硬體來儲存密鑰,您也沒有理由認為對手無法使用該硬體或以其他方式訪問明文。

使用歐洲央行,即使給出了理論假設,該系統也將是不安全的。特別是,從密文中很容易發現:

  • 相同的使用者名:
  • 使用者名與前 16 個字元字節相同;
  • 如果使用者名使用多於或少於 16 個字元字節(這又可能與種族血統相關),則具有很高的信心。

更新:為每個使用者使用相同的 IV 是一個典型的錯誤,並帶回了 ECB 的一些(但不是全部)弱點。特別是,發現相同的使用者名是微不足道的;從而發現是否存在給定的使用者名,以便攻擊者能夠添加具有給定使用者名的使用者。根據攻擊者實際可以添加的使用者名數量,以及用於使用者名的編碼(這對準確猜測使用者名的 16 字節片段的難度有相當大的影響),恢復起來或多或少會很容易一小部分(或全部)使用者名。

恕我直言,簡單地說,沒有適當的方法來加密線上數據庫中的使用者名。問題是,任何可以使用數據庫獲取使用者名的人都將繞過可能存在的任何加密貨幣;這不是密碼學問題。如果您只想給人一種安全的假象(或者,等效地,在一個不起眼的環境中執行的實現中盡您所能),請對記錄的每個加密使用帶有隨機 IV 的 CBC 或 CTR 加密。

引用自:https://crypto.stackexchange.com/questions/6340