Aes-Gcm

最佳實踐:AES-GCM 參數(初始化向量,…)傳輸

  • November 11, 2017

顯然沒有強制方法來傳輸 AES-GCM 參數。我只讀到初始化向量通常會以密文為前綴。所以,關於其他參數,我也可以發送這樣的字元串

my_string = ':'.join([
 'a_unique_iv',              # initialization vector
 '128',                      # the tag size in bits
 'id-1234',                  # associated_data
 'the_cipher'                # cyphertext (converted to string)
])

到儲存數據的 REST API 端點。或者另一個例子(我更喜歡因為我已經使用了 json 對象):將所有參數添加為 json 欄位:

my_json = {
 'field_a': 'value b',
 'field_c': 'value_d',
 ...
 'aes_gcm_parameters_and_data': {
   'nonce':           'a_unique_iv' ,
   'tagBits':         128,
   'associated_data': 'id-1234',
   'cyphertext':      'the_cipher'    // converted to string
])

關於最佳實踐:兩種方法都好嗎?有沒有更好的辦法?謝謝。

兩種方法都好嗎?

兩者都很好。GCM 的全部意義在於密文(以及隨機數和密文)受到保護,因此任何傳輸它們的方法都可以。

我確實想補充一點:“關聯數據”通常用於將密文綁​​定到上下文。例如,如果您正在加密數據庫記錄,您想要防止的一件事是有人在一個欄位中獲取密文,並將其複製到另一個欄位。相關數據旨在防止這種情況;如果關聯的數據可能是記錄密鑰,那麼攻擊者就不能這樣做;密文複製到的記錄將具有不同的密鑰,因此解密將失敗。

因此,關聯數據通常對應用程序有意義;根據您使用 GCM 保護的內容,您擁有的內容可能很好(例如,如果應用程序知道查看您提供的相關數據以驗證上下文),也可能不是。

有沒有更好的辦法?

正如我所說,從密碼學上講,你很好。至於是否有一種方法可以更好地(更快,更便宜)你正在做的事情,好吧,你實際上比我們更有資格說……

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