如何在Windows/Linux系统中使用TPM芯片存储并导出数据文件
TPM芯片数据存储与导出实操指南(Windows/Linux)
先明确核心前提:TPM不是通用存储介质,存不了大文件,它自带的非易失性(NV)存储单块最大通常只有1024字节,只适合存密钥、短凭证、哈希值这类小体量敏感数据,所有读写操作都受硬件安全策略管控,未授权状态下无法直接读取存储的明文内容。
Windows系统操作(适配TPM 2.0、Windows 10/11正式版)
- 前置校验:按
Win+R输入tpm.msc回车,确认面板显示“TPM已就绪,可以使用”,规范版本标注为2.0即可操作。
存储数据流程
Windows下直接用系统内置的TPM PowerShell模块操作,不需要装第三方工具:
- 以管理员身份启动PowerShell,首次使用先执行TPM初始化命令:
Initialize-Tpm -AllowClear -AllowPhysicalPresence
若返回“TPM已初始化”提示直接跳过这步,不要重复执行。
- 创建NV存储索引块:TPM的存储是按独立索引地址划分空间的,用户可用索引范围为
0x01000000~0x01FFFFFF,比如选0x01000001作为存储地址,设置容量、读写权限:New-TpmNvIndex -Index 0x01000001 -Size 32 -AuthWrite Owner -AuthRead Owner
参数说明:-Size后面填要存储的数据字节长度,比如存32位SHA256哈希就填32;-AuthRead Owner代表只有TPM所有者授权才能读取,要设置为开机无授权直接可读就把参数改成-AuthRead None。 - 写入本地数据到TPM,比如待写入的敏感数据存在
C:\temp\secret.bin路径下,执行:Set-TpmNvIndex -Index 0x01000001 -Path C:\temp\secret.bin
关键提示:写入完成后本地原文件可直接删除,数据保存在TPM芯片独立存储中,不会因为重装系统、更换硬盘丢失,除非TPM被物理复位。
导出数据流程
- 管理员身份打开PowerShell,执行读取命令,指定索引地址和本地导出路径:
Get-TpmNvIndex -Index 0x01000001 -Path C:\temp\exported_tpm_data.bin - 若创建索引时设置了Owner读权限,执行命令后会弹出授权验证窗口,输入TPM初始化时设置的所有者密码即可完成导出。
注意:如果连续5次输错授权密码,会触发TPM读锁定机制,需要等待系统预设的冷却周期或者物理复位TPM才能重新操作。
Linux系统操作(适配TPM 2.0、Ubuntu 22.04/CentOS 8及以上版本)
- 前置依赖:先安装官方TPM工具集,Ubuntu执行
apt update && apt install -y tpm2-tools,CentOS执行dnf install -y tpm2-tools;安装完成后执行ls /dev/tpm*,能看到/dev/tpm0或/dev/tpmrm0节点代表TPM已被系统正常识别。
存储数据流程
- 首次操作先设置TPM所有者层级授权密码:
tpm2_setprimaryauth -c o -P 你设置的TPM所有者密码 - 创建NV存储索引块,同样以
0x01000001索引、32字节容量为例,设置所有者可读写权限:tpm2_nvdefine 0x01000001 -s 32 -a "ownerread|ownerwrite" -P 你设置的TPM所有者密码 - 写入本地数据到TPM,比如待写入文件为当前目录下的
secret.bin,执行:tpm2_nvwrite 0x01000001 -i ./secret.bin -P 你设置的TPM所有者密码
校验提示:写入完成后可执行tpm2_nvreadpublic 0x01000001查看存储块状态,确认写入字节数和预设值一致即操作成功。
导出数据流程
- 执行读取导出命令,指定索引地址、授权密码、本地导出路径:
tpm2_nvread 0x01000001 -o ./exported_tpm_data.bin -P 你设置的TPM所有者密码 - 若创建索引时设置为无授权可读,去掉
-P及后面的密码参数即可直接导出。
常见操作注意事项
- 写入数据长度不能超过创建NV块时设置的
-Size值,否则会直接报写入错误 - 如果需要把存储的数据和系统启动链绑定(类似BitLocker的TPM校验逻辑),创建索引时加上
platformcreate属性,一旦BIOS、引导分区被篡改,TPM会自动锁死对应索引的读权限 - 在BIOS中执行TPM清除操作、或者短接主板TPM复位针脚,会清空TPM内所有NV存储数据,操作前一定要提前导出重要数据备份
内容的提问来源于stack exchange,提问作者Leona Nguyen
相关产品推荐
相关产品推荐

