Aes-Gcm
最佳實踐:AES-GCM 參數(初始化向量,…)傳輸
顯然沒有強制方法來傳輸 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 保護的內容,您擁有的內容可能很好(例如,如果應用程序知道查看您提供的相關數據以驗證上下文),也可能不是。
有沒有更好的辦法?
正如我所說,從密碼學上講,你很好。至於是否有一種方法可以更好地(更快,更便宜)你正在做的事情,好吧,你實際上比我們更有資格說……