最新的NI Linux Real-Time更新包含对可信平台模块(TPM)的支持。本文定义了TPM、解释了TPM的用例,并提供了如何使用TPM的信息。
可信平台模块(TPM)是用作信任根的硬件组件,用于安全地生成、存储和使用加密密钥。TPM是存储机密(不希望他人获取的信息)的安全位置。TPM为存储加密密钥等敏感信息提供了诸多优势。
这些功能使TPM成为处理敏感数据或在必须保护数据的敏感环境中运行的测试系统的重要补充。
TPM通常用于磁盘加密、设备身份和身份验证、验证Firmware组件的真实性(安全启动)以及保护应用程序机密。对于测试测量应用程序,这意味着系统可能会将TPM用于下列范例之一:
TPM 1.2于2003年发布,支持RSA和SHA-1加密。TPM 2.0是2014年对TPM标准进行的重大重新设计,包含ECC、SHA-256等现代算法。TPM 2.0是Windows 11要求的现代标准,被部分NI硬件使用。
在NI Linux Real-Time中访问和使用TPM是通过设备的SSH会话完成的,需要了解Linux、NI Linux Real-Time和安全概念。此处提供的信息可作为开发人员评估NI Linux Real-Time安全应用程序的起点。详细信息见最新的NI Linux Real-Time文档和此处提及的各个库的公共文档。
这些说明仅适用于带TPM的NI Linux Real-Time设备。TPM在某些PXI控制器和CompactRIO控制器上可用。有关包含TPM芯片的PXI控制器列表,请参阅NI控制器受信任平台模块(TPM)支持。请注意,大多数CompactRIO系统不包含TPM,但可与NI cRIO-9048一起订购。在本文档中,我们使用了带TPM选项的NI cRIO-9048。
NILRT 11.5 (2026Q2)改进了对用户和应用程序TPM交互的支持。本文档假定系统至少升级到此版本。升级到最新版本是安全系统的最佳实践。
使用NI硬件管理器连接至终端,使用Update Firmware和Manage Software侧边栏对话框升级操作系统组件。
使用SSH客户端打开终端设备的shell连接。在命令窗口中,打开SSH会话:
输入在NI MAX或NI硬件管理器中配置的用户名和密码。默认用户名为admin,密码为空。
如设备带有TPM,启动时将创建一至两个文件:tpm0和tpmrm0。如有设备,可使用以下命令:
将返回以下信息:
如设备不包含TPM,则响应为
从NI Linux Real-Time的2026 Q1版本开始,将包含一个元程序包安装程序来安装所有支持TPM的库。
该命令将安装多个TPM程序包。可使用的工具包括:
tpm2-tools包含100多个与TPM交互的函数。有用的命令是“tpm2_pcrread”:
这将返回列表中TPM寄存器的内容。
这些寄存器称为平台配置寄存器(PCR)。前8个PCR(0–7)由BIOS写入。这些散列值无法直接写入,仅当系统测量值发生改变时才会更新。
PCR 7包含安全启动状态,包括是否启用安全启动、使用的供应商密钥等。该寄存器通常用于作出解锁决定-如果存储的值与当前系统测量值匹配,则系统相同且可信。
PCR 8和PCR 9由操作系统启动加载程序(GRUB)控制。PCR 8包含启动配置的启动加载程序进行的测量。可包含操作系统启动加载程序组件、内核镜像,以及启动加载程序之后、完整操作系统运行之前发生的操作系统特定测量。
PCR 9包含操作系统配置数据,例如内核命令行参数、影响运行时行为的操作系统配置值,以及启动时测量到的策略相关的操作系统设置。PCR 8和PCR 9用于测量加载的操作系统及其配置。
其余寄存器PCR 10-23是操作系统和应用控制的PCR,用于测量软件、运行时状态和启动后发生的动态事件。TPM允许软件应用程序决定如何使用这些PCR。通常使用TPM密封密钥加密数据存储或传输、远程身份验证密钥存储、检测运行时篡改和其他安全事务。
使用tpm2_eventlog读取securityfs文件系统中tpm0设备的binary_BIOS_measurements文件的内容,可查看启动时所有测量的记录。
该命令解析记录文件,显示启动过程中TPM要进行的PCR测量。通过该日志可全面了解可能改变系统状态的事件。
访问TPM PCR后,可通过编程读取和写入TPM并使用TPM功能。TPM函数的详细用法已超出本文的讨论范围,但此处列出了一些可采取的措施范例。
cryptsetup
Cryptsetup为空闲数据提供磁盘加密。通过cryptsetup,您可以创建加密卷、解锁加密卷以便挂载、锁定加密卷、管理LUKS密钥插槽以及集成TPM密封密钥。Cryptsetup定义了磁盘的加密方式,而clevis定义了密钥的提供和访问方式。
例如,按照下列步骤,使用cryptsetup加密磁盘上文件中的磁盘分区。
1. 创建一个二进制文件来保存磁盘镜像。
2. 在磁盘镜像文件中创建LUKS加密分区。
3. 使用密码打开加密分区,并在/dev/mapper下创建一个虚拟块设备,表示分区的解密视图。
4. 在映射块设备上创建文件系统。
5. 挂载加密分区。
挂载加密分区后,可像使用其他文件系统一样使用。
也可使用类似方法对所选可移动存储驱动器进行加密。通过在操作系统中将步骤2中的luksFormat命令指向驱动器的设备路径,可实现该操作。
关于使用cryptsetup的其他加密选项或配置,见Cryptsetup文档 。请注意,当前不支持对LinuxRT操作系统分区加密。
clevis
clevis支持用户将Linux统一密钥设置(LUKS)卷解密密钥槽绑定到TPM PCR状态。以下命令为位于/dev/sdx的LUKS分区创建新的密钥槽,绑定至TPM当前对PCR 7、8和9的测量。
在该情况下,仅当Secure Boot和OS Firmware未改变时,可在后续启动时读取LUKS解密密钥。
传递给clevis的策略字符串将决定释放解密密钥的必要条件。
如果内核发生更改,将解锁,但Firmware必须相同。允许操作系统更新。
仅当操作系统未改变且PCR 11中存储的应用程序控制测量值未改变时解锁。
可为LUKS卷创建多个密钥槽,从而提供多种解锁方法。如果TPM PCR匹配,一个插槽可能允许自动解锁。如果卷与TPM PCR中存储的值匹配,则另一个插槽可能允许密码解除锁定卷。另一个允许输入离线存储的恢复密钥。
最佳实践说明:即使使用TPM状态解锁加密设备,仍建议保留使用cryptsetup配置的原始LUKS解密密码作为解锁数据的备份方法。
要查看解锁LUKS设备的设备密钥,请使用clevis luks list:
如需查看完整的clevis命令列表,请调用帮助函数(-h)
事件记录有助于通过了解启动序列中发生的情况来调试问题。在/sys/kernel/security文件夹中访问该日志。如存在TPM,该命令:
将显示已创建的tpm0/文件夹:
在“tpm0/”目录下,BIOS将启动序列中的信息记录到一个名为“binary_BIOS_measurements”的文件中。阅读本文件以调查启动问题。
使用运行NI Linux Real-Time的启用了TPM的设备,可实现利用TPM功能存储密钥的标准Linux库。这些密钥可用于安全功能,包括磁盘加密、安全启动、数据加密、设备身份验证以及用户编程写入应用程序的其他功能。在TPM设备中创建和存储的密钥受到保护,不会被设备的处理器或内存访问。TPM是提供该级别保护的行业标准,Windows 11需要该标准,NI Linux Real-Time设备现在也提供该标准。
注册商标Linux®的使用获得了Linus Torvalds专属授权商LMI的再授权,Linus Torvalds拥有Linux®注册商标在全球范围内的所有权。
Microsoft和Windows是Microsoft公司集团的商标。