至于派生会话密钥,您可能需要研究
Key Derivation Function (KDF)
. 通过谷歌搜索,它可以返回许多与建立会话密钥相关的有用信息。你也可以问你的问题
https://crypto.stackexchange.com/
.
至于在stm32中存储密钥,这取决于您的要求。这些密钥需要在会话之间保持,还是每次建立连接时都可以生成一个新的密钥?由于两个原因,每次建立新连接时生成新密钥更安全:
-
每个连接都是不同的,所以即使有人设法从过去获得会话的密钥,也只能用它来解密该会话。
-
如果为每个新会话生成一个新的密钥,则无需将其存储在任何地方,如闪存,因为您可能只将其保存在RAM中。关闭设备电源将擦除密钥。启用读保护可防止访问RAM和内部闪存。
然而,关于第二点,STM32不被视为“安全微控制器”。它缺少防止硬件攻击的硬件元素-电源电压故障检测、侧通道预防、安全网格等。有足够的资源和确定,攻击者将能够获得您使用的加密密钥,例如通过碾碎芯片包和光学读取您的数据。这涉及到设备的安全性——开发时间成本、硬件安全成本。使用stm32,您所能做的就是使其更加困难(将密钥保存在RAM中,并且仅在需要时使用,然后用噪声覆盖它们),并限制攻击者的范围(尽可能频繁地更改会话密钥,例如每个会话)。