浅析NVMe key per IO加密技术-2

二、Key per IO功能设置的流程

设置Key Per I/O功能需要对NVMe存储设备进行一系列配置,涉及多个步骤和能力要求。以下是一个简化的流程概述:

  1. 硬件支持:首先,NVMe固态硬盘支持Key Per I/O技术,并且了解相关的NVM Express规格、TCG Key Per I/O SSC v1.00标准以及其他行业规范。

  2. 初始化检测

    • 通过NVMe Identify控制器命令获取设备的Key Per I/O支持信息,如KPIOS(Key Per I/O Supported)位以及Key Per I/O Scope(KPIOSC)位来确认设备是否支持并能够按命名空间或整个NVM子系统管理密钥。

      图片

    • 进行Level 0特性发现,以确定设备支持哪些关键特性,如支持的密钥数量、密钥唯一标识符长度、数据访问对齐和粒度等。

    • 图片

  1. 一次性设置

    • 利用NVMe Security Send/Receive命令同步主机与固态硬盘之间的通信属性,并执行Level 0发现以获取关于Key Per I/O特性的详细描述,包括支持的通信ID(ComIDs)、可选功能以及加密密钥传输的安全算法等。

    • 当将Media加密密钥(MEKs)的所有权从存储设备(SD,如自加密驱动器)转移到主机时,这意味着对于那些由Key Per I/O管理的命名空间来说,存储设备自身生成的MEK将不再使用。在采用Key Per I/O技术进行数据加密管理的情况下,一旦将MEK的所有权转移给主机,主机将负责生成、管理和使用这些MEK来加密和解密相关命名空间中的数据。而那些未被Key Per I/O管理的命名空间,其仍然保留由存储设备自动生成和维护的MEK,即继续沿用原有的加密机制。这种区分处理使得系统能够根据需要选择不同的加密管理模式,以适应不同级别的安全策略和控制要求。

图片

在启用Key Per I/O功能并进行MEK所有权转移后,对于受Key Per I/O管控的命名空间而言,原先由存储设备生成的MEK将失效,转而采用主机提供的MEK;而对于不受Key Per I/O管理的命名空间,则继续保留和使用存储设备自产的MEK进行数据保护。

  1. 启用与配置Key Per I/O:

使用NVMe Security Send/Receive命令序列激活Key Per I/O功能,包括与设备交换密钥管理控制权和激活Key Per I/O模式。

图片

  • 更新管理凭证从默认设置:这是指在初始化或启用Key Per I/O功能之前,需要先将存储设备的管理员凭据从出厂预设值或者当前默认状态更改为符合安全策略和用户需求的新凭证。这一步骤确保了系统的安全性,因为默认凭据可能容易被攻击者利用。

  • 配置Key Per I/O策略表:这部分涉及定义Key Per I/O操作的具体安全政策和机制。例如:

    • 启用重放保护:防止恶意用户重复使用以前捕获的数据包进行未经授权的访问。

    • 启用RSA封装的KEKs:表示要求密钥加密密钥(KEKs)在传输和存储时采用RSA公钥加密算法进行安全封装,提高密钥的安全性。

    • 禁用明文KEKs:避免密钥以未加密形式存在,以降低密钥泄露的风险。

  • 配置Key Tag分配表Key Tag是用于标识特定媒体加密密钥(MEK)的标签,用于关联每个I/O操作与相应的加密密钥。在此步骤中,需要:

    • 为每个Key Per I/O命名空间分配Key Tag的数量:确定每个支持Key Per I/O功能的命名空间可以使用的不同密钥标签数量,从而决定可并行使用多少个不同的MEK

    • 为Key Per I/O启用额外的命名空间:如果需要增加更多命名空间来支持Key Per I/O功能,就需要在分配表中对其进行设置和授权。

  1. 加载加密密钥

初始加载KEKs(密钥加密密钥)和MEKs(Media加密密钥)是启用Key Per I/O功能的关键步骤之一,具体流程如下:

图片

  • 获取密钥信息:首先,主机从安全存储库中检索所需的KEKs及其唯一标识符(UID),以及用于对MEKs进行加密的密钥包装规范。

  • 加密传输与导入

    • 主机使用KEK对MEK进行加密。这里提到的加密方式可以采用RSA等算法进行密钥封装。

    • 加密后的所有KEKs和MEKs以单一KMIP(Key Management Interoperability Protocol)消息的形式批量发送到NVMe固态硬盘

  • 注入SD的密钥缓存

    • 自加密驱动器(SED)接收到加密的密钥后,将其解密并注入到自身的易失性密钥缓存或表中。

    • 每个MEK都会被分配一个由主机软件指定的“Key Tag”,以便后续I/O操作通过该标签快速定位相应的MEK进行数据加密/解密。

  • 独立管理每个命名空间:

    • 如果Key Per I/O作用范围为单个命名空间,则每个命名空间将拥有自己的Key Tag及对应的MEK集。

    • 如果Key Per I/O作用于整个NVM子系统,则所有命名空间共享一套Key Tag和MEK资源。

  1. I/O过程中指定密钥:

NVMe规范 TP4055提案引入了一种新的与Key Per I/O(KPIO)相关的命令扩展类型(Command Extension Type, CETYPE)和命令扩展值(Command Extension Value, CEV),它们分别位于I/O读写命令的DWORD12和DWORD13字段中,用于向存储设备指示以下信息:

图片

  • Key Tag Presence:通过设置CETYPE字段不为零(CETYPE != 0)来表示当前I/O命令包含了密钥标签信息。这意味着该I/O操作将使用特定的加密密钥进行数据加密或解密。

  • Key Tag Value:在CEV字段中设置一个具体的值(CEV == KEYTAG),这个值代表了与该I/O命令关联的Media加密密钥(MEK)的标识符,即“Key Tag”。当存储设备执行这个I/O命令时,会根据Key Tag找到对应的MEK来对传输的数据进行加密或解密处理。

  1. 密钥缓存管理

更新Key Cache是指在支持Key Per I/O功能的NVMe设备上,根据需求动态地向设备加载新的加密密钥,并将其应用到指定的命名空间下,同时确保原有数据的安全性和完整性。这一过程旨在提高存储系统的灵活性、安全性和管理效率。

更新Key Cache的过程涉及NVMe设备中的密钥管理机制,具体包括以下几个关键步骤和要点:

图片

  • 获取新的KEKs和MEKs

    • 主机首先从安全存储的Key UID Key Store中检索到新的加密密钥(KEK)及其对应的唯一标识符(UID)。

    • 根据这些信息,主机使用已经注入至设备的KEK来加密新的或已更新的媒体加密密钥(MEK)。

  • 批量导入密钥

    • 将所有新生成或更新后的、经过KEK加密的MEK以单一的KMIP(Key Management Interoperability Protocol)消息的形式发送给NVMe固态硬盘。

    • 这样做的目的是将新的MEKs添加至设备内部的易失性密钥缓存(Volatile Key Cache)中。

  • 更新Key Cache状态

    • 更新操作会替换或者增加在Key Cache中特定命名空间下的MEKs,并且不影响之前由这些密钥所保护的数据

    • 更新过程并不会清除那些用旧密钥写入的数据;而是当使用新的MEK进行读写操作时,对新数据采用新的加密密钥

图片

  • 锁定与清除密钥

在NVMe存储设备中,锁定Key Cache是一种管理加密密钥缓存的机制,确保在特定条件下密钥不会被更改或删除。Key Cache通常包含Media加密密钥(MEKs),用于对存储在设备上的数据进行加密和解密。

图片

如果需要,可以执行针对整个命名空间或单个密钥槽位的Key Cache锁定操作,防止进一步的密钥变更。

  • All NSes Locking:当执行整个非易失性命名空间(Namespace,NS)范围内的Key Cache锁定时,意味着所有与该NVMe设备关联的命名空间中的密钥缓存都将被锁定。这可以防止任何未经授权或计划外的密钥更新或清除操作,从而保障了所有命名空间内数据的安全性和一致性。例如,在系统维护、安全审计或灾难恢复等场景下,这种全局锁定功能尤为关键。

  • Per NS Locking:而按单个命名空间锁定Key Cache则更加细粒度地控制了密钥管理。这种方式允许管理员针对每个独立的命名空间分别进行密钥缓存锁定。这意味着可以在不影响其他命名空间的情况下,仅保护特定命名空间的数据不受密钥变更的影响。这对于多租户环境或者具有不同安全需求的多个存储区域非常适用。

当不再需要某个MEK时,可以通过删除该MEK从Key Manager和SSD密钥缓存中移除,实现类似Crypto Erase的效果。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 OpenAI 自定义 API 提高电商平台的推荐精度

一、引言 在当今的电商时代,推荐系统已成为影响用户购买决策的关键因素之一。为了提供更精准的推荐,许多电商平台纷纷寻求先进的技术支持。OpenAI 自定义 API 正是这样一种强大而灵活的工具,能够通过自然语言处理和机器学习技术,…

C++上位软件通过Snap7开源库访问西门子S7-200/LOGO PLC/合信M226ES PLC V存储区的方法

前言 在前面例程中谈到了C 通过Snap7开源库S7通信库跟西门子S7-1200PLC/S7-1500PLC以及合信CTMC M226ES PLC/CPU226 PLC通信的方式方法和应用例程。但是遗憾的是Snap7中根据官方资料显示只能访问PLC的 DB区、MB区、C区、T区 、I区、Q区,并没有提到有关如何访问S7-20…

SpringBoot+Hutool实现图片验证码

图片验证码在注册、登录、交易、交互等各类场景中都发挥着巨大作用,能够防止操作者利用机器进行暴力破解、恶意注册、滥用服务、批量化操作和自动发布等行为。 创建一个实体类封装,给前端返回的验证码数据: Data public class ValidateCodeV…

PyCharm使用手册

配置文件和代码模板 文件注释模板: 注释项描述示例Project项目名称hello_pythonFile文件名称hello_python.pyAuthor作者Zhang SanDate创建时间2024-01-11 17:05:00PyVersionPython解释器版本Python3.7Description文件描述这是一个python语言入门文件 效果示例&am…

【SSO】统一授权中心v1.0.0版本正式上线(多租户)

目录 背景 体验 技术栈 菜单 示例 背景 为了方便权限管理、用户登录授权、应用授权等,特地开发了当前的统一授权中心。 体验 邮箱注册即可登录体验 后台系统:https://sso.behappyto.cn/#/switch 技术栈 vue3tsspringbootmybatismysql 菜单 …

【2023回顾】2024,放马过来吧

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 🐸哈哈虽然不是技术文&#x…

idea 设置文件头

idea 设置创建文件时自动添加文档注释信息 /** * Description * Author jimaomao * DATE ${DATE} ${TIME} */

第11届电气与电子工程国际会议(ICEEE 2024)即将召开!

2024年第11届电气与电子工程国际会议(ICEEE 2024)将于2024年4月22-24日在土耳其马尔马里斯召开。随着电气和电子工程领域取得的重大进步,ICEEE也迈向未来,有了更多令人兴奋的发展。本次会议旨在促进对该领域最新技术进步、新兴趋势和创新理念的讨论&…

ARP协议详解

1、ARP协议的定义 地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说,所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv…

Ubuntu 卸载重装 Nvidia 显卡驱动

问题描述 我使用 airsim 的时候,发现 UE4 没法使用显卡,导致非常卡顿 输入 nvidia-smi 有显卡型号等信息的输出,但是进程 process 里面没有显示 airsim 和其他软件占用显卡情况 因此,我选择了卸载重装 一.卸载旧版本的驱动 …

回归测试?

1. 什么是回归测试(Regression Testing) 回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑧

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷8 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷8 模块一 …

git撤销提交到本地的commit

有些时候,当我们提交代码到本地后,突然发现因为某些原因需要撤销提交本地的代码。 就比如我,因为代码写错了分支,已经提交到本地了,而我需要取消,并且还要把代码搞得另外的分支上。 提交前: …

RabbitMQ(十)队列的声明方式

目录 1.编程式声明补充:RabbitTemplate 和 AmqpAdmin 的区别 2.声明式声明补充:new Queue() 和 QueueBuilder.durable(queueName).build() 的区别 背景: 在学习 RabbitMQ 的使用时, 经常会遇到不同的队列声明方式,有的…

行为型设计模式——责任链模式

责任链模式 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数…

怎么用 Excel 做出专业的 project 甘特图?10个步骤和60个模板

使用Excel来创建Project甘特图的步骤包括:1、基本设置和布局调整、2、数据输入和时间线配置、3、任务依赖性和进度跟踪、4、视觉效果优化、5、数据更新和维护、6、模板保存和共享。尤其突出基本设置和布局调整,它是构建一个清晰、有效的甘特图的基础。 甘…

适用于 Windows 的 12 个最佳免费磁盘分区管理器软件

分区是与其他部分分开的硬盘驱动器部分。它使您能够将硬盘划分为不同的逻辑部分。分区软件是一种工具,可帮助您执行基本选项,例如创建、调整大小和删除物理磁盘的分区。许多此类程序允许您更改磁盘片的标签以便于识别数据。 适用于 Windows 的 12 个最佳…

编译工具 Cmake 教程——翻译自外网

Make Tutorial hello:echo "Hello, World"Makefile Syntax targets: prerequisitescommandcommandcommand目标是文件名,以空格分隔。通常,每条规则只有一个。 这些命令是通常用于创建目标的一系列步骤。这些需要以制表符开头,而不…

RLHF与LLM训练的碰撞:寻找最佳实践之路!

了解更多公众号:芝士AI吃鱼 在讨论大型语言模型(LLM)时,无论是在研究新闻还是教程中,经常提到一个称为“带有人类反馈的强化学习”(RLHF)的过程。由于RLHF能够将人类偏好纳入优化过程&#xff0…

K8s Pod详解

1.Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个: 可以以它为依据,评估整个…