当前位置: 首页 > news >正文

TPM 2.0实例探索3 —— LUKS磁盘加密(4)

接前文:TPM 2.0实例探索2 —— LUKS磁盘加密(3)

本文大部分内容参考:

Code Sample: Protecting secret data and keys using Intel® Platform...

二、LUKS磁盘加密实例

4. 将密码存储于TPM的PCR

TPM平台配置寄存器(PCRs)用于防止出现这种情况:攻击者修改了系统启动参数或者启动到他们选择的操作系统以访问敏感数据。TPM PCRs的有效使用需要系统固件、boot loaders、操作系统内核和应用的协作。没有固件、驱动和软件对于TPM的配置,TPM将只能空位于I/O总线上而什么也做不了。

TPM PCRs用于度量引导组件,使用诸如SHA-256的安全哈希算法。当系统重启时,TPM PCRs默认恢复到0值。当系统引导时,对于诸如固件、BIOS、OS loaders等关键系统组件的度量被扩展到PCRs中。扩展一个PCR是一种只加操作,需要通过I/O与TPM交互。由于不可能将PCR设置为用户指定的值,也不可能“退回”I/O,因此TPM PCRs可以证明系统启动顺序以及平台的状态,直到PCR检测停止。例如,PCR0包括了系统固件和BIOS的度量,但不包含操作系统boot loader或内核。使用PCR0的结果是本例将只保护固件替换攻击,假如原始固件正确地进行了测量,并且假设替换固件没有伪造TPM度量 — 一个需要单独缓解的攻击。

在实际操作中,一个有效的PCR集必须被足够完整以证明当前运行的代码以及设计者认为安全关键的任何预先运行的代码。  TCG PC Client Specific Implementation Specification for Conventional BIOS 只明确规定了PCRs 0-7、16和23的使用方法。系统启动中和启动后的PCR用法是特定于操作系统的。

更进一步的解决方案包括以下两个额外的步骤:

  1. 使用PCRs作为TPM 密封对象的代理身份验证。
  2. 在解封密钥文件之后扩展密封的PCRs,以便它不能在当前引导上成为未密封增益。

研读更多关于TPM命令的信息,在以下节中:tpm2_startauthsession, tpm2_policypcr, tpm2_flushcontext, tpm2_pcrread, 和 tpm2_pcrextend.

以当前位于sha256 bank中的PCR0的值创建一个PCR策略:

(1)启动TPM会话

命令如下:

tpm2_startauthsession --session=session.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_startauthsession --session=session.ctx
$ 
$ ls
session.ctx
$ ls -l session.ctx 
-rw-rw---- 1 root root 467  3月 2日 17:06 session.ctx

(2)创建一个包含指定PCR值的策略

命令如下:

tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_policypcr --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy
4bc350fced1d9ec748eb9fac5576eed06178b715969525d1f967451ff89395bf$ ls
pcr0.sha256.policy  session.ctx
$ ls -l 
总计 8
-rw-rw---- 1 root root  32  3月 2日 17:13 pcr0.sha256.policy
-rw-rw---- 1 root root 467  3月 2日 17:13 session.ctx

(3)移除一个指定的句柄,或者所有与一个临时对象相关的上下文,从TPM中加载会话或保存会话

命令如下:

tpm2_flushcontext session.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_flushcontext session.ctx
$ 

http://www.lryc.cn/news/25905.html

相关文章:

  • Linux连接RDP远程服务工具集记录
  • 离散事件动态系统
  • 无线WiFi安全渗透与攻防(二)之打造专属字典
  • 拥抱 Spring 全新 OAuth 解决方案
  • 前端开发与vscode开发工具介绍
  • C++---最长上升子序列模型---友好城市(每日一道算法2023.3.2)
  • maven高级知识。
  • Python 之 Pandas 处理字符串和apply() 函数、applymap() 函数、map() 函数详解
  • 汇川AM402和上位机C#ModebusTcp通讯
  • 给你一个电商网站,你如何测试?功能测试及接口测试思路是什么?
  • Spring Boot 3.0系列【5】基础篇之应用配置文件
  • SQLyog图形化界面工具【超详细讲解】
  • Linux: 中断只被GIC转发到CPU0问题分析
  • 模电学习10. MOS管简单应用电路
  • 轻松搞懂Linux中的用户管理
  • 力扣-丢失信息的雇员
  • FPGA采集AD7606全网最细讲解 提供串行和并行2套工程源码和技术支持
  • CSS介绍
  • Auto-encoder 系列
  • 【蓝桥杯入门不入土】变幻莫测的链表
  • axios的二次封装
  • GET与POST区别(最详细)
  • 精选博客系列|将基于决策树的Ensemble方法用于边缘计算
  • JS混淆加密:Eval的未公开用法
  • π型滤波器 计算_π型滤波电路
  • 大数据常见术语
  • 带你了解“函数递归”
  • 网络资源面经2
  • 4年经验来面试20K的测试岗,一问三不知,我还真不如去招应届生。
  • K8S搭建NACOS集群踩坑问题