Nonce

AES-GCM 的風險是什麼ķ你_,N常年_____esag_和ķ和是,ñ○nC和,米和ss一個G和Key, Nonce, Message其中 Nonce = 消息

  • April 12, 2019

一群銀行家將敏感的財務資訊儲存在第三方擁有的伺服器上。我代表第 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。銀行經常與每個交換夥伴使用不同的密鑰來防止關聯。

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