找到代码段的RVA值和内存大小,读取数据进行校验,校验值 存储在USB Key文件名为2004的文件中, 校验过程如图5所示。 3.2 授权模块的实现 用户的授权标示着用户被软件拥有者合法授权,用户根 据授权合法使用软件功能。非法用户将不能使用软件,而且针 对软件的恶意攻击,软件应具备一定保密性,使得软件不被破 解并非法使用。 USB Key存储了加密密钥及用户信息。用户的密钥是数据 加密算法使用的密钥,也是用户身份的可靠识别。另外,用户 的信息如用户名、公司名称也可作为辅助信息存储到USB Key。 这些信息的存储安全性一方面由简单算法来保证,另外USB Key也提供了可靠的数据安全性保证 [2] 。 加密模块作为一个全局模块,在需要加密数据的时候别 调用。该软件使用了三种加密算法,DES、3DES和AES[5] 。 加密密钥存储在USB Key中,根据用户的选择使用不同的加 密算法来加密数据。解密则是加密的逆过程。 3.2.1 USB Key存储文件 USB Key是一种无驱动、低成本的计算机硬件设备。可 以存取数据,提供32K的存储空间,具有文件目录结构。支 持访问控制策略,用户分为三种,管理员、普通用户和全部用 户,可以为不同的用户指定不同的存储和读取的权限。 本文采用的策略是在普通用户权限下,创建一个新的文 件,用来存储DES的密钥。普通用户的权限依赖于普通用户 密码。读取该DES密钥的时候,只有拥有普通用户密码的才 能登陆,访问之前创建的文件,将DES密钥取出来用于解密。 USB Key提供了打开设备、存取文件、访问控制的一系列API 调用,帮助开发者更好地完成安全系统的设计。 由于访问USB Key的操作并不支持并发的访问,因此要 建立互斥的机制,确定对USB Key的访问是唯一的。本文采 用的是CreateMutex的方式,访问之前查询是否已有相同的 mutex对象,访问之后关闭句柄。 首先是调用epas_CreateContext和epas_OpenDevice得到 一个操作USB Key的句柄,然后使用epas_CreateFile创建一个 文件,使用一个0-65535的ID来标示文件,同时设定文件的 存储、读取、删除的权限,指定文件的大小。然后使用函数 epas_OpenFile打开文件,使用函数epas_Write将文件所用的数 据用0填写,然后将需要存储的数据(DES的密钥)写进去。 最后使用epas_CloseDevice和epas_DeleteContext来关闭打 开的USB Key设备。同时使用CloseHandle来关闭一开始创建 的互斥对象。读取密钥是一个相反的过程。读取不需要创建文 件,只需要按照约定打开指定的文件,将文件的信息读取出来 即可。注意读取的操作要用普通用户的权限来操作,使用函数 epas_Verify,把EPAS_VERIFY_USER_PIN和普通用户的密码作 为函数参数,可将当前的操作提升到普通用户的权限。 3.2.2 加密接口和解密接口 判断Key是否存在的接口定义: bool Is_Key_Exist() 初始化Key的接口: bool ResetKey(LPCTSTR AdmminPIN) 加密数据的接口: bool Encrypt_f(char *Out,char *In,UINT len,int algorithm_type) 解密数据的接口: bool Decrypt_f(char *Out,char *In,UINT len,int algorithm_type) 数据在加解密的过程中,会按块进行操作。每块的大小 是128byte,由于对称加密的特性,加解密前后的数据大小不 变。因此可按顺序对文件进行加解密,最后的数据对于不满 128byte的尾部数据,则采取简单的异或方式。 3.2.3 授权和验证 USB Key的授权过程如图6所示。 读取用户信息的接口: bool ReadUserInfo(LPCTSTR &userPIN,LPCTSTR &userInfo) 用户密码是用户的唯一身份标识,用户信息是辅助性的 信息,是可选的。 写入用户标识的接口: bool WriteUserInfo(LPCTSTR &userPIN,LPCTSTR &userInfo) 设置用户密码的接口: bool WriteKey(LPCTSTR user_key,LPCTSTR userPIN) User_key是用户进行身份验证的密码,userPIN是USB Key自访问控制的验证密码。授权信息是一个32位的二进制 数字,由系统随机生成。然后系统调用USB Key的授权接口: bool WriteUserInfo(LPCTSTR &userPIN,LPCTSTR &userInfo) 将授权信息存入USB Key中的2001文件。然后将 此授权信息进行CRC32的校验,将校验信息写入被保 |