2

我正在尝试使用非对称加密来加密固件。引导加载程序将解密并更新闪存。这是在具有 32 位 CPU 以 60MHz 执行的嵌入式设备上。

我想使用 ECC,因为它具有多种优势。我是加密新手,我对 ECIES 中实现的 ECC 的理解是使用 ECC 生成密钥并使用 AES 进行实际数据加密。由于代码和内存大小,我不能支持多种加密算法。

是否有可以像 AES 一样使用的 ECC 实现。我所寻找的只是使用“私钥”来加密固件,而引导加载程序使用“公钥”来解密它。

谢谢。

4

3 回答 3

2

让我们从问题的最后一句话开始:

我所寻找的只是使用“私钥”来加密固件,而引导加载程序使用“公钥”来解密它。

这里的术语有些混乱。私钥用于解密(或签名),公钥用于加密(或验证)。如果我理解正确,您想要的是引导加载程序验证固件上的签名,以便引导加载程序只接受您自己正确签名的固件。

有多种非对称签名方案可用于此目的,包括一些基于椭圆曲线密码学的签名方案。例如,您可以使用 ECDSA 的 OpenSSL 实现(参见http://www.openssl.org/docs/crypto/ecdsa.html)。

恐怕问题中没有足够的信息来正确选择最佳签名方案(如果需要对固件保密,也可能是加密方案)。在任何情况下,良好的密码学都不足以使系统安全,其他考虑因素(如安全实施)同样重要。

如果这对您来说很重要,并且您担心黑客可能会尝试破解,我强烈建议您购买安全专业人员的服务。正确使用密码学是一项非常棘手的工作,需要对系统有充分的了解——否则你可能会遇到这样的情况

于 2012-08-22T06:52:57.610 回答
2

如果您寻找“身份验证”,您必须使用像 EC 这样的非对称算法,这通常是因为如果用户或进程想要更新“固件”,他应该通过他的“签名”向引导加载程序标识他自己,以检查谁请求这个更新。

完成后,引导加载程序将从安全存储器加载对称密钥以解密您想要执行的操作。

因此,您有一个用于加密 (AES) 的对称密钥和两个用于身份验证的非对称密钥(=您是谁?)。

注意:EC 在 32 位 CPU 上以 60MHz 执行加密没有优势,除非您的应用程序需要非对称加密而不是身份验证,这是由于用户和引导加载程序之间的线路不安全而发生的。

因此,您可以使用引导加载程序的“公钥”对固件进行加密,引导加载程序使用其“私钥”对其进行解密,但是由于非对称算法的高计算量,实现成本很高。

寻找“轻量级密码学”,这对于您的应用程序来说是典型的。

于 2012-09-27T13:41:56.587 回答
2

我不确定您是否完全了解 ECIES 的组成部分:

http://en.wikipedia.org/wiki/Integrated_Encryption_Scheme

这是一项相当多的工作,在我看来,它需要大量的原语,包括至少一个对称原语。那也可能是AES。

于 2012-08-15T19:20:56.003 回答