diff --git a/src/anolisos.md b/src/anolisos.md index b32882201b77c01c0143634520ce75db6930d063..a6c2467979f21f670618f3ec2c064c80709602ea 100644 --- a/src/anolisos.md +++ b/src/anolisos.md @@ -5,4 +5,3 @@ ## 2.3 [可信根服务引擎](anolisos-tpm2-tss-engine.md) ## 2.4 [模拟可信根](anolisos-swtpm.md) ## 2.5 [远程认证](anolisos-attenstation.md) -## 2.6 [基于可信根的全盘加密](anolis-luks-with-tpm2.md) diff --git a/src/contributers.md b/src/contributers.md index 98bae1ca0b374f15acc64cff7e9d8856c7cebd1f..89957cd8f4b70c9a16240a5fb6d34b11767d6738 100644 --- a/src/contributers.md +++ b/src/contributers.md @@ -2,9 +2,13 @@ (排名不分先后) -* xxx -* xxx -* xxx -* xxx -* xxx -* xxx \ No newline at end of file +* 伯纪 +* 陈洪博 +* 陈善 +* 韩春超 +* 龙勤 +* 乾越 +* 吴保锡 +* 许鑫 +* 张艺 +* 张天佳 diff --git a/src/images/standard-china-1.png b/src/images/standard-china-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8655ccde8c6141e74a53489ededa232cf9ba4043 Binary files /dev/null and b/src/images/standard-china-1.png differ diff --git a/src/introduction.md b/src/introduction.md index 1a7bd2f69d0b320dd7b1c8596b7248f7acd97f07..c4408f978ec3fbb533b0fc228fec274764632af2 100644 --- a/src/introduction.md +++ b/src/introduction.md @@ -1,7 +1,18 @@ -# 可信计算简介与现状 -可信平台模块始于2000年可信计算平台联盟(Trusted Computing Platform Alliance)制定的TPM1.0规范. 2003年, TCG(trusted computing group)成立, 修改完成了TPM1.1规范, 2004年发布了TPM1.2, 2014年发布了TPM2.0规范. -鉴于可信计算技术对国家信息安全体系的重要性, 经国家密码管理局批准, 中国于2006年成立了可信计算密码专项组, 并于2008年12月更名为中国可信计算工作组(China TCM Union), 简称TCMU.2007年12月, 国家密码管理局颁布了《可信计算密码支撑平台功能与接口规范》, 将国内使用的可信基础模块定义为TCM(trust cryptography module).相较于TPM, TCM采用了我国《商用密码管理条例》中规定的SM2、SM3等国密算法, 同时引入了对称密钥算法, 简化了TPM中复杂的密钥管理.TCM的证书认证机制采用签名密钥以及加密密钥的双证书机制, 将对称密钥与非对称密钥结合保护系统安全, 在密钥管理体系和基础密码服务体系等方面进行了改进, 提升了系统的安全性. -TPM和TCM的构成和功能类似, 提供可信计算平台的信任根(RTS, RTR), 是由CPU、存储器、I/O、密码协处理器、随机数产生器和嵌入式操作系统等部件组成的独立SoC芯片, 具备可信度量的存储、可信度量的报告、密钥产生、加密和签名、数据安全存储等功能. -2015年TPM 2.0 library specification(Trusted Platform Module)正式成为国际标准ISO/IEC 11889,吸纳了TCM中相关的安全改进,并首次成体系支持中国密码算法体系,包括SM2/SM3/SM4密码算法。这是中国密码算法技术和标准的又一次重要突破,也是中国信息安全标准在国际标准化工作中的重要进展。ISO/IEC 11889 支持中国商用密码算法体系(SM2/SM3/SM4),使得在数据安全保护上更加牢不可破。 +# 可信计算简介 +##(一) 可计算的概念 +  可信计算是通过检测和强化实体行为的预期性来保障实体信任的技术,是一种从体系结构入手解决信息系统安全问题的技术理念;其基本思想是先在计算机系统中建立一个信任根(基),信任根的可信性由物理安全、技术安全与管理安全共同确保;再建立一条信任链,从信任根开始,到硬件平台,到操作系统,再到应用,一级度量认证一级,一级信任一级,把这种信任扩展到整个计算机系统。 +  可信并不等同于安全,但可信是安全的基础,因为安全组件、策略只有运行在可信的环境下才能进一步达到安全目的。通过系统和安全组件的完整性保障,可以确保业务应用使用正确的软件栈,并在软件栈受到攻击发生改变后能及时发现。总之,在系统和应用中引入可信计算能够极大地降低由于使用未知或遭到篡改的系统/软件遭到攻击的可能性。 +##(二)可信计算应用发展现状 +  可信计算概念最早可以追溯到 1983 美国国防部的 TCSEC 准则及之后出现的彩虹系列信息系统安全文件。1999 年,IBM、微软、Intel 等企业成了 TCPA(2003年改名为 TCG),主要致力于形成可信计算的工业标准。目前 TCG 已经制定了包括 TPM、TSS、TNC 等一系列技术规范,并形成了针对IoT、云计算、个人终端、移动终端、存储等不同场景的工作组、致力于可信计算在相关场景的应用标准编制与解决方案推动。 +  国际上已经形成以 Trusted Computing Group(TCG)为代表的可信计算组,并推动 TPM 规范在 PC、服务器、移动终端、网络、云计算、物联网等领域的应用。在服务器及云计算领域,国际 IT 巨头已将可信计算技术作为其产品的重要支撑。Intel服务器 CPU 已经全面支持 TPM2.0;微软 Windows Server 2012 已支持 TPM2.0,并计划发布 Server2016 将支持 vTPM2.0,支持可信云计算环境的构建;Linux Kernel4.0已经集成 TPM2.0,以及主流虚拟化软件 Xen、KVM、Openstack、VMware 等都提供了对 TPM 和 vTPM 的支持;IBM 收购的 Softlayer 公司为全球 60 多个重要客户提供可信云主机服务;同时, 许多芯片公司都将部分可信计算功能集成到商用的处理器中, 如 ARM 公司的 TrustZone 技术、 Intel 公司的 SGX 技术和 AMD 公司的SEV(secure encrypted virtualization)技术等, 都在处理器中实现了内存隔离, 可以为上层应用提供安全的执行环境, 保障敏感程序的安全性, 并被广泛应用在移动手机和云平台中. +  鉴于可信计算技术对国家信息安全体系的重要性, 经国家密码管理局批准, 中国于2006年成立了可信计算密码专项组, 并于2008年12月更名为中国可信计算工作组(China TCM Union), 简称TCMU.2007年12月, 国家密码管理局颁布了《可信计算密码支撑平台功能与接口规范》, 将国内使用的可信基础模块定义为TCM(trust cryptography module).相较于TPM, TCM采用了我国《商用密码管理条例》中规定的SM2、SM3等国密算法, 同时引入了对称密钥算法, 简化了TPM中复杂的密钥管理.TCM的证书认证机制采用签名密钥以及加密密钥的双证书机制, 将对称密钥与非对称密钥结合保护系统安全, 在密钥管理体系和基础密码服务体系等方面进行了改进, 提升了系统的安全性. TPM和TCM的构成和功能类似, 提供可信计算平台的信任根(RTS, RTR), 是由CPU、存储器、I/O、密码协处理器、随机数产生器和嵌入式操作系统等部件组成的独立SoC芯片, 具备可信度量的存储、可信度量的报告、密钥产生、加密和签名、数据安全存储等功能.2015年TPM 2.0 library specification(Trusted Platform Module)正式成为国际标准ISO/IEC 11889,吸纳了TCM中相关的安全改进,并首次成体系支持中国密码算法体系,包括SM2/SM3/SM4密码算法。这是中国密码算法技术和标准的又一次重要突破,也是中国信息安全标准在国际标准化工作中的重要进展。ISO/IEC 11889 支持中国商用密码算法体系(SM2/SM3/SM4),使得在数据安全保护上更加牢不可破。 +  我国学者则从传统计算机体系结构着手,考虑到传统冯诺伊曼架构存在的安全设计缺陷,提出了“在计算运行的同时进行安全防护的信计算模模式,即以密码为基因产生抗体,实施身份识别、状态度量、保密存储等功能,及时识别自己和非自己成份,从而破坏和排斥进入机体的有害物质”即“主动免疫安全可信计算”技术体系(这一体系被学界称为“可信计算3.0”)。主动免疫安全可信计算通过构建“计算+防护”并行双体系结构,实现防护部件并行动态的方式对计算部件运算过错进行可信验证,达到主动免疫防护效果。在并行的双体系结构中,采用了一种安全可信策略管控下的运算和防护并列的主动免疫的新计算体系结构,以可信密码模块(TCM)连接可信平台控制模块(TPCM),组成可信根,由策略产生可信验证规则,由可信软件基根据安全可信策略规则实施身份识别、状态度量、保密存储等功能,及时发现异常并加以处置,从根本上防止(恶意代码)对计算部件(主机)的攻击.该体系的可信验证通过对人的操作访问策略4要素(主体、客体、操作、环境)进行动态可信度量、识别和控制,以达到纠正传统访问控制策略模型局限于授权标识属性进行操作,而不作可信验证、难防篡改的安全缺陷.另外,传统访问控制不考虑环境要素(代码及参数)是否被破坏,难以防止恶意代码攻击,为此必须对环境要素进行可信验证的基础上依据策略规则进行动态访问控制。当前,国内主要以中关村可信计算产业联盟代表推动可信计算3.0技术体系及其生态的繁荣发展,在开源开方方面,北京工业大学推出了一系列的可信计算3.0开源教学实践探索、可信计算产业联盟推出了一系列团体标准,并通过“等级保护2.0与可信计算3.0联合攻关基地”推动相关团体标准的落地实施。 +#(三) 可信计算技术面临的挑战 + 随着移动互联网、量子计算、物联网、云计算、区块链等技术的发展和应用, 可信计算技术也开辟了新的应用场景. + (1) 在移动可信计算方面, 设计具有更小可信计算基 (trusted computing base, TCB) 的移动可信体系架构, 以及实现内核运行时和移动应用的安全防护是重要的研究问题. + (2) 随着量子计算的发展, 设计高效的抗量子密码算法和协议是一个亟需解决的科学问题; 更进一步, 需要设计具有抗量子能力的 TPM/TCM, 并且构建抗量子可信计算技术体系. + (3) 在可信物联网方面, 轻量级的信任根、高效安全的软件证明、安全代码更新机制是该领域的重要研究问题. + (4) 在可信云中, 如何利用虚拟可信平台模块、虚拟机监控技术、新型的硬件安全技术实现云平台安全防护是该领域需要解决的重要安全问题. + (5) 在可信区块链方面, 新型的可信执行环境技术可以为区块链提供新的思路, 例如, 利用硬件安全机制改进共识协议, 使用可信执行环境 (trusted execution environment,TEE) 保障区块链的计算环境等 -{{#template template/footer.md}} \ No newline at end of file +{{#template template/footer.md}} diff --git a/src/practices-luks-with-tpm2.md b/src/practices-luks-with-tpm2.md index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b762396b75cf9874a4ae920ac2918da05f4d631d 100644 --- a/src/practices-luks-with-tpm2.md +++ b/src/practices-luks-with-tpm2.md @@ -0,0 +1,192 @@ + +# 基于可信根的luks磁盘加密安全增强解决方案 +LUKS(Linux Unified Key Setup)是Linux硬盘加密的标准。LUKS是由Clemens Fruhwirth在2004年创建的磁盘加密规范,最初用于Linux,它是一种知名的、安全的、高性能的磁盘加密方法,基于改进版本的cryptsetup,使用dm-crypt作为磁盘加密后端。LUKS提供多种加密算法、多种加密模式和多种哈希函数可供选择,有40多种可能的组合。 +磁盘加密可以防止存储设备安装在由攻击者控制的备用操作环境中,攻击者可以观察或篡改敏感信息。 + +本节以一个未受保护的loopback-mounted文件系统为例,介绍如何通过TPM增强基于luks磁盘加密的安全防护能力。[1] +## 未受保护的文件系统 +为了便于理解、本文假设该loopback-mounted文件系统是操作系统在引导时自动挂载的逻辑磁盘分区。 +```shell +# 创建磁盘镜像,写入内容 +# 如下命令,我们在磁盘中添加了名为plain.txt的文件,该文件包含的内容为“this is my plain text” +dd if=/dev/zero of=plain.disk bs=1M count=10 +mkfs.ext4 plain.disk +mkdir mountpoint +sudo mount plain.disk mountpoint +sudo sh -c 'echo "This is my plain text" > mountpoint/plain.txt' +sudo umount mountpoint + +# 可以通过简单的linux命令(如下所示)即可查看文件内容 +strings plain.disk +``` +上述命令会泄露文件名和敏感文件内容。后面的小节将添加保护,以防止攻击者执行上面的简单攻击。 +## 基于luks的磁盘数据加密 +龙蜥操作系统支持基于luks加密的磁盘卷。LUKS可以保护静态数据的机密性。LUKS中配置信息一般存储在分区表头中,以方便迁移。LUKS卷可以自动挂载,默认的情况下加密密码口令可以通过人机交互的方式提供,或者通过指定为密钥文件(命令行参数)提供。cryptsetup用户态程序可用于创建和管理LUKS卷。 +```shell +# 创建一个新的luks卷,使用简单的密码口令作为该卷的保护密钥 +dd if=/dev/zero of=enc.disk bs=1M count=50 +dd if=/dev/urandom of=disk.key bs=1 count=32 +sudo losetup /dev/loop0 enc.disk +sudo cryptsetup --key-file=disk.key luksFormat /dev/loop0 + +# 基于上述方案加密后,磁盘中的文件不再可见、起到了一定的保护作用,采用如下命令无法查看明文信息 +strings enc.disk | grep -i plain +``` +基于luks加密磁盘卷的方法的最大问题是,如果密码口令或密钥文件以纯文本形式存储在磁盘上,则LUKS保护很容易被破坏。因此,许多LUKS实现以交互方式提示输入密码口令。但是在许多物联网(IoT)和嵌入式等场景中输入口令的方式不可行。人工输入的一种有效替代方法是将密码口令密封在锚定平台状态的安全令牌上,如TPM。 +## 基于TPM安全存储空间保护LUKS的密码口令 +由于自动挂载需要在运行时在没有用户干预的情况下向cryptsetup提供密码口令或密钥,因此它必须在某种程度上清晰可用。需要一个方法来加密密码口令或密钥,以便在需要它时来解密卷。这种方法还必须防止磁盘与安装它的系统分离的情况。这种机制就是TPM。 +该方案分为两个步骤: +- 将密码口令或密钥文件密封到TPM中。 +- 在内存中解密秘密并将其传递给cryptsetup。 + +**基于TPM保护luks口令安全**
+```shell +# 创建并保存一个密封对象,并使用它来密封一个随机字节序列作为磁盘密钥: +tpm2_createprimary -Q --hierarchy=o --key-context=prim.ctx +dd if=/dev/urandom bs=1 count=32 status=none | tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=- --parent-context=prim.ctx +tpm2_load -Q --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx +tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002 + +# 安装新密钥以取代旧密钥,并删除之前创建的旧密钥: +tpm2_unseal -Q --object-context=0x81010002 | sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk +shred disk.key +rm -f disk.key + +# 用TPM中密封的新身份验证挂载卷: +sudo losetup /dev/loop0 enc.disk +tpm2_unseal -Q --object-context=0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume +sudo mount /dev/mapper/enc_volume mountpoint + +# 磁盘访问被授予新的秘密: +ls mountpoint + +# 卸载磁盘: + +sudo umount mountpoint +sudo cryptsetup remove enc_volume +sudo losetup -d /dev/loop0 +``` + +该方案将防止通过克隆或物理窃取加密磁盘进行的离线攻击。攻击者现在还需要平台上的TPM和磁盘来访问数据,因为解密密钥不在磁盘上——它安全地存储在特定平台上的TPM上。 +但是,攻击者仍然有可能从其他引导介质引导系统,执行上述命令,并检索解密LUKS卷所需的秘密。所需要的是一种可以锚定到受信任系统状态的身份验证机制。这可以通过TPM及其平台配置寄存器(PCR)密封提供来实现。 + +## 基于PCR增强授权保护带有密码口令的LUKS +TPM平台配置寄存器(PCR)用于防止攻击者更改系统引导参数或引导到其选择的操作系统以访问敏感数据。有效地使用TPM PCR需要系统固件、引导加载程序、操作系统内核和应用程序的配合。如果没有固件、驱动程序和软件来配置TPM, TPM将只是在I/O总线上处于非活动状态,什么也不做。 +TPM PCR用于使用安全散列算法(如SHA-256)度量启动组件。当系统重置时,TPM PCR默认为零值。当系统启动时,关键系统组件(如固件、BIOS、OS加载程序等)的度量在启动过程中扩展到PCR中。扩展PCR是一个仅追加操作,并且需要对TPM进行I/O操作。因为不可能将PCR设置为用户指定的值,也不可能“收回”I/O,所以TPM PCR可以验证系统启动顺序,从而验证平台的状态,直到PCR度量停止为止。例如,PCR0包含系统固件和BIOS的度量,但不包含操作系统引导加载程序或内核。使用PCR0且仅使用PCR0的后果是,本示例只能防止固件替换攻击,前提是原始固件正确地进行了度量,并且替换固件不会将度量结果伪造给tpm(需要单独缓解的攻击)。 + +``` +在实践中,有效的PCR集必须足够完整,以验证当前运行的代码和设计人员认为安全关键的预先运行的任何代码。《TCG PC Client Specific Implementation Specification for Conventional BIOS》仅指定了PCR 0-7、16和23的用法。操作系统引导期间和之后的PCR使用是特定于操作系统自定义的。 +``` +该方案有在上一方案的基础上增加了两个额外的步骤: +- 使用PCR作为TPM密封对象的身份验证授权代理(proxy authentication)。 +- 在解密密钥文件后扩展密封PCR,使其不能在当前引导中再次解密。 + +```shell +# 在sha256 bank中创建一个当前值为PCR0的PCR策略: +tpm2_startauthsession --session=session.ctx +tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy +tpm2_flushcontext session.ctx + +# 现在将TPM非易失性内存中保护磁盘加密密钥的密封对象替换为一个新对象,该对象添加了我们刚刚创建的pcr策略,作为访问密封密钥的身份验证机制: +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 +tpm2_evictcontrol --hierarchy=o --object-context=0x81010002 +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 +tpm2_evictcontrol --hierarchy=o --object-context=pcr_seal_key.ctx 0x81010002 + +# 现在尝试再次挂载加密磁盘,只不过这次密钥被密封在TPM对象中,其解密封操作只能通过满足PCR策略来访问。换句话说,通过PCR值所反映的预期系统软件状态不变来进行身份验证。 +sudo losetup /dev/loop0 enc.disk +tpm2_startauthsession --policy-session --session=session.ctx +tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy + +# 此时,理想情况下,您希望在内存中解开秘密,并将其直接管道到cryptsetup,如下所示:“tpm2_unseal——auth=session:session。——object-context=0x81010002 | sudo cryptsetup luksOpen——key-file=- /dev/loop0 encvolume”。 +# 但是,为了在下一节演示灵活PCR,我们将复制未密封的秘密: +tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 > disk_secret.bkup +cat disk_secret.bkup | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume +tpm2_flushcontext session.ctx +sudo mount /dev/mapper/enc_volume mountpoint/ +ls mountpoint/ + +# 为了防止进一步开封,PCR0将被延长。这将导致PCR0保持不同的值,就像在固件替换攻击期间一样。这将导致策略检查失败,从而导致打开尝试失败。 +# 延长前观察PCR状态,延长后再次观察: +tpm2_pcrread --sel-list=sha256:0 +tpm2_pcrextend 0:sha256=0000000000000000000000000000000000000000000000000000000000000000 +tpm2_pcrread --sel-list=sha256:0 + +# 尝试用脏PCR打开密封的磁盘加密密匙: +tpm2_startauthsession --policy-session --session=session.ctx +tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy + +# 以下操作将导致策略检查失败,从而阻止开封操作: +tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 +tpm2_flushcontext session.ctx + +# 卸载磁盘: +sudo umount mountpoint +sudo cryptsetup remove enc_volume +sudo losetup -d /dev/loop0 +``` +该方案检索LUKS加密密码口令之前通过使用TPM PCR验证系统状态。 +但是现在有一个新问题:更新。在本例中,对系统应用固件更新可能导致加密数据无法访问,因为PCR0表示固件的特定版本。为了成功地更新系统,有必要根据一组预测的PCR值重新密封秘密。但是,如果回滚更新,旧的值将不再工作。此外,在实际执行更新之前预测更新后的PCR值可能是不切实际的——最好的方法可能是在相同的系统上应用更新,看看会产生什么PCR值,并预先授权两组PCR值。对于TPM,有一种方法可以做到这一点,称为“被授权的PCR策略”(authorized PCR policy)。 + +# 基于被授权的PCR策略保护带有密码口令的LUKS + +被授权的PCR策略作为TPM密封对象的身份验证机制。不再使用严格的PCR策略绑定到原始PCR值,我们现在密封它的PCR签名。PCR集由系统设计人员签名,并由TPM进行验证。 +这一方案可以通过以下步骤实现: + +**引入一个RSA公私钥对**
+使用OpenSSL命令行工具生成RSA对。私钥将离线存储。公钥将与授权的PCR策略一起分发,并用作LUKS加密密码口令的授权机制。 +```shell +openssl genrsa -out signing_key_private.pem 2048 +openssl rsa -in signing_key_private.pem -out signing_key_public.pem -pubout +``` +**用私钥签署一组PCRS**
+在每个已知的良好系统配置上,收集当前的PCR值并用RSA私钥对它们进行签名。这个步骤可以根据需要进行多次。 +```shell +tpm2_startauthsession --session=session.ctx +tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=set2.pcr.policy +tpm2_flushcontext session.ctx +openssl dgst -sha256 -sign signing_key_private.pem -out set2.pcr.signature set2.pcr.policy +``` +**将LUKS加密密码口令绑定到公钥**
+```shell +# 在将LUKS加密密码口令密封到TPM之前,有必要创建一个策略对象,该对象指定可以解封密码口令的条件。该策略将指定一组特定的pcr (PCR0)必须与使用特定密钥(signing_key_public.pem)签名的值匹配: +tpm2_loadexternal --key-algorithm=rsa --hierarchy=o --public=signing_key_public.pem --key-context=signing_key.ctx --name=signing_key.name +tpm2_startauthsession --session=session.ctx +tpm2_policyauthorize --session=session.ctx --policy=authorized.policy --name=signing_key.name +tpm2_flushcontext session.ctx + +# 通过使用上述策略创建一个密封对象,将密码口令密封到TPM。请注意,由于前面的示例扩展了PCR0以防止密码口令的重新解密,因此使用了密码口令的备份副本: +cat disk_secret.bkup | tpm2_create --hash-algorithm=sha256 --public=auth_pcr_seal_key.pub --private=auth_pcr_seal_key.priv --sealing-input=- --parent-context=prim.ctx --policy=authorized.policy + +# 用上面创建的对象替换旧的持久密封对象: +tpm2_evictcontrol --hierarchy=o --object-context=0x81010002 +tpm2_load -Q --parent-context=prim.ctx --public=auth_pcr_seal_key.pub --private=auth_pcr_seal_key.priv --name=auth_pcr_seal_key.name --key-context=auth_pcr_seal_key.ctx +tpm2_evictcontrol --hierarchy=o --object-context=auth_pcr_seal_key.ctx 0x81010002 +``` + +**解密加密密码口令** + +```shell +# 加载公钥、PCR策略和签名,并要求TPM验证签名: +tpm2_loadexternal --key-algorithm=rsa --hierarchy=o --public=signing_key_public.pem --key-context=signing_key.ctx --name=signing_key.name +tpm2_verifysignature --key-context=signing_key.ctx --hash-algorithm=sha256 --message=set2.pcr.policy --signature=set2.pcr.signature --ticket=verification.tkt --format=rsassa + +# 现在请TPM验证PCR值是否与当前值匹配,并为签名验证传递一个验证票据。请注意,一次只能验证一组PCR值:整个过程必须重复,以便尝试验证另一组签名PCR值: +tpm2_startauthsession --policy-session --session=session.ctx +tpm2_policypcr --pcr-list="sha256:0" --session=session.ctx --policy=set2.pcr.policy +tpm2_policyauthorize --session=session.ctx --input=set2.pcr.policy --name=signing_key.name --ticket=verification.tkt + +# 解锁加密密码口令并解锁卷: +sudo losetup /dev/loop0 enc.disk +tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume +tpm2_flushcontext session.ctx +sudo mount /dev/mapper/enc_volume mountpoint/ +ls mountpoint/ + +# 卸载卷 +sudo umount mountpoint +sudo cryptsetup remove enc_volume +sudo losetup -d /dev/loop0 +``` +[1]: 本方案的撰写参考了https://www.intel.com/content/www/us/en/developer/articles/code-sample/protecting-secret-data-and-keys-using-intel-platform-trust-technology.html + diff --git a/src/standard-china.md b/src/standard-china.md index 5e20f951ae2a8888ff6839cb41eedde232e3fa58..a02f610c3bef9346b183e70cf3e29c48895179f3 100644 --- a/src/standard-china.md +++ b/src/standard-china.md @@ -1,4 +1,7 @@ # 一、中国标准 +当前国内可信计算标准已构建了密码为基础、芯片为支柱、主板为平台,软件为核心,网络为纽带、应用成体系的可信计算标准化体系。这些标准为落实《网络安全法》、支持《网络安全等级保护条例》《关键信息基础设施条例》的实施提供了重要依据。 +国内可信计算技术体系如图所示范: +![国内可信标准体系](images/standard-china-1.png) ## 1.1 国家标准化委员会发布 ### 1.1.1 全国信息安全标准化技术委员会 | 标准编号 | 标准名称 | 归口单位 | 标准概述 | diff --git a/src/standard.md b/src/standard.md index a3b0da1d6662db7da5f0346f0cf22981d2291235..67d7da0a5333d23429cef55cd786a6311f41a002 100644 --- a/src/standard.md +++ b/src/standard.md @@ -1,5 +1,5 @@ # 一、引言 -&embsp;&embsp; + # 二、标准生态 ## 2.1 [国际标准](standard-international.md) ## 2.2 [国内标准](standard-china.md) diff --git a/src/trustedcomputingSig.md b/src/trustedcomputingSig.md index 679fbe6b5220e6cbee768d8bc19ba0019e210e9e..abf5eb079d92c60be1eb0bcbda2c27d1ff1a36ba 100644 --- a/src/trustedcomputingSig.md +++ b/src/trustedcomputingSig.md @@ -9,9 +9,9 @@ - 在数据中心领域远程证明更加关键; - 龙蜥社区目前在kernel、libgcrypt、openssl等基础组件均已支持国密算法,但是基于SM2/3/4密码算法的远程证明全链路验证没有完全实现; 2. 没有统一可用的可信计算解决方案: - - 客户不知道怎么使用 TPM/TCM (痛点)【不知道TPM/TCM能解决哪些安全问题、如何enable这些解决方案】 - - 远程证明server侧没有现成可用的东西,TPM虽然在Windows中非常成熟,但是在 LinuxOS用户有感知地透传,应用可信计算技术目前比较有限; - - 可信计算落地:在基础设施上enable 时候没有开源通用的软件可用,例如在 TCM没有开源可用的软件栈;在国内客户送测(认证)要求是 TCM,目前使用 TPM 替代,这个不是长久方案; + - 客户不知道如何使用可信根提供的安全能力服务 + - 作为可信计算技术落地应用的核心,远程证明server侧没有现成可用开源参考实践,TPM虽然在Windows中非常成熟,但是在 LinuxOS用户有感知地透传,应用可信计算技术目前比较有限; + - 缺乏面向基础设施的通用可信计算特性使能开源参考实现;   为夯实关键信息基础设施主动安全纵深防御能力,促进可信计算技术开源开放生态繁荣发展,可信计算SIG由此成立。 # SIG 愿景 1. 立足龙蜥社区国内OS根社区定位,将龙蜥社区可信计算SIG打造为国内可信计算技术开源开放的总入口;