VeraCrypt

文档 >> 技术细节 >> VeraCrypt卷格式规范

VeraCrypt卷格式规范

文件托管卷的格式与分区/设备托管卷的格式相同(不过,系统分区/驱动器的“卷头”或密钥数据存储在第一个逻辑驱动器磁道的最后512字节中)。VeraCrypt卷没有“签名”或ID字符串。在解密之前,它们看起来完全由随机数据组成。
每个VeraCrypt卷在创建时,其空闲空间会用随机数据填充。* 随机数据的生成方式如下:在VeraCrypt卷格式化开始之前,随机数生成器会生成一个临时加密密钥和一个临时辅助密钥(XTS模式)(请参阅 随机数生成器 部分)。使用临时密钥初始化用户选择的加密算法。然后,该加密算法用于加密由随机数生成器生成的随机字节组成的明文块。加密算法以XTS模式运行(请参阅 隐藏卷 部分)。生成的密文块用于填充(覆盖)卷上的空闲空间。临时密钥存储在RAM中,并在格式化完成后擦除。


VeraCrypt卷格式规范:

252 
偏移量(字节) 大小(字节) 加密
状态†
描述
       
64 
 未加密§
 盐值
       
64 
 已加密
 ASCII字符串 "VERA"
       
68 
 已加密
 卷头格式版本 (2)
       
70 
 已加密
 打开该卷所需的最低程序版本
       
72 
 已加密
 字节 256 - 511(解密后)的 CRC - 32 校验和
       
76 
16 
 已加密
 保留(必须全为零)
       
92 
 已加密
 隐藏卷的大小(非隐藏卷中设置为零)
       
100 
 加密
 卷大小
       
108 
 加密
 主密钥范围起始位置的字节偏移量
       
116 
 加密
 主密钥范围内加密区域的大小
       
124 
       
72 
 已加密
 字节 256 - 511(解密后)的 CRC - 32 校验和
       
76 
16 
 已加密
 保留(必须全为零)
       
92 
 已加密
 隐藏卷的大小(非隐藏卷中设置为零)
       
 已加密
 字节 64 - 251(解密后)的 CRC - 32 校验和
       
256 
可变 
 已加密
 串联的主密钥和辅助主密钥**
       
512 
65024 
 已加密
 保留(对于系统加密,此项省略††)
       
65536 
65536 
 已加密 /
 隐藏卷头区域(如果没有隐藏卷
 
 
 未加密§
 在卷内,此区域包含随机数据††)。对于
 
 
 
 系统加密,此项省略。‡‡ 请参阅字节 0–65535。
       
131072 
可变 
 加密
 数据区域(主密钥范围)。对于系统加密,偏移量
 
 
 
 可能不同(取决于系统分区的偏移量)。
       
S - 131072†
65536 
 加密 /
 备份头(使用不同的盐派生的不同头密钥进行加密)。
 
 
 未加密§
 使用不同的盐派生的不同头密钥进行加密)。对于系统加密,此项省略。‡‡ 请参阅字节 0 - 65535。
 
 
 
 
       
S - 65536†
65536 
 加密 /
 隐藏卷的备份头(使用不同的盐派生的不同头密钥进行加密)。
 
 
 未加密§
 使用不同的盐派生的不同头密钥进行加密)。如果没有隐藏卷,
 
 
 
 如果卷内包含一个隐藏卷,此区域包含随机数据。††
 
 
 
 对于系统加密,此项目省略。‡‡ 请参阅字节 0 - 65535。
 
 
 
 0 - 65535。
       
位于字节 #0(盐值)和 #256(主密钥)的字段包含在卷创建过程中由随机数生成器生成的随机值(请参阅 随机数生成器 部分)。
如果 VeraCrypt 卷包含一个隐藏卷(在其空闲空间内),隐藏卷的头部位于宿主卷的字节 #65536 处(宿主/外部卷的头部位于宿主卷的字节 #0 处 - 请参阅 隐藏卷 部分)。如果 VeraCrypt 卷内没有隐藏卷,卷的字节 65536 - 131071(即隐藏卷头部可能存在的区域)包含随机数据(有关在卷创建时用随机数据填充空闲卷空间的方法的信息,请参阅上文)。隐藏卷头部的布局与标准卷的布局相同(字节 0 - 65535)。
VeraCrypt 卷的最大可能大小为 263 字节(8,589,934,592 GB)。然而,出于安全原因(考虑到 加密算法 使用的 128 位块大小),允许的最大卷大小为 1 PB(1,048,576 GB)。

嵌入式备份头部

每个 VeraCrypt 卷都包含一个嵌入式备份头部,位于卷的末尾(请参阅上文)。头部备份 不是 卷头部的副本,因为它使用不同的盐值派生的不同头部密钥进行加密(请参阅 头部密钥派生、盐值和迭代次数 部分)。
当卷密码和/或 PIM 和/或密钥文件发生更改时,或者当从嵌入式(或外部)头部备份中恢复头部时,卷头部和备份头部(嵌入在卷中)都会使用不同的头部密钥重新加密(使用新生成的盐值派生 - 卷头部的盐值与备份头部的盐值不同)。每个盐值都由 VeraCrypt 随机数生成器生成(请参阅 随机数生成器 部分)。
有关卷头备份的更多信息,请参阅章节 主程序窗口 中的小节 工具 > 恢复卷头
下一部分 >>

* 前提是禁用 快速格式化动态 选项,并且该卷不包含已在原地加密的文件系统(请注意,VeraCrypt 不允许用户在此类卷中创建隐藏卷)。
† 卷头的加密区域使用主头密钥和次头密钥以 XTS 模式进行加密。有关更多信息,请参阅章节 加密方案 以及章节 头密钥推导、盐值和迭代次数
S 表示卷主机的大小(以字节为单位)。
§ 请注意,盐值不需要加密,因为它不需要保密 [7](盐值是一串随机值)。
** 当使用密码级联对卷进行加密时,这里会存储多个串联的主密钥(次主密钥用于 XTS 模式)。
†† 有关在创建卷时用随机数据填充卷空闲空间的方法的信息,请参阅本节前面的内容。
‡‡ 这里,“系统加密”的含义不包括包含隐藏操作系统的隐藏卷。