在嵌入式系统中安全地存储和使用密钥


7

我正在使用一个微处理器-PIC32MZ2048efm144 MCU,该单片机接收使用特定密钥加密的命令,将其解密并执行该命令。加密的命令是脱机存储的,所以我不能随时更改密钥。密钥是FIXED。这些命令由服务器加密,并由电话下载。当手机不在线时,电话会在以后的时间将加密的命令发送到MCU 。在电话将其传达给MCU之前,这些命令已被加密,因此无法使用会话密钥。

我可以将外部加密/解密模块连接到PIC,但随后数据将至少在一个方向上通过解密。

解决方案带来了这里: 在嵌入式设备的内存中存储安全密钥

使用一次性密钥进行加密,但是我需要存储一个超级秘密密钥

我的雇主所要求的是密钥不可访问,因此除了安全存储模块和MCU提供的物理保护之外,不考虑物理保护。

假设不使用军事级设备,你们是否知道并可以推荐解决方案?

提前致谢!


您能否进一步说明要防止的事情?微处理器做什么?您认为使用公钥/私钥可能有效吗?是否将私钥存储在微处理器上?然后,发送命令的设备将创建一个会话密钥,使用公共密钥对其进行加密,然后将其发送给您。之后,双方都使用会话密钥。如果攻击者拥有公共密钥(即使它被称为“公共”,但实际上不必一定是公共的)会发生什么?
mkeith '16

@mkeith我更新了问题,希望对您有所帮助:)
Sonja

3
既然您选择了该PIC,为什么不使用它提供的“程序安全密钥存储”呢?它具有自己的内置加密模块!
pjc50 '16

2
我认为您没有明确量化秘密的价值。似乎您想要一种便宜且可靠的方法(我认为这是未知的)。要求澄清在第一个解决方案中发现漏洞可能需要做什么。签署的无线固件更新将是我的第一个不可协商的功能……这始终是系统问题。
肖恩·霍利哈内

好吧,如果PIC的存储器受到保护(甚至具有密钥存储模块),为什么不使用简单的AES加密呢?我知道它是对称的,但是如果服务器是安全的(我们必须假设),那么这里就没有风险-还是那里?
Jan Dorniak '16

Answers:


11

抱歉,此答案实际上无法解决您的问题。但是评论太长了,它会使您以正确的方式重新考虑问题(因为它是正确的,我认为这是有缺陷的)。

解决此类问题时必须考虑系统的所有组件,并对潜在的黑客可以做什么或不能做什么做出合理的假设。

例如:

您说:“ PIC32MZ2048efm144(MCU)接收使用特定密钥加密的命令,将其解密并执行该命令”。我想命令执行的结果是触发一些GPIO来驱动东西。

然后,为什么您担心某些数据可能在MCU和加密/解密模块之间经过解密?无论如何,能够访问硬件以查看解密命令的黑客将能够直接对MCU的GPIO进行操作,并能够“轻松地执行操作”。

第二个例子:

使用准时键是一个想法。但是正如您所说,您将用于生成一次性密钥的主主密钥存储在哪里?您将面对与原始问题完全相同的问题。

实际上,如果您认为黑客有可能潜入系统的任何位置(这对您而言,目前看来是这样),则无法确保您的系统安全

那么,什么使系统安全呢?

智能卡之所以安全,是因为假设黑客可以探测内存和CPU块之间IC内部的内部路由是不合理的。

电动门锁之所以安全,是因为认为黑客可以触及驱动该锁的电线是不合理的。

等等...基本上,您必须首先确定黑客将无法做的事情,然后从那里制定出整个解决方案。例如,是否可以将整个系统放在安全的,防篡改的盒子中?在这种情况下,您可以自由地解密通过内部总线传递的命令。

如果不知道黑客无法合理地做什么,就无法构建安全的系统。你没有告诉我们。因此,我们无法提出完整的解决方案。


首先,感谢您的精心解答!我以相信会回答您的方式更新了问题:)
Sonja

我从您的帖子编辑中了解到,只有密钥需要保护。该命令的实际结果并不需要保护。在这种情况下,请像您建议的那样将密钥放在外部安全模块中,并接受可以清晰看到解密后的命令。如果我的建议由于某种原因无效,请花点时间详细解释什么是可以接受的,什么不是。我们不仅需要在您的帖子中再增加一句话。我们需要事物的全貌。真。
暗淡

5
另外,我觉得命令加密实际上并不是您想要的。通常,我们需要加密数据(有关某物的某些信息或文档...)。但是我们很少需要加密发送到设备的命令。通常要求在命令上签名,以确保它们来自授权方。但实际上,它们的内容很少敏感。因此,您也应该确认这一点。
暗淡

2

这看起来像一个经典情况,其中非对称密钥加密将很有用。在非对称密钥加密中,您有两个密钥,一个是私有密钥,另一个是公共密钥。您想完全保护私钥,但是可以将公钥公开,并且不需要保护。您可能可以将私钥保留在安全系统上,并将公钥保留在嵌入式设备上。


数据用私钥解密(用公钥加密)。否则,这意味着每个人都可以解密(因为每个人都可以访问公共密钥),这将是一个问题。因此,您需要私钥在设备中。那么,现在如何将私钥放入设备中?好了,回到最初的问题……
昏暗的

能够解密命令不允许从头开始创建新命令,因此以某种方式访问​​公钥不是什么大问题
masterX244

这通常与密码签名相同。这样做的缺点是,如果有人拥有公共密钥(实际上不必是公共的,可以像对称密钥一样安全地存储),则他们可以解密所有内容;但是,正如masterX244所说,您通常无法创建/签名新命令。我认为这是一个很好的解决方案。
CoderTao

0

您无需解释为什么要加密命令(换句话说,威胁模型是什么)。您的目的是防止拥有PIC的设备的对手确定发送给它的命令是什么吗?还是要阻止基于PIC的设备执行由对手替换的命令集,而只允许它执行源自服务器的命令?

如果是前者,您将面临几乎不可能完成的任务:您的设备必须解密命令才能执行命令-拥有PIC设备意味着拥有解密密钥。攻击者可以提取密钥(存储在他拥有的PIC设备中),也可以等到固件对命令解密后再从内存中捕获它们。

另一方面,如果您只是想确保设备仅执行源自服务器的命令,那么您很幸运。在这种情况下,您可以使用公共密钥加密(例如RSA)或公共密钥数字签名方案(例如DSS)。在这些设备中,您的设备仅存储公共密钥:这足以解密命令(或验证数字签名),但不能用于加密设备将接受的命令(或生成数字签名)。这需要私钥,您可以使用私钥在发送命令之前对命令进行加密(或签名)。私钥永远不需要离开服务器。更好的是,在不与外部进行通信的机器上对命令进行签名加密,而仅将这些命令复制到服务器上,以便在外部可访问的服务器上找不到私钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.