当前位置:首页 期刊杂志

Office 2016加密机制研究

时间:2024-09-03

◆罗翔

(北京科技大学数理学院 北京 100083)

1 引言

Office 2016 是当前主流的具有加密功能的办公套件,其明文档采用“Office Open XML”文件格式存储,加密后的文档使用复合文档格式(CFB)存储。本文以Word 2016 加密后的.docx 文档为例,分析Office 2016 的文档格式、加密机制和口令验证机制,Excel 2016、PowerPoint 2016 加密文档在数据格式、加解密机制和口令验证机制等方面均与Word 2016 相同。

2 Office 2016 文档加密机制

通过资料研究[1]、做报分析及软件逆向分析[2]可知,Office 2016文档加密使用AES256-CBC 算法,加密机制如图1 所示。

Office 2016 加密文档时将整个文件作为明文分块进行加密,每个分块大小为4096 字节,然后将密数据作为“EncryptedPackage”对象封装在CFB 文件中;同时将用于数据加密以及口令验证的加密算法、Hash 算法、密钥长度、分组长度以及所使用的随机数等信息作为“EncryptionⅠnfo”对象也封装在这个CFB 文件中。文档加密口令Password、盐值SaltValue 和作为固定值的BlockKey 通过HMK 算法生成密钥Key,用于对文档加密密钥EncryptionKey 进行加密保护。

HMK(SaltValue,Password,SpinCount,BlockKey)算法如下:

(1)H0=SHA512(SaltValue||Unicode(Password));

(2)Hi+1=SHA512(i||Hi),迭代计算SpinCount 次,i 从0 递增到SpinCount-1;

(3)Key=SHA512(HSpinCount||BlockKey)。

上述算法中“||”表示串联,SpinCount 取自“EncryptionⅠnfo”对象。

密钥Key 通过AES256-CBC 算法对文档加密密钥EncryptionKey进行加密保护,得到EncryptedKey,存储于加密文档的EncryptionⅠnfo Stream 结构中。EncryptionKey 为32 字节随机数,由伪随机数生成器WRNG(Windows Pseudo_Random Number Generator)生成。

3 Office 2016 口令验证机制

Office 2016 加密文档EncryptionⅠnfo 流中包含口令验证相关的参数信息,例如encryptedVerifierHashⅠnput、encryptedVerifierHashValue。

经资料解读[1],Office 2016 口令验证机制采用与文档加密机制相同的密钥导出算法HMK 生成密钥,区别在于固定值BlockKey 不同。其口令验证具体流程如下:

(1)从EncryptionⅠnfo 流中读取加密算法指示、验证模式及口令 验 证 相 关 的 SaltValue 、 EncryptedVerifierHashⅠnput 、EncryptedVerifierHashValue 等信息,并对其进行Base64 解码。

(2)利用SaltValue、Password、SpinCount、BlockKey1、BlockKey2作为参数,通过密钥导出算法HMK 生成密钥KEK1 和KEK2。

BlockKey1={0xfe,0xa7,0xd2,0x76,0x3b,0x4b,0x9e,0x79};

BlockKey2={0xd7,0xaa,0x0f,0x6d,0x30,0x61,0x34,0x4e}。

( 3 ) 用 KEK1 对 encryptedVerifierHashⅠnput 解 密 得 到VerifierHashⅠnput;用KEK2 对encryptedVerifierHashValue 解密得到VerifierHashValue。

( 4 ) 对VerifierHashⅠnput 进 行 散 列 计 算, 散 列 值 与VerifierHashValue 相同,则口令正确。

对上述口令验证流程进行编程验证(口令为3Q2u!),从加密文档EncryptionⅠnfo 流中提取以下信息:

对以上参数进行Base64 解码后,按照上述口令验证流程得到以下结果:

VerifierHashResult 与VerifierHashValue 相等,口令验证通过。经多次做报验证,口令验证均通过。

通过以上编程验证,结合加密文档解析、动态分析可知,Office 2016 采用密钥导出算法HMK 与AES 算法的组合进行口令验证,如图2 所示。

图2 Office 2016 口令验证机制

4 Office 2016 加密机制安全性分析

Office2016 文档加密和口令验证采用的核心算法是AES256,密钥生成采用Windows 操作系统的随机数算法WRNG。AES 算法中,每轮密钥扩展常数的不同、密钥扩展的非线性以及加解密使用变换的不同,使得AES 对密钥的选择没有任何限制。AES 的设计者给出了AES 可抵抗差分分析和线性分析的安全性证明[3]。另外,AES 还可很好地抵抗不可能差分分析、积分攻击、代数攻击、差值攻击和相关密钥攻击等[4][5]。因此,目前针对AES 最有效的攻击方法还是穷尽密钥搜索攻击。

Office 2016 加密机制在密钥导出算法中加入了盐值(SaltValue),且在生成密钥KEK 时需要进行多达10 万次散列迭代计算,可有效抵抗暴力破解,极大地降低了口令猜测破解的效率。

从上述分析可知,Office 2016 加密文档的安全性取决于攻击者的计算能力以及用户口令空间大小。攻击者要获取Office 2016 加密文档的明文,要么采用口令破解方法,依次进行SpinCount 次循环迭代计算SHA512 函数,获得正确的用户口令;要么采用密钥搜索方法,不进行密钥生成计算,直接对报文密钥Key 进行搜索。除此之外并没有其他捷径。为定量分析Office 2016 加密文档的安全性,利用现有密码破解工具Office Password Recovery_5.10,对加密文档进行密码破译实验。

计算机性能参数:Win7 sp1,Core i7-4790 CPU@3.6GHZ,内存4G。

密钥搜索破解速度:约60000000 个密钥/秒。

口令猜测破解速度:约60 个口令/秒。口令猜测破解时间成本如表1 所示。

表1 普通单机上Office 2016 口令猜测破解时间

分析上述实验结果可知,Office 2016 采用AES256 算法,使得密钥搜索方法失效;密钥导出算法生成密钥KEK 时需进行10 万次迭代,使得口令破解速度十分缓慢。通过破解实验表明,Office 2016文档加密功能在口令较短时存在安全隐患;当口令字符集合复杂且长度大于8 时,破译难度极大。

5 结束语

本文研究了Office 2016 的文档格式、文档加密机制和口令验证机制,分析了其加密机制的安全性。算法分析和实验结果表明:当用户口令复杂(例如包含大小字母和数字,甚至其他特殊字符)且长度大于8 时,Office 2016 加密机制具有很强的抗破译性。需要指出的是,虽然Office 2016 加密采用AES256 强算法,但是当用户选用弱口令(如长度小于8,纯数字,常用英文单词等)时,依然容易被破解。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!