知行魔盘 - 文件保险箱

AESD 文件格式

知行魔盘 - 文件保险箱 使用的 AESD 文件格式详细记录如下。 知行魔盘 - 文件保险箱 使用的所有算法都是标准和公开的。

每个加密文件由一个文件头和加密内容组成。文件头长度为144字节,包含AESD文件格式版本、标头字节的校验和以及加密文件特定的密钥和填充长度。原始文件数据使用 XTS-AES 加密,使用从魔盘主密钥派生的特定文件密钥。

4 bytes [0-3] AESD. 这是一个文件签名值,表示该文件与知行魔盘 - 文件保险箱应用程序相关联。
1 byte [4] 0x00. 这是文件格式版本。唯一支持的值是0。
7 bytes [5-11] 0x00. 保留供将来使用。
4 bytes [12-15] CRC32校验和。CRC32校验和的计算方法是,首先用0x00替换这4个字节,然后计算144字节文件头的校验和。使用以下操作将结果数值转换为4个字节:


						byte[] CRC32Bytes = new byte[4];
						for (int i = 0; i < 4; i++)
							CRC32Bytes[i] = (byte)((CRC32Bytes >> (24 - 8 * i)) & 0xff);
						

16 bytes [16-31] 全局盐值。全局盐值是创建魔盘时创建的随机值,用于加密魔盘内新创建的文件。它在导出加密文件头部分的解密密钥时使用。有关加密文件头部分的详细信息,请参见下面的部分
16 bytes [32-47] 文件特定的盐值。文件特定的盐值是创建文件时生成的随机值。它在导出加密文件头部分的解密密钥时使用。有关加密文件头部分的详细信息,请参见下面的部分。
80 bytes [48-127] AES-GCM加密的文件头部分。导出加密文件头部分的解密密钥步骤如下:
  • 首先使用具有以下设置的PBKDF2:
    • HMACSHA512 算法
    • 50,000 次迭代
    • 盐值是从文件头中读取的16字节全局盐值
    • 密码是原始加密密码
    • 32字节的派生密钥长度
  • 将得到的32字节与16字节文件特定的盐值相结合,得到长度为48的字节数组。前32个字节是从上面的PBKDF过程中导出的值。最后16个字节是从文件头读取的文件特定的盐值。
  • 根据上述步骤中的48字节值计算SHA512哈希。
  • 散列字节的前32个字节是AES-GCM密钥。接下来的12个字节是AES-GCM IV。剩余的20个字节没有使用。

派生密钥和 IV 与 AES-GCM 授权标记一起使用,这是144字节报头的最后16个字节,用于 AES-GCM 解密80字节加密的文件头部分。解密的文件头部分包含:

2 bytes 填充长度。填充长度以大端字节表示,可以使用以下操作从字节转换为整数:
PaddingLen = (decryptedHeaderBytes[0] << 8) + decryptedHeaderBytes[1];
14 bytes 0x00. 保留。这些字节都定义为0x00。
64 bytes 特定文件的XTS-AES 256加密密钥。

16 bytes [128-143] AES-GCM验证标记。当解密前一个80字节的加密报头部分时,使用这个认证标签。
nn bytes XTS-AES 256加密文件内容。数据单元大小为512字节。解密文件头中文件特定加密密钥的前32个字节是第一个密钥。解密报头中文件特定加密密钥的最后32个字节是第二个密钥。因为每个数据单元必须等于512字节,所以最后一个明文数据块可以根据需要用空字节(0x00)填充,以达到512字节的长度。填充长度被加密并存储在加密的报头部分中。解密时,移除填充。

© 2021 西安知行软件有限公司