1.5.4 OSD的安全
在ANSI T10 SCSI OSD标准为基于权能的协议定义了强安全性,该协议强制性地保证SCSI请求的完整性和客户端的合法使用。每个命令必须附有哈希码(HMAC-SHA1算法的160位密钥的哈希消息认证码),它标识一个特定的对象以及针对该对象执行的操作列表。OSD安全过程流程如图1.8所示。
图1.8 OSD安全过程流程
①安全管理端与一个OSD交换共享密钥。
②客户端必须从安全管理端发出请求获取一个权能,并对访问的对象指定OSD的名称、分区ID和OID。
③安全管理端来决定客户端通过LDAP, NIS或Kerberos的方法发出请求是否被授权。
④因为这种身份认证的方法超出了ANSI T10 SCSI OSD协议的范围之外,安全管理端与策略管理端交互来确定客户端是否被授权来对指定的对象执行请求操作。如果操作是允许的,安全管理端将生成证书,包括所请求的权能和完整性校验值(CAP_key)。CAP_key是通过使用一个OSD的密钥和权能的伪随机函数产生的。
⑤证书从安全管理端发送到客户端。
⑥客户端发出请求、权能以及对每个OSD命令验证标签。验证标签是由客户端使用CAP_key计算出来的。
在处理命令之前,OSD验证了以下内容:
• 验证标签,基于密钥和权能信息;
• 该功能尚未以任何方式修改;
• 该功能允许对指定对象的请求作出操作。
如果通过测试,OSD允许基于权能中编码的权限的操作。一个客户端可以请求允许多种类型的操作的证书,如读、写或删除。可以允许客户端主动缓存和重用凭证,最大限度地减少安全管理的信息数量。证书可以被缓存、传播、阻塞、撤销或过期。
1.权能
SCSI命令描述块(command descriptor blocks, CDB)的字段,指定命令可以请求的命令功能(哪个OSD对象可以被访问)。权能的内容可以由策略管理端管理用于应用程序客户端,也可以由安全管理端通过证书进行保护。
2.证书
一个由安全管理端准备的数据结构,由完整性校验值(CAP_key)进行保护。此证书被发送到应用程序客户端来定义对某个OSD逻辑单元的访问,用于指定OSD对象上指定命令的执行。证书包括由策略管理端准备,并由应用程序客户端复制到每个CDB来请求指定的命令功能的一种权能。
3.OSD的共享密钥层次结构
共享密钥的层次结构从最高到最低包括以下内容:
• 主密钥:层次结构中位于最高层次密钥,可以允许对驱动器不受限制的访问。主密钥的丢失被认为是一个灾难性事件。因为主密钥的这种重要性,该协议限制了它的使用仅仅局限于设置的根密钥这种罕见事件。主密钥仅仅在驱动器的所有者发生改变的情况下才能被修改。
• 根密钥:与主密钥类似,根密钥提供对驱动器不受限制的访问。然而,根密钥不能被用来初始化驱动器或设置一个新的主密钥。根密钥设置好后,可以用来设置分区密钥。根密钥是可以根据需要或者作为一个用于维护安全的预定的更新操作的一部分被修改的。
• 分区密钥:用于为每个分区产生工作密钥。对象存储分为多个分区,每个分区都有一个唯一的分区密钥和工作密钥。
• 工作密钥:用于生成客户端,以及用于访问单个对象的权能密钥。由于它们的频繁使用,工作密钥应经常刷新,如每隔一小时。不幸的是,一旦密钥刷新就会立即导致该密钥所产生的所有证书失效,当所有的客户端必须与安全管理端通信以获得新的凭据时也可能导致性能的显著下降。由于所有证书在被对象存储缓冲之前必须进行验证,这也就增加了OSD上的负载。为了解决这些问题,对象存储可以将最多16个更新版本的工作密钥声明为可用。这将有效地定义多个工作密钥同时可用,因此,一个密钥的刷新只会影响到有限数量的权能。
为了支持这一功能,该协议需要一个被纳入特定权能中的密钥版本,那些权能标识了哪些密钥在验证过程中可用。
对象存储与传统存储的对比见表1.3。
表1.3 对象存储与传统存储的对比