加密我的传感器流量有什么意义?
您可以使用多种加密方法来保护您的流量,每种方法的功耗略有不同,因此我将选择几个流行的选择。我用来评估每种方法的方法应该适用于您发现并希望比较的任何其他密码。
AES
AES是最流行的对称密钥加密算法之一(这意味着您使用相同的密钥进行加密和解密)。在安全性方面,AES 是一个安全的赌注:
最佳公共密码分析
已经发布的攻击在计算上比完全蛮力攻击更快,尽管截至 2013 年没有一个在计算上可行。
-维基百科
论文Biclique Cryptanalysis of the Full AES描述了 AES-128 需要 2 126.1 次操作,AES-192 需要 2 189.7 次操作,AES-256 需要 2 254.4 次操作才能破解。在 2.9 GHz 处理器上,假设每个“操作”是 1 个 CPU 周期(可能不是真的),破解 AES-128 将需要很长时间。有 10 000 个在运行,它仍然需要几乎永远。因此,安全性在这里不是问题;让我们考虑电源方面。
本文显示(第 15 页)使用 AES 加密块使用 351 pJ。稍后我将在讨论其他一些常见算法后进行比较。
西蒙
之前问过一个关于SIMON和SPECK的问题,值得一读。SIMON 擅长的地方是您需要经常加密少量数据的情况。我之前链接的论文指出,SIMON 64/96 对 64 位使用 213 pJ,这在您只需要发送 32 位有效载荷时很实用。
不过,SIMON 64/96比 AES更容易破解;我链接的论文建议进行 2 63.9 次操作,因此我们的 10 000 个 CPU 设置可以在短短几年内破解加密,而不是数百万年。
真的有关系吗?
按照您计划的传输速率,答案几乎肯定是否定的;密码学的能源使用将完全可以忽略不计。对于 AES,您每天将使用 50 544 pJ,因此具有 2340 J 能量的廉价碳锌 AA 电池将远远超出设备的使用寿命。如果你用 SIMON 重新评估计算,你会发现它也有很长的寿命
简而言之,除非您非常频繁地传输,否则无线电对功率的影响要大得多。维基百科引用的功率使用在 0.01 到 0.5 W 之间。如果您以 0.01 W传输1 秒,那么您一整天使用的功率已经超过 AES 的功率。
但是,对于 BLE,您可能只依赖默认安全性就可以了;BLE 默认使用 AES-CCM 来保证链路层安全:
低功耗蓝牙中的加密使用 AES-CCM 加密。与 BR/EDR 一样,LE 控制器将执行加密功能。此函数使用 FIPS-1971 中定义的 AES-128 位块密码从 128 位密钥和 128 位明文数据生成 128 位加密数据。
不过,有人担心BLE 的链路层安全实现存在安全缺陷;这不是 AES 的缺陷;而是蓝牙 SIG 决定在 4.0 和 4.1 中推出他们自己的密钥交换机制。该问题现已在 4.2 中解决,因为现在支持椭圆曲线 Hellman-Diffie。
您的大部分功率可能会用于 RF 传输,而不是用于加密例程的 CPU 周期。传输的每一个额外位都会比您提议的加密花费更多的能量。这意味着如果您采取一种天真的方法,例如在 CBC 模式下使用 AES,您可能会增加消息大小以在每个块中携带额外的位。
如果您确定您的业务需要对数据进行加密,请考虑在CTR模式下使用 AES来生成流密码位。计数器模式适用于处理接收不可靠和数据包可能丢失的情况。您必须保持计数器同步,因此请注意,定期传输计数器的值会增加开销。而且你必须保留几个字节的状态来保存计数器,因为重用加密的比特流可以直接导致数据恢复。
除非您正在进行硬件加速加密,否则当您拥有一个基本上无法满足基本(非加密)需求的处理器时,电源成本可能会很高。然而,在大多数情况下,无论如何使用无线电消耗最多的功率。
由于您专门查看蓝牙 SOC,请考虑BGM-111,它在芯片上具有硬件加速加密。我玩过这个芯片,看起来不错,虽然我没有专门研究加密功能。
另一条路线,如果您想确保即使他们拆卸设备也没有人能够拿到您的钥匙,那么这可能是“最佳”路线。它包含一个 TPM 芯片,如OPTIGA TPM,它具有 Linux 内核支持的 I2C 和 SPI TPM 芯片。
简而言之,您将在没有特定硬件加密的情况下烧毁电池。要么构建一个带有 TPM 芯片的电路板,要么选择一个更现代的 SoC,它已经内置了硬件加密。