2016年5月18日 安全

用TPM密封数据在VxWorks上

Kakay照片

作者:Ka Kay Achacoso

VxWorks支持数据保护利用可信平台模块(TPM),是用于在安全系统中建立信任根的安全密码处理器。TPM可以用于若干安全过程,包括本地证明和远程证明。此博客条目侧重于不同的方面:使用TPM作为存储的信任根,以及VxWorks如何使用TPM来保护休息的数据。

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

图1

图1 - VxWorks设备中的最高机密数据文件。

为了将顶级秘密数据从未经授权的眼睛中保留,我加密数据。但是,TPMS不是用于加密长数据流的设计。对于大量数据,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 - 将256位AES键与由TPM管理的RSA密钥包装。

但是,TPM不会给我RSA密钥对的私有部分。相反,TPM提供由TPM中的根密钥包装的RSA密钥。封装的RSA密钥对以一系列字节的形式出现。表示包装的RSA密钥对的这一系列字节称为TPM密钥blob。当VxWorks设备关闭时,从TPM删除RSA密钥对。因此,我必须将TPM密钥团保存在某处,而密钥团只能用TPM中的根密钥解锁。参见图5。

图5.

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

TPM内的根键是一个名为Storage Root密钥(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包含一个名为Platform Configuration寄存器(PCR)的特殊寄存器。PCR的完整解释超出了本博客条目的范围,但简单的解释是PCR的值对于在系统上运行的软件是独一无二的,并且无法复制。如果入侵者运行不同一组软件以获得包装键,则关键展开失败。

图6.

图6 - RSA键随SRK包装,并受到SRK密码和PCR的保护,不可能复制。

SRK受到SRK密码的保护。只有了解SRK密码的用户只能揭开链中的下一个键。见图6。

总而言之,只有满足以下所有条件,只能读取我的最高秘密数据:

  • 已获取加密后的AES密钥、RSA密钥对和加密后的数据文件
  • 原始TPM硬件用于解密。(有人无法将加密的顶级秘密数据和包裹键移动到另一个设备上以解开键并读取数据。)
  • VxWorks设备正在运行已知的预定软件模块集。(有人不可能把我的设备启动到一个不同的操作系统,然后用TPM打开密钥。)
  • 启动关键录制链的用户必须知道SRK密码。

VxWorks上的裤子

裤子(http://trousers.sourceforge.net/)是由Trusted Computing Group设计的开源软件栈,提供与TPM硬件交互的api。这个堆栈已经集成到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.有关更多安全解决方案。

以前的到云端再次 - 不同用户的不同仿真环境
下一个虚拟现在是现实