2016年5月18日 安全

在VxWorks上使用TPM密封数据

KaKay照片

作者:Ka Kay Achacoso

VxWorks对数据保护的支持利用了可信平台模块(TPM), TPM是一种用于在安全系统中建立信任根的安全加密处理器。tpm可用于多种安全流程,包括本地认证和远程认证。这篇博客文章关注的是另一个方面:使用TPM作为存储的信任根,以及VxWorks如何使用TPM来保护静止的数据。

假设我有一些绝密数据以一组字节的形式存储在VxWorks设备上。我不希望任何未经授权的人看到它。如果有人设法从设备的存储复制文件,或试图黑进VxWorks设备访问存储中的数据,我不希望他们能够读取数据。换句话说,我想密封数据,防止未经授权的访问。参见图1。

图1

图1 - VxWorks设备中的绝密数据文件

为了防止未经授权的人看到绝密数据,我对数据进行了加密。然而,tpm不是为加密长数据流而设计的。对于大量数据,VxWorks包括OpenSSL,它能够使用256位密钥进行AES加密。TPM硬件包括一个随机数生成器,它可以生成加密安全的唯一256位密钥。我可以使用OpenSSL和TPM生成的唯一的256位密钥来加密我的最高机密数据。现在我有两段数据:加密的最高机密数据,以及解密最高机密数据所需的256位AES密钥。参见图2。

图2

图2 -使用OpenSSL和256位的AES密钥加密秘密数据

包装密钥层次结构

加密的最高机密数据和我的AES密钥一样安全。谁有我的AES密钥,谁就能读取最高机密数据。为了保护我的AES密钥,我把它隐藏在另一个加密文件中。为此,我用第二个密钥加密我的AES密钥。在可信计算术语中,我用另一个密钥“包装”了我的AES密钥。现在我持有3条数据:我加密的最高机密数据,我包装的AES密钥,和我打开AES密钥的密钥。参见图3。

图3

图3 -用另一个密钥封装256位的AES密钥

现在,最高机密数据就像我的密钥到AES密钥一样安全。我也通过包装来隐藏绝密数据的关键。我可以永远继续下去,把我最新的钥匙装进另一把钥匙,再把那把钥匙装进另一把钥匙,再把那把钥匙装进另一把钥匙……

您最终可以看到,最高机密数据的安全性与最后一个密钥一样,也就是我的根密钥。为了利用TPM,我可以在TPM硬件中隐藏封装键链的根端。下面是它的工作原理。

让我们展开到图2中的场景。我有最高机密数据,我有256位的AES密钥。我想包装我的256位AES密钥来隐藏它。TPM设置RSA密钥对,并使用公钥封装AES密钥。结果是一个包装好的AES密钥,它是由TPM内部的RSA公钥加密的。为了打开AES密钥,我需要TPM内部的私钥。见图4。

图4

图4 -用TPM管理的RSA密钥包装我的256位AES密钥

然而,TPM不会给我RSA密钥对的私有部分。相反,TPM给我的是由TPM中的根密钥包装的RSA密钥。封装的RSA密钥对以一系列字节的形式出现。这一系列表示包装好的RSA密钥对的字节称为TPM密钥blob。当VxWorks设备关闭时,会从TPM上清除RSA密钥对。所以我必须把TPM密钥blob保存在某个地方,而密钥blob只能在TPM内部的根密钥下解锁。参见图5。

图5

图5 - TPM用存储根密钥(SRK)包装RSA密钥对,它永远不能离开TPM。

TPM内部的根密钥是一个特殊的密钥,称为存储根密钥(SRK)。它是TPM中少数几个持久存在的密钥之一,甚至在电源循环后仍然存在。它只知道一个TPM,不能从TPM中取出。TPM可以使用SRK封装和打开密钥,但不能读取其私钥。

在整个封装密钥链中,根密钥是永远卡在TPM中的SRK。通过使用SRK作为根密钥,我可以为TPM内部的存储建立信任根。

我有加密的最高机密数据,一个封装的AES密钥,和一个RSA密钥blob。密钥blob中的RSA密钥使用只有TPM知道的SRK封装。为了解密我的最高机密数据,我将RSA密钥blob加载到TPM中,以便TPM可以使用SRK打开它。然后我将包装好的AES密钥传递给TPM,以便TPM可以使用RSA密钥展开它。然后我用OpenSSL软件加密来解密我的绝密文件。这只是在图5中从右到左向后工作。

使用系统状态和密码保护数据

此外,只有当密钥展开时的系统状态与密钥包装时的系统状态相匹配时,密钥的展开才能成功。TPM包含一组特殊的寄存器,称为平台配置寄存器(PCR)。PCR的完整解释超出了本博客的范围,但一个简单的解释是,PCR的值是独一无二的软件运行在系统上,不能被复制。如果入侵者运行另一套软件来获取我包装好的钥匙,那么打开钥匙就会失败。

图6

图6 - RSA密钥用SRK封装,由SRK密码和不可能复制的pcr保护。

SRK由SRK密码保护。只有知道SRK密码的用户才能打开链中的下一个密钥。参见图6。

综上所述,我的绝密数据只有在满足以下所有条件时才能读取:

  • 已获取加密后的AES密钥、RSA密钥对和加密后的数据文件
  • 解密使用原来的TPM硬件。(不能有人把我加密的绝密数据和包装好的密钥转移到另一个设备上,打开密钥读取数据。)
  • VxWorks设备正在运行已知的一组软件模块。(有人不能用另一种操作系统启动我的设备,然后用TPM打开密钥。)
  • 启动密钥解包链的用户必须知道SRK密码。

裤子在VxWorks

裤子(http://trousers.sourceforge.net/)是一个开源软件栈,由可信计算组设计,提供api与TPM硬件交互。这个堆栈已经集成到VxWorks中,使应用程序能够使用TPM。除了基本的裤子实现,裤子TPM-Tools模块也包括在内。

TPM- tools模块包含一些简单的命令,这些命令很容易从VxWorks C-shell控制TPM。对文件进行密封(加密)的过程包括对OpenSSL和TPM的多次调用。TPM-Tools模块将所有这些步骤打包到一个名为的方法中tpm_sealdata ().该方法的输入是需要加密的数据文件、需要锁定的pcr列表和SRK密码。输出是一个单独的加密文件,其中包含三个部分:加密数据、封装的AES密钥和封装的来自TPM的RSA密钥blob。这个文件可以存储在文件系统中。当打开(解密)文件时,TPM-Tools提供tpm_unsealdata ()方法,它为这三个部分解析加密的文件,然后使用TPM解包密钥,并使用OpenSSL解密数据。

档案密封的变化

本博客描述的文件密封过程如下tpm_sealdata ()执行,并提供了文件密封操作的一个示例。您可以根据自己的需要调整操作。例如,您可以将密钥包装链扩展为更多的密钥,并将包装好的密钥存储在不同的存储区域中。您可以为每个密钥blob输入不同的密码。您可以更改绝密数据的加密算法。

TPM具有定义根键的选项,可以将根键移动到不同的TPM,这样您就不会被锁定在一个特定的硬件上。您可以研究TPM可迁移根密钥以获得更多信息。

在处理数据密封时,您还应该了解永久丢失根密钥的情况。在这种情况下,你的数据将永远被封存,即使是你自己。例如,大多数系统允许清除TPM,这将永久删除SRK。没有SRK,就没有办法打开密钥和打开数据。如果您的系统状态受到损害,并且您不能再运行在键包装时运行的相同软件,那么您原始的PCR值将与打开键包装所需的值不匹配。

VxWorks团队致力于为嵌入式设备提供安全解决方案。支持TPM的数据保护是VxWorks平台上众多安全解决方案之一。看看http://www.windriver.com/products/vxworks/technology-profiles/#security获取更多安全解决方案。

以前的云计算和返回-不同用户的不同模拟环境
下一个虚拟是现实