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

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

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

本文大部分内容参考:

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

二、LUKS磁盘加密实例

4. 将密码存储于TPM的PCR

现在将TPM非易失性存储器中保护磁盘加密的密封对象替换为一个新的(对象),其添加了我们刚刚创建的作为用以访问密封秘密的身份验证的pcr策略:

注:

此步骤需要承接前(几)篇文章中的基础步骤,可以参加本系列前几篇文章。重点参考:

物理真机上LUKS结合TPM的各个测试脚本

以下步骤需要在执行“第一阶段建立脚本”create_1.sh的基础上进行。

(4)创建主对象

命令如下:

tpm2_createprimary -Q --hierarchy=o --key-context=prim.ctx

命令及实际结果如下:

$ sudo /usr/local/bin/tpm2_createprimary --hierarchy=o --key-context=prim.ctx
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|restricted|decryptraw: 0x30072
type:value: rsaraw: 0x1
exponent: 65537
bits: 2048
scheme:value: nullraw: 0x10
scheme-halg:value: (null)raw: 0x0
sym-alg:value: aesraw: 0x6
sym-mode:value: cfbraw: 0x43
sym-keybits: 128
rsa: b45cd070a8b71ba21a5dce69f93035671e4a32bc3758490629f21458171884171a94d1d6446aceb61b6a1d0df65a7f0c0a1cfa4fdbd221c12c69204b0cb8ab146014b9dc439c90b0ed7f538c2a9e0b8f1d16598d572f26f7ca1bcd76d2b1a4a56ee492f1bee45fc255096fb3972c3844a1191245bc2d3e8adcf694223f976a2af739ef6d6223eab4f71593b10233ead81d0d861912c600dfe97f37108fa53ec32f8307f1061689da224af65feccf510758aa8331402e341bfaea38f9203d74c21b54d9aa388351a13852613be8453f47caf6dae5c4a0af73175c40acb6df4e6e2b71b622eb6df4d084b411f4be8ba9c0240f614816e191ff4412839917d8afbb$ ls
disk.key  enc.disk  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  session.ctx

(5)生成哈希值并保存到文件

命令如下:

sudo tpm2_hash -C o -g sha256 -o hash.key -t ticket.bin key_info.dat

实际命令及脚本如下:

$ sudo /usr/local/bin/tpm2_hash -C o -g sha256 -o hash.key -t ticket.bin key_info.dat
$ 
$ ls
disk.key  enc.disk  hash.key  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  session.ctx  ticket.bin

(6)创建对象

命令如下:

sudo tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=hash.key --parent-context=prim.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=hash.key --parent-context=prim.ctx
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparent|userwithauthraw: 0x52
type:value: keyedhashraw: 0x8
algorithm: value: nullraw: 0x10
keyedhash: 19df99d34d219b51f4a9c2e7c903d840b34660116920cce4ff5ca05c9ca75e04$ ls
disk.key  enc.disk  hash.key  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  seal.priv  seal.pub  session.ctx  ticket.bin

(7)加载对象到TPM

命令如下:

tpm2_load  -Q --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_load --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx
$ 
$ ls
disk.key  enc.disk  hash.key  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  seal.ctx  seal.name  seal.priv  seal.pub  session.ctx  ticket.bin

(8)将对象从易失性空间移存到非易失性空间中

命令如下:

tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002
persistent-handle: 0x81010002
action: persisted

(9)建立另一个新对象

命令如下:

tpm2_unseal --object-context=0x81010002 | tpm2_create -Q --hash-algorithm=sha256 --public=pcr_seal_key.pub --private=pcr_seal_key.priv --sealing-input=- --parent-context=prim.ctx --policy=pcr0.sha256.policy

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=pcr_seal_key.pub --private=pcr_seal_key.priv --sealing-input=- --parent-context=prim.ctx --policy=pcr0.sha256.policy
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparentraw: 0x12
type:value: keyedhashraw: 0x8
algorithm: value: nullraw: 0x10
keyedhash: e7d80b687f769a271f706cddade60a9f98c54b87234f32fa0a7f23fcb263bc6f
authorization policy: 4bc350fced1d9ec748eb9fac5576eed06178b715969525d1f967451ff89395bf$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

(10)将永久性对象从非易失性空间中移除

命令如下:

tpm2_evictcontrol --hierarchy=o --object-context=0x81010002

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=0x81010002
persistent-handle: 0x81010002
action: evicted

(11)加载新对象到TPM

命令如下:

tpm2_load -Q --parent-context=prim.ctx --public=pcr_seal_key.pub --private=pcr_seal_key.priv --name=pcr_seal_key.name --key-context=pcr_seal_key.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_load --parent-context=prim.ctx --public=pcr_seal_key.pub --private=pcr_seal_key.priv --name=pcr_seal_key.name --key-context=pcr_seal_key.ctx
$
$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.ctx   pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

(12)将新对象从易失性空间移存到非易失性空间中

命令如下:

tpm2_evictcontrol --hierarchy=o --object-context=pcr_seal_key.ctx 0x81010002 

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=pcr_seal_key.ctx 0x81010002 
persistent-handle: 0x81010002
action: persisted

现在再次尝试挂载加密的磁盘,只是这一次秘密被密封在了一个TPM对象中,其解密操作只能在满足了PCR策略才能进行。换句话说,依靠预期的系统软件状态进行身份验证,此系统软件状态如PCR值所反映的那样保持不变

(13)再次将enc.disk虚拟成块设备

命令如下:

sudo losetup /dev/loop0 enc.disk

实际命令及结果如下:

$ sudo losetup /dev/loop0 enc.disk
$ 
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0    50M  0 loop 
nvme0n1     259:0    0 476.9G  0 disk 
……/usr/local/opt/home/data

(14)启动一个策略会话并保存会话数据到一个文件中

命令如下:

tpm2_startauthsession --policy-session --session=session.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_startauthsession --policy-session --session=session.ctx
$ 
$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.ctx   pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

(15)创建一个包含指定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
disk.key  hash.key      mountpoint          pcr_seal_key.ctx   pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

此时此刻,合乎理想地,你想要解封保存在内存中的秘密并且直接将它放入(另一端)到cryptsetup的管道中,像这样:“tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 | sudo cryptsetup luksOpen --key-file=- /dev/loop0 encvolume”。但是,出于在之后的一个小节中证明PCR灵活性的目的,我们将做一个解封秘密的拷贝。

(16)解封秘密到文件

命令如下:

tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 > disk_secret.bkup

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 > disk_secret.bkup
$ 
$ ls
disk.key          enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub  seal.ctx   seal.priv  session.ctx
disk_secret.bkup  hash.key  mountpoint    pcr_seal_key.ctx    pcr_seal_key.priv  prim.ctx          seal.name  seal.pub   ticket.bin

(17)

相关文章:

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

接前文:TPM 2.0实例探索3 —— LUKS磁盘加密(4) 本文大部分内容参考: Code Sample: Protecting secret data and keys using Intel Platform... 二、LUKS磁盘加密实例 4. 将密码存储于TPM的PCR 现在将TPM非易失性存储器中保护…...

mybatisplus复习(黑马)

学习目标能够基于MyBatisPlus完成标准Dao开发能够掌握MyBatisPlus的条件查询能够掌握MyBatisPlus的字段映射与表名映射能够掌握id生成策略控制能够理解代码生成器的相关配置一、MyBatisPlus简介MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工…...

【数据聚类|深度聚类】Deep Comprehensive Correlation Mining for Image Clustering(DCCM)论文研读

Abstract 翻译 最近出现的深度无监督方法使我们能够联合学习表示和对未标记数据进行聚类。这些深度聚类方法主要关注样本之间的相关性,例如选择高精度对来逐步调整特征表示,而忽略了其他有用的相关性。本文提出了一种新的聚类框架,称为深度全面相关挖掘(DCCM),从三个方面…...

CE认证机构有哪些机构?

CE认证机构有哪些机构? 所有出口欧盟的产品都需要办理CE证明,而电子电器以及玩具是强制性要做CE认证。很多人以为只有办理欧盟NB公告机构的CE认证才可以被承认,实际上并不是。那么,除了NB公告上的机构,还有哪些认证机…...

MYSQL5.7:Access denied for user ‘root‘@‘localhost‘ (using password:YES)解决方法

一、打开MySQL目录下的my.ini文件,在文件的[mysqld]下面添加一行 skip-grant-tables,保存并关闭文件;skip-grant-tables :跳过密码登录,登录时无需密码。my.ini :一般在和bin同目录下,如果没有的话可自己创…...

单目运算符、双目运算符、三目运算符

单目运算符是什么 单目运算符是指运算所需变量为一个的运算符 又叫一元运算符,其中有逻辑非运算符:!、按位取 反运算符:~、自增自减运算符:,-等。 逻辑非运算符【!】、按位取反运算符【~】、 自…...

离线数据仓库项目搭建——准备篇

文章目录(一)什么是数据仓库(二)数据仓库基础知识(三)数据仓库建模方式(1)星行模型(2)雪花模型(3)星型模型 VS 雪花模型(四…...

十七、本地方法接口的理解

什么是本地方法? 1.简单来讲,一个Ntive method 就是一个Java调用非Java代码的接口.一个Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如C,这个特征并非Java所特有,很多其他的编程语言都由这一机制,比如在C中…...

【halcon】模板匹配参数之金字塔级数

背景 今天,在使用模板匹配的时候,突然程序卡死,CPU直接飙到100%。最后排查发现是模板匹配其中一个参数 NumLevels 导致的: NumLevels: The number of pyramid levels used during the search is determined with numLevels. If n…...

jupyter lab安装和配置

jupyter lab 安装和配置 一、jupyter lab安装并配置 安装jupyterlab pip install jupyterlab启动 Jupyter lab默认会打开实验环境的,也可以自己在浏览器地址栏输入127.0.0.1:8888/lab 汉化 pip install jupyterlab-language-pack-zh-CN刷新一下网页&#xff0…...

用Docker搭建yolov5开发环境

拉取镜像 sudo docker pull pytorch/pytorch:latest 创建容器 sudo docker run -it -d --gpus "device0" pytorch/pytorch bash 查看所有容器 sudo docker ps -a 查看运行中的容器 sudo docker ps 进入容器 docker start -i 容器ID 将依赖包全都导入到requiremen…...

Apache Pulsar 云原生消息中间件之王

一、简介 pulsar,消息中间件,是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。 pulsar采用发布-订阅的设计模式,producer发布消息到topic,consumer订阅这些topic处理流入的消息,并当处理完…...

精选博客系列|公用事业中的VMware:在边缘重新定义价值

VMware 已经成为公用事业行业的核心。您可以在那里找到例如 VMware vSphere(包括基础 Hypervisor ESXi 和 VMware vCenter 建立的整体控制平面)的核心产品。来自软件定义的基础架构带来的诸多好处使 IT 团队将其先前基于硬件的系统转变为 VMware Cloud F…...

数字档案室测评的些许感悟

我是甲方,明明我家是档案“室”,为什么申请的是数字档案“馆”? 笔者正对着手里的一份方案苦笑,甲方爸爸是某机关单位档案室,方案最后的附件赫然写着几个大字:“申请国家级数字档案馆……“。这样的事屡见…...

Java 函数式编程实例

一、函数式编程概念 函数式编程是一种编程的范式和编程的方法论(programming paradigm),它属于结构化编程的一种,主要的思想是把运算的过程尽量通过一组嵌套的函数来实现。 函数式编程的几个特点: 函数可以作为变量、参数、返回值和数据类…...

Ant design Chart onReady函数使用外部变量问题

一、问题描述封装了一个Chart组件,它接收一个boolean类型的props,根据这个boolean的true或false执行不同的操作。经过console.log验证,onReady函数只会在组件初次渲染时取到props值,不管后面的props变化成什么都无法重新取值。二、…...

Unity使用webSocket与服务器通信(一)搭建一个简单地服务器和客户端

你想在unity WebGL里面使用TCP通信吗,那么你可以用一用webSocket。当然,桌面端也可以使用webSocket,这样Unity多平台发布的时候,业务层的通信代码可以使用一套,而不是桌面用socket,网页用http… 一、什么是…...

SpringCloud微服务实战——搭建企业级开发框架(四十九):数据字典注解的设计与实现

数据字典是系统中基本的必不可少的功能,在多种多样的系统中,数据字典表的设计都大同小异。但是使用方式确是多种多样,设计好一套易用的数据字典功能模块,可以使开发事半功倍。 常用的数据字典使用方式: 直接在SQL语句…...

mysql下,实现保存指定用户、ip、命令的查询日志

环境:mysql 8.0.14 社区版 阅读文本需要的背景知识:对数据库的基本概念(触发器、存储过程、事件),mysql下general log的配置指令 背景:因审计需要,对于数据库操作需要留痕。实际访问数据库的有…...

Vue 3.0 学习笔记之基础知识

系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录系列文章目录前言Vue 3.0 创建与Vue2.0对比的变化关闭语法检查setup 组合式函数compositions响应式数据 refreactive 函数Vue3.0 响应原理ref 和 reactive 区别setup 注意点computed 计算函数watch…...

WebGIS行政区炫酷特效——流光特效教程

先来看下效果: 图片截图: 流光特效的思路是从行政区的边界中随着时间不断的取若干段线条换成另一种高亮颜色。 流光的第一步首先是发光,发光的教程在这里: GIS矢量图形多边形地块行政区发光,阴影发光特效实现_疯狂的GISer的博客-CSDN博客 学会发光以后,接下来需要做的…...

2023-3-3 刷题情况

保证文件名唯一 题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用&#xf…...

《青浦区加快发展跨境电子商务实施细则(审议稿)》

为进一步贯彻落实《中华人民共和国电子商务法》,上海市《关于促进本市跨境电子商务发展的若干意见》,切实做好青浦区跨境电子商务试点工作,探索和规范跨境电子商务管理,促进跨境电子商务健康快速发展,青浦商务委根据多…...

【React全家桶】React生命周期

React生命周期 1、初始化阶段 componentDidMount:render之前最后一次修改状态的机会 render:只能访问this.props和this.state,不允许修改状态和DOM输出 componentDidMount:成功render并渲染完成真实DOM之后触发 2、旧生命周期 👉👉👉加…...

B. Count the Number of Pairs

原题链接 纯纯水一下; 昨天晚上的比赛,由于半夜打的,精神状态不好,wa了俩发直接睡觉去了,现在白天写写发现,不难,水中水 模拟题吧,题目怎么说就这么作 Kristina has a string ss…...

离线数据仓库项目--技术选择

文章目录(一)技术选型1)数据采集工具2)数据存储3)数据计算4)数据可视化(二)整体架构设计(三)服务器资源规划(一)技术选型 1&#xff…...

GC Garbage Collectors

本质一、算法1、哪些是垃圾?引用计数法:reference countPython中使用了。个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。漏洞:循环…...

【网络】-- 网络基础

(本文是网络的宏观的概念铺垫) 目录 计算机网络背景 网络发展 认识 "协议" 网络协议初识 协议分层 OSI七层模型 TCP/IP 五层(或四层)模型 报头 以太网 碰撞 路由器 IP地址和MAC地址 IP地址与MAC地址总结 IP地址 MAC地址 计算机…...

二、Redis安装配置(云服务器、vmware本地虚拟机)

一、自己购买服务器 自己购买阿里云、青牛云、腾讯云或华为云服务器, 自带CentoOS或者Ubuntu环境,直接开干 二、Vmware本地虚拟机安装 1、VMWare虚拟机的安装,不讲解,默认懂 2、如何查看自己的linux是32位还是64位 getconf L…...

【学习Docker(七)】详细讲解Jenkins部署SpringCloud微服务项目,Docker-compose启动

Jenkins部署SpringCloud微服务项目,Docker-compose启动 座右铭:《坚持有效输出,创造价值无限》 本文介绍使用Jenkins部署SpringCloud微服务项目,Docker-compose启动。 之前写过安装Jenkins的过程,这里就不写安装细节了…...

北京做网站那家好/新闻最近的新闻

作者:Jamie Hannaford翻译:bbbmj(才云)校对:bot(才云)源代码解释版(强烈建议阅读):https://github.com/bbbmj/what-happens-when-k8s想象一下,当你…...

网站底备案号链接代码/西安网站建设方案优化

操作系统原理作为计算机专业必学的一门基础专业课程,想必每个程序员都应该了解一下,今天我们就来说说几个基础的和操作系统相关的词汇。 内核 在学习操作系统原理的时候,很多书籍都会分处理器管理、存储器管理、文件管理及设备管理等等&#…...

b2c购物商城网站建设/360推广登录入口

这些什么绑定都是从Borland中学来的,MVVM只是冠上新名称而于,不是什么新技术。依稀记得是微软挖了Delphi一位重量级的人员后,这些东西加进了IDE。如果从数据流来讲,绑定只是减轻了前台显示的编写工作而于。等到你想写更自定式的东…...

网站开发怎么谈/seo超级外链工具免费

爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法。python提供了强大的url库,想做到这个并不难。这里以登录学校教务系统为例,做一个简单的例子。 首先得明白cookie的作用,cookie是某些网站为了辨别用户身份…...

聊城做网站建设的公司/软文例文 经典软文范例

1. 点击密码右边的刷新图片,然后点设置个人密码 2. 设置密码...

万网建网站流程/东莞seo广告宣传

此环境搭建是OpenCV的python(一下简称py)开发环境搭建,建立在py3的环境和语法上实现的。 windows系统搭建 系统环境:windows 10 python 3.6 OpenCV 3.4.1 一、安装python python的安装之前在python自学笔记的项目中描述了&…...