Aes

AES 256 CBC - 儲存本地數據,如何保存 IV 向量?

  • November 7, 2019

我想使用 AES256 CBC 來保護本地儲存文件夾中我的應用程序的小數據(<100kb)免受誤用。我不是數據加密方面的專家,所​​以我將嘗試逐步理解它。

我只想確保我自己理解它。我有一個用於解密/加密的密鑰,然後是我為每次新加密生成的 IV。而且因為 IV 不是秘密,我可以將它附加到數據的末尾,類似這樣:加密數據 + IV,然後在解密期間我只讀取最後 16 個字節並使用 IV 進行解密。我是正確的?或者有什麼我看不到的錯誤?

我的主要目的是向使用者隱藏數據,不允許他們更改數據。所以也許,使用認證加密(GCM?)會更好。你怎麼看?有很多類型的加密,我無法決定。

我正在使用 OpenSSL 庫。

如果您使用的是 AES-CBC,您可以隨意儲存 IV。對 IV 保密並不重要;您只需要確保對手無法提前預測 ​​IV 。

但是,您有正確的直覺,通常應該始終使用經過身份驗證的密碼,例如 AES-GCM。AES-CBC 之所以不好,還有其他原因也與填充有關——AES-GCM 提供了比 AES-CBC 更好的安全合約。對於 AES-GCM,nonce(有時也稱為 IV)的唯一要求是它必須對每條消息都是不同的:您不能在單個密鑰下在兩條消息之間重用 nonce,如果這樣做,後果將是致命的。

那就是說……

我的主要目的是向使用者隱藏數據,不允許他們更改數據。

…聽起來您將軟體的使用者視為他們自己電腦上的敵人。如果您正在嘗試執行某種數字限制管理 (DRM) 方案,請忘記它。這不僅是無望的——如果它發生在使用者自己的電腦上,使用者無論如何都可以獲得密鑰——而且試圖徵用使用者自己的電腦來違背他們的利益,然後懲罰那些缺乏的人在道德上是錯誤的技術能力來解決您濫用權力在它們上執行程式碼的問題。

我對 openSSL 不熟悉,但是將 IV 添加到消息的末尾就可以了,因為僅使用 IV,除非您擁有密鑰,否則您將無法做任何有用的事情。

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