安全硬盘的制作方法_3

文档序号:9350304阅读:来源:国知局
就是确保读/写请求的参数是真实的,没有被篡改;会话有效性,就是确认读/写请求确实属于一个有效的会话,也就是检查这个操作是否由一个合法用户发起。在安全硬盘中,引入读出请求(读命令)data — SafeRead (offset,len, sid, token)和写入请求(写命令)SafeWrite (offset, len, data, sid, token)。其中,offset、Ien和data是基本参数,各基本参数的意义与普通读/写命令相同,sid和token是新增加的验证参数,与访问控制有关。sid参数是读/写操作所属会话的会话,使用会话信息表可以由sid查出该命令发起者的用户身份标识,以及会话密钥skey。token参数是每条读/写命令特有的操作令牌,可以验证该命令参数的完整性。上述读出请求对应图2中的“读出命令(参数:起始点,长度,会话标识,令牌)”及返回的“读出数据”。上述写入请求对应图2中的“写入命令(参数:起始点,长度,写入数据,会话标识,令牌)”。一种可能的做法是令token为MACskey (offset | len | sid),即该命令所有其他参数的消息验证码(MessageAuthenticat1n Code, MAC),这样安全硬盘可以通过token验证所有基本参数都是正当的、未被篡改的。为了避免重放攻击,更安全的做法是为每个会话引入操作序号seq,一个会话相继发出的命令的操作序号是递增的,客户端和安全硬盘同时维护会话的操作序号,这样可令token为MACskey (seq I offset | len | sid)。最后,还可以把写入数据data包括到消息验证码计算的输入中,以消除写入数据data被篡改的可能性;当然,这样也增加了计算token的开销。操作令牌token被验证通过,当且仅当操作发出者拥有该会话标识sid对应的会话密钥skey,且读/写请求的全部基本参数未被篡改,也就是说满足数据完整性;又因为token被验证通过说明sid和skey是对应的,因此该会话是有效的。
[0060]读/写请求要访问一些扇区,扇区是读/写的最小访问单元,因此也是我们对硬盘访问控制的最小单元。对于每个扇区,硬盘都需要维护它的访问控制信息,这个数据结构被称作权限信息表,其字段包括LBA、UID和RW,其中LBA是逻辑块地址,也就是扇区编号,UID是拥有这个扇区的用户身份标识,RW是扇区的读写权限。权限信息表的每条记录保存了一个扇区的拥有者,以及非拥有者用户的读写权限。权限信息表决定了一个读/写操作是否被允许访问该操作涉及到某个扇区。当一个扇区的拥有者UID为O时(权限信息表中条目的初始值),这个扇区可以被任何通过了第一步检查的读写操作访问。当一个扇区的拥有者UID不为O时,说明这个扇区由某个用户拥有的,是受保护的。这时,读/写操作的访问规则会复杂一些,根据扇区的拥有者是否与命令的发起者相同分为两种情况。第一种情况,扇区的拥有者和命令的发起者相同,此种情况下,该扇区允许任何通过第一步检查的读/写操作访问。第二种情况,扇区的拥有者和命令的发起者不相同,此时需根据该扇区的读写权限字段RW决定是否允许该命令。这里,RW字段由两个比特组成,高位表示是否允许读,更确切地说是,是否允许任何非扇区拥有者的用户读该扇区;类似地,低位表示是否允许写,更确切地说是,是否允许任何非扇区拥有者的用户对该扇区进行写操作。例如,默认的RW值为00,表示任何非扇区拥有者的用户都不能读或写该扇区。只有当一个操作涉及到所有的扇区都允许该操作访问时,这个操作才能被授权;反之,若该操作涉及到的扇区中有任意一个拒绝被该操作访问,则该操作被拒绝。而一个被授权了的写操作会更新权限信息表,把涉及到的扇区所对应的条目的拥有者UID字段更新为命令发起者的用户身份标识。
[0061]通过以上两步访问控制检查的读/写操作被允许进行真正的数据读写,并最终把结果返回给用户。
[0062]第四,会话终止模块104,其对应图2中的会话终止步骤204。会话终止模块104设置为在满足设定的终止条件时,终止会话。终止条件包括自动终止、手动终止和非法终止。自动终止是当一个会话的持续时间超过一个预先设定的阈值,或一个会话的累计操作次数超过了一个预先设定的阈值。手动终止,即当用户发出登出命令(终止命令)Cease (sid, token),根据sid和token可以验证登出命令是否合法。该登出命令对应图2中的“终止命令(参数:会话标识,令牌)”。非法终止是当第三步中的访问控制检查失败次数累计超过一个预先设定的阈值时发生,这可以防范对操作令牌token的暴力破解。一旦会话结束,该会话的信息从会话信息表中移除,会话标识以及会话密钥失效。
[0063]上面介绍的实施例主要是关于所属硬盘访问控制方法在硬盘接口方面的设计。接下来讨论实现安全硬盘这种增强接口的关键技术点。
[0064]硬盘的物理接口、协议和命令集等已经形成了若干既定的行业标准,如果硬盘访问控制方法无法与现有标准兼容,那么必然会提高生产商的成本,增加客户采纳的难度,最终难以推广。幸运的是,新增命令可以通过在现有硬盘接口标准之上扩展而达到,保持与已有标准兼容。当今使用最广泛的硬盘接口标准,如SATA和SAS等,都是基于SCSI命令集,而SCSI标准在设计之初就已经考虑到日后扩展的问题,这使得添加新命令变得相对简单。SCSI支持最多255种固定长度命令,以及最多255种变长命令,而标准已定义的命令不超过100种,因此足够我们增加若干访问控制相关的新命令作为厂商特定的功能(Vendor-specific feature),包括前面实施例中提到的 Challenge、Response、SafeRead、SafeWrite 和 Cease 等。SCSI 命令用被称为命令描述符块(Command Descriptor Block,CDB)的结构来描述,CDB定义了一个命令每个字段的含义和长度。根据SCSI的CDB格式,我们可以分别为Challenge、Response和Cease等定义新的定长命令,而为SafeRead和Safeffrite定义新的变长命令(因为参数较多)。任何了解SCSI标准的普通技术人员都可以完成扩展,这里不赘述。
[0065]如图3所示,是本实施例的安全硬盘在固态硬盘上的实现的示意图。
[0066]具体地,近些年,固态硬盘,因其延迟低、吞吐量大、能耗低、噪音小,正在得到越来越广泛的应用,预计未来将逐渐取代传统的机械硬盘,成为主流的硬盘技术。因此,本实施例以固态硬盘为讨论对象,而在机械硬盘上的实现与此类似。固态硬盘中包括CPU、内存、闪存以及各种控制器,就像一台迷你计算机;而其内部的核心控制逻辑是固件程序(Firmware),就像计算机的操作系统。固态硬盘中的数据是持久化在闪存芯片中的,闪存芯片具有读写不对称的特性:读写操作很快,且是以页为单位(一个页包含多个扇区);但写操作必须在空白页上写,非空白页必须擦除之后再写;擦除操作比读写操作慢得多,且是以块为单位(一个块包含多个页)。为了在硬盘接口层面掩盖闪存技术的读写不对称,固态硬盘引入了闪存转换层(Flash Translat1n Layer) 302,它以最高效的方式把对逻辑扇区的读写操作转换成对物理页的读写和物理块的擦除,涉及到的逻辑页到物理页的隐射关系被存储在页映射表314中。普通硬盘的闪存转换层无条件地接受和处理来自硬盘接口(这里假设是SATA模块300)的命令;而安全硬盘增加了额外的访问控制,因此为其引入了访问控制层301,介于SATA模块300和闪存转换层302之间。对于来自SATA模块300的用户命令,访问控制层301根据访问控制信息决定是接收、还是拒绝该命令,如果接收则传给闪存转换层302继续处理。访问控制层301的访问控制信息主要包含三个数据结构:在闪存中持久化存储的用户信息表312和权限信息表313,以及在内存中临时存储的会话信息表311。这三个表被用于硬盘访问控制方法的用户注册、会话建立、操作授权和或会话结束等四个步骤,与前面实施例中的描述一致。
[0067]本实施例介绍对操作系统的必要修改。硬件升级的好处必须得有操作系统的支持才能被应用程序享受到,对安全硬盘也是如此。安全硬盘的SafeWrite不同于普通硬盘的Write,每次调用需要传递SicUtoken等验证参数。而操作系统(以Linux为例)的写文件的系统调用(System call)是 long sys_write (unsigned intfd, const char*buf, size_t count),这样操作系统的现有编程接口不足以满足SafeWrite传递额外参数的需要。因此,需要为操作系统增加新的系统调用long sys_write_safe (un
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1