AES-GCM 的風險是什麼ķ你_,N常年_____esag_和ķ和是,ñ○nC和,米和ss一個G和Key, Nonce, Message其中 Nonce = 消息
一群銀行家將敏感的財務資訊儲存在第三方擁有的伺服器上。我代表第 3 方伺服器。
財務資訊將以純文字形式儲存在伺服器上,但客戶的帳號將被加密。銀行不希望我們知道他們客戶的帳號。
我的問題是,如果在使用 AES-GCM 時它也是被加密的消息,那麼使用帳號作為 nonce 有多安全?那麼,如下加密有多安全:AES-GCM
$$ Key, Nonce = AccountNumber, Message = Account Number $$. 我知道這是確定性加密的一個範例,最好使用 GCM-SIV 模式,但我找不到任何實現此加密的庫,我可以將其與 .NET Framework 一起使用。
順便說一句,有人用過Miscreant .NET嗎?據我所知,它尚未獲得 FIPS 合規性。
這是一個設計範例:
Banker's Data: Note, that the AccountNumber is a primary key and will not be repeated. Therefore, nonce = message = AccountNumber will never be repeated. PK*AccountNumber Balance Nonce 1 $10,000 1 2 $15,000 2 3 $20,000 3 3rd Party Server AccountNumber Balance A2B3C4 $10,000 T4K8S9 $15,000 L6D9S8 $20,000
如果銀行家想向第三方伺服器查詢 AccountNumber = 1 的餘額,他將向伺服器查詢 AES-GCM(Key,Nonce=1,Message=1)=‘A2B3C4’。因為只有銀行家知道 Key 和 AccountNumber,所以只有他知道要查詢哪條記錄。這本質上是一種零知識加密方案,其中只有銀行家對密鑰、隨機數或消息有任何了解。
我認為這是一個壞主意,原因如下:
- 在 GCM 模式下,如果您使用相同的 nonce 加密兩條消息,則可以從密文中檢索出消息的明文。因此,如果您有關於同一客戶的兩條不同消息都使用客戶 ID 作為隨機數,那麼您的加密可能會被破壞。
- 當使用者檢索密文時,他們如何知道要用作 nonce 的客戶 ID?通常隨機數包含在密文中,以便使用者可以使用它與密鑰一起解密密文,但如果這樣做,那麼客戶 ID 將是明文。
是否有某些原因您不想像通常那樣使用隨機隨機數?如果沒有特定的理由離開標準路徑,那麼您應該避免這樣做。
您不需要加密來實現您的目標。更安全的解決方案是讓銀行使用不可逆的鍵控散列函式(也稱為偽隨機函式)。他們的銀行會對你保密。
2019 年的標準 PRF 將是HMAC -SHA256。所以銀行會發給你
HMAC_SHA256(key,account_number)
而不是實際的帳號。通過首先計算 HMAC,銀行將能夠通過帳號進行查找(通常稱為“點查詢”,即完全匹配查詢)。對於它的價值,我從個人經驗中知道這個確切的解決方案已經在銀行業大規模使用。HMAC 在實踐中被截斷為 128 位並儲存為 UUID。銀行經常與每個交換夥伴使用不同的密鑰來防止關聯。