虚拟化和安全容器——发展和引言

Crypto/QAT/TEE

Crypto

软件层面上算法,可以是各种加解密算法,例如对称加密、非对称加密、哈斯等等,同是需要对其进行加速

QAT(Quick Assist Technology)

首先它包含crypto,就是支持加解密,零一方面也支持zip,也就是压缩解压缩。另外还有Https中的OpenSSL的解密。

最开始,会有一张专门的加速卡,在硬件层面实现了密集计算的并行优化,现在Intel在CPU上专门有一块会将其集成进去。

  • QAT_Engine:支持引擎,按照需求封装的一个接口,支持指令级(软件层面),也支持加速卡

TEE(Trusted Execution Environment)

可信执行环境。

最开始由三星Android的TrustZoom开始发展而来。TEE是CPU上的一块区域。这块区域的作用是给数据和代码的执行提供一个更安全的空间,并保证它们的机密性和完整性。在TEE上运行的应用叫做可信应用,可信应用之间通过密码学技术保证它们之间是隔离开的,不会随意读取和操作其它可信应用的数据。

SGX(software guard extensions)

SGX技术的分析和研究

TEE中的程序容易在运行时被读取内存,需要对内存进行加密。

2013年, Intel推出SGX指令集扩展, 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软件的破坏。

上述说的扩展允许应用程序实现一个被称为enclave的安全容器, 在应用程序的地址空间中划分出一块被保护的区域, 为容器内的代码和数据提供机密性和完整性的保护, 免受拥有特殊权限的恶意软件的破坏。

特点:

  • 访问内存需要申请
  • 有专门接口
  • 进程级

存在缺陷

  • 提供的enclave可使用内存太小,当程序数量和规模增大时,需要换进换出页面。为了保证安全性, 需要对页面进行完整性和机密性保障, 导致系统开销大

SEV/ES/SNP

SEV(AMD: Secure Encrypted Virtualization)

SEV主要的思想是为虚拟机内存进行加密保护,而且不同虚拟机之间以及宿主机不能直接读取或者窃取到虚拟机内存数据。

与上述的SGX不同,SEV主要是虚拟机级别的安全。

hypervisor和guest

一个hypervisor(又被称为virtual machine monitor,VMM,或virtualizer)是一种模拟器;它是创建或者运行虚拟机的软件、固件、或者硬件。一个计算机,上面运行着一个hypervisor,hypervisor上面又运行着一个或多个虚拟机,该计算机被称为host machine,每一个虚拟机被叫做guest machine。hypervisor为guest operating system营造了一个虚拟的操作系统,并且对guest operating system的运行进行管理。

ES(Encrypted State)

SEV-ES: Secure Encrypted Virtualization - Encrypted State

主要加入了寄存器保护

  • Guest寄存器状态也由安全密钥加密保护
  • Guest需要显式与hypervisor共享寄存器状态(使用Guest-Hypervisor Communication Block(GHCB))

SNP(Secure Nested Paging)

SNP用于防止integrity attack。一致性,防止读内存之前被修改。

SEV-SNP一致性的基本原则是:如果VM能够读取一个加密的页,则VM总是能够读取到上次写入的值。就是说如果VM向地址X写入了值A,之后任意时刻读取地址X,要么能够读取到A,要么获取到一个内存不可读的异常。SEV-SNP就是用来保证这种一致性的。

TDX(Trust Domain Extensions)

下一代CPU,和SEV相似。系统启动之后,会全内存加密,每一块都有不同的密钥。保护每一个VM的内存。

虚拟机级

QEMU-KVM

QEMU:一整套完整的虚拟化解决方案,它是纯软件实现的,包括处理器虚拟化内存虚拟化以及各种虚拟设备的模拟

KVM:广义的KVM实际上包含两部分,一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改QEMU

组内目前使用QEMU-KVM方式,原因是对AMD比较支持。

另外一种方式是使用libvirt-XML:libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。

NUMA/numactl

NUMA

NUMA 全称 Non-Uniform Memory Access,译为“非一致性内存访问”。这种构架下,不同的内存器件和CPU核心从属不同的 Node,每个 Node 都有自己的集成内存控制器(IMC,Integrated Memory Controller)。

numactl

用于控制进程与共享存储的NUMA技术机制

usage: numactl [--all | -a] [--interleave= | -i <nodes>] [--preferred= | -p <node>]
               [--physcpubind= | -C <cpus>] [--cpunodebind= | -N <nodes>]
               [--membind= | -m <nodes>] [--localalloc | -l] command args ...
       numactl [--show | -s]
       numactl [--hardware | -H]
       numactl [--length | -l <length>] [--offset | -o <offset>] [--shmmode | -M <shmmode>]
               [--strict | -t]
               [--shmid | -I <id>] --shm | -S <shmkeyfile>
               [--shmid | -I <id>] --file | -f <tmpfsfile>
               [--huge | -u] [--touch | -T]
               memory policy | --dump | -d | --dump-nodes | -D

memory policy is --interleave | -i, --preferred | -p, --membind | -m, --localalloc | -l
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇