我正准备开始部署一个嵌入式传感器网络,该网络连接互联网(通过蜂窝网络),并定期将私人数据报告回中央服务器。不幸的是,该设备既没有连接(非常高的延迟)也没有使用 SSL 的处理能力,所以我想我只能自己想出一些东西,这违反了密码学的第 1 条规则。
我想出了什么:
我们基本上有三个通道(带外命令、对 Internet 的 http 请求、http 响应),因此将在每个设备的基础上存储三个独立的密钥(在组装期间随机生成)。
HTTP 数据被加密为 E(iv, key, payload || H(key, payload)),其中 E 是 CBC 模式下的 AES 128,H 是 SHA256 HMAC。在嵌入式端,iv 生成为 H(当前时间)并以明文形式传输,以及用于选择正确密钥的设备唯一 id。微控制器上没有 RNG,所以我正在为 IV 尽我所能。这够好吗?
由于命令不是私有的但需要进行身份验证,因此它们作为有效负载传输 || H(key, payload) 使用与 HTTP 请求或响应不同的密钥。
我知道要做到这一点真的很难,我是否遗漏了任何明显的东西或者我有任何细节错误?