我正在寻找在多个具有有限加密功能的嵌入式设备和 HTTP 服务器(它可能是某种 Web 服务)之间建立安全通道的可能选项。
1. 背景
这些设备仅通过设备上的开发框架支持 HTTP、一些对称密钥算法和一些哈希函数。不幸的是,不支持 SSL/TLS,因此这里不是一个选项。
在启动时,设备会联系 HTTP 服务器以检索其特定配置。在这些设备被送到野外之前,我确实可以完全控制它们。
确定的一些威胁是:
- 下载恶意配置文件。
- 下载错误的配置文件(从另一台设备)。
- 多次下载同一个配置文件。
- 未经授权的第三方窃听配置文件。
- 对 HTTP 服务器的欺诈性访问(此处不一定相关)。
检索配置文件的过程最好只发生一次。下载配置文件后,该特定设备将放弃对 HTTP 服务器的访问。
2. 提案
由于我可以在设备上加载临时共享密钥,然后再将它们放到野外,因此我正在考虑使用keyed-HMAC(哈希消息验证码)来验证设备,而无需通过网络发送密钥。类似于AWS API 身份验证设计的东西,并使用设备的唯一序列号作为密钥 ID。
一旦通过身份验证,设备就会被授予对资源的访问权限,在这种情况下是配置文件。为了减轻某些已识别的威胁,必须在传输过程中对配置文件进行加密和签名(?)。
为此,我正在考虑使用经过身份验证的加密模式。
我只能在 CBC模式下使用AES256和HMAC-SHA256。框架内没有其他“适当的”经过身份验证的加密算法。
3. 问题
是否有意义?
为了避免在足够复杂的事情上增加复杂性,是否可以选择使用预加载的共享密钥作为 HMAC 函数的密钥和共享密钥哈希作为 AES 加密的加密密钥?
它是否允许在特定情况下减轻已识别的威胁?
可以简化流程并保持其安全属性吗?