我正在尝试使用非对称加密来加密固件。引导加载程序将解密并更新闪存。这是在32位CPU以60MHz执行的嵌入式设备上。
由于其各种优势,我想使用ECC。我是加密新手,我在ECIES中实现的os ECC理解是使用ECC进行密钥生成,并使用AES进行实际数据加密。由于代码和ram大小,我不能支持多种加密算法。
是否有ECC的实现可以像AES一样使用。我正在寻找的是使用“私钥”来加密固件,引导程序使用“公钥”来解密它。
感谢。
答案 0 :(得分:2)
我不确定你完全理解ECIES包含的内容:
http://en.wikipedia.org/wiki/Integrated_Encryption_Scheme
这是相当多的工作,它需要大量的原语,包括至少一个对称原语,在我看来。这也许是AES。
答案 1 :(得分:2)
让我们从问题的最后一句开始:
我正在寻找的是使用“私钥”加密固件,引导程序使用“公钥”对其进行解密。
这里的术语有些混乱。私钥用于解密(或签名),公钥用于加密(或验证)。如果我理解正确,你想要的是引导程序验证固件上的签名,以便引导程序只接受自己正确签名的固件。
有各种不对称签名方案可用于此目的,包括一些基于椭圆曲线密码术的方案。例如,您可以使用ECDSA的OpenSSL实现(请参阅http://www.openssl.org/docs/crypto/ecdsa.html)。
我担心问题中没有足够的信息来正确选择最佳签名方案(如果需要保密,也可能是加密方案)。在任何情况下,良好的加密技术都不足以使系统安全,而安全实施等其他考虑因素也同样重要。
如果这对您来说很重要,并且您担心黑客可能会试图破解,我强烈建议您购买安全专业人员的服务。正确使用密码术是一项非常棘手的业务,需要全面了解系统 - 否则您可能会遇到类似this
的情况答案 2 :(得分:2)
如果你寻找“身份验证”,你必须使用像EC这样的非对称算法,这通常是因为如果用户或进程想要更新“固件”,他应该通过他的“签名”来识别他自己到引导加载程序来检查谁请求此更新。
完成此操作后,引导加载程序将从安全内存加载对称密钥以解密您想要执行的操作。
因此,您有一个用于加密的对称密钥(AES),以及用于身份验证的非对称密钥(=您是谁?)。
注意:EC在32位CPU上执行60MHz加密时没有优势,除非您的应用程序需要非对称加密NOT身份验证,这是因为用户和引导加载程序之间的线路不安全。
因此,您可以使用bootloader的“公钥”来加密固件,而引导加载程序使用其“私钥”对其进行解密,但是,由于非对称算法的高计算,实现成本很高。
寻找“轻量级加密”,它通常适用于您的应用程序。