1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2026-06-15 09:06:08 -05:00
Files
VeraCrypt/doc/html/zh-cn/Header Key Derivation.html
T
Mounir IDRASSI a751e75588 docs: clarify Argon2id and BLAKE2b-512 KDF usage
Document BLAKE2b-512 and Argon2id usage in the HTML/CHM user guide and Russian/Chinese translations. Clarify Argon2id's non-system scope, PBKDF2-HMAC system encryption behavior, PIM parameters, and regenerate the CHM files.
2026-06-14 18:43:46 +09:00

96 lines
8.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>VeraCrypt - 为偏执狂提供强大安全保障的免费开源磁盘加密工具</title>
<meta name="description" content="VeraCrypt是一款适用于Windows、Mac OS X和Linux的免费开源磁盘加密软件。若攻击者迫使您透露密码,VeraCrypt可提供似是而非的否认。与文件加密不同,VeraCrypt进行的数据加密是实时(即时)、自动、透明的,仅需极少内存,且不涉及临时未加密文件。"/>
<meta name="keywords" content="加密, 安全"/>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div>
<a href="Documentation.html"><img src="VeraCrypt128x128.png" alt="VeraCrypt"/></a>
</div>
<div id="menu">
<ul>
<li><a href="Home.html">主页</a></li>
<li><a href="Code.html">源代码</a></li>
<li><a href="Downloads.html">下载</a></li>
<li><a class="active" href="Documentation.html">文档</a></li>
<li><a href="Donation.html">捐赠</a></li>
<li><a href="https://sourceforge.net/p/veracrypt/discussion/" target="_blank">论坛</a></li>
</ul>
</div>
<div>
<p>
<a href="Documentation.html">文档</a>
<img src="arrow_right.gif" alt=">>" style="margin-top: 5px">
<a href="Technical%20Details.html">技术细节</a>
<img src="arrow_right.gif" alt=">>" style="margin-top: 5px">
<a href="Header%20Key%20Derivation.html">头密钥推导、盐值和迭代次数</a>
</p></div>
<div class="wikidoc">
<h1>头密钥推导、盐值和迭代次数</h1>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
头密钥用于加密和解密VeraCrypt卷头的加密区域(对于
<a href="System%20Encryption.html" style="text-align:left; color:#0080c0; text-decoration:none">
系统加密</a>,则是密钥数据区域),该区域包含主密钥和其他数据(请参阅
<a href="Encryption%20Scheme.html" style="text-align:left; color:#0080c0; text-decoration:none">
加密方案</a><a href="VeraCrypt%20Volume%20Format%20Specification.html" style="text-align:left; color:#0080c0; text-decoration:none">
VeraCrypt卷格式规范</a> 部分)。在VeraCrypt创建的卷中(以及对于
<a href="System%20Encryption.html" style="text-align:left; color:#0080c0; text-decoration:none">
系统加密</a>),该区域采用XTS模式进行加密(请参阅 <a href="Modes%20of%20Operation.html" style="text-align:left; color:#0080c0; text-decoration:none">
操作模式</a> 部分)。对于系统加密,VeraCrypt使用PBKDF2-HMAC。对于非系统卷和文件容器,VeraCrypt支持两种用于生成头密钥的密钥推导函数:PBKDF2(该方法在PKCS #5 v2.0中定义;请参阅
<a href="References.html" style="text-align:left; color:#0080c0; text-decoration:none">
[7]</a>)和Argon2id。
</div>
<h3>PBKDF2-HMAC密钥推导</h3>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
PBKDF2方法使用基于HMAC的伪随机函数,可用的哈希算法包括HMAC-SHA-512、HMAC-SHA-256、HMAC-BLAKE2s-256、HMAC-Whirlpool或HMAC-Streebog(请参阅 [8, 9, 20, 22]) — 用户可以选择使用哪种。派生密钥的长度不取决于底层哈希函数的输出大小。例如,即使使用HMAC-SHA-512AES-256密码的头密钥始终为256位长(在XTS模式下,还会使用一个额外的256位辅助头密钥;因此,AES-256总共使用两个256位密钥)。更多信息,请参阅 [7]。为了推导出头密钥,必须执行大量的密钥推导函数迭代,这增加了进行密码穷举搜索(即暴力攻击)所需的时间 [7]。
</div>
<h3>Argon2id密钥推导</h3>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
Argon2id是一种内存困难型密钥推导函数,可抵抗时间 - 内存权衡攻击和侧信道攻击。与PBKDF2-HMAC不同,Argon2id不使用单独的哈希算法选择,而是使用自己的内部哈希函数(<a href="BLAKE2b-512.html" style="text-align:left; color:#0080c0; text-decoration:none">BLAKE2b-512</a>)。Argon2id需要三个参数:内存成本(使用的内存量)、时间成本(迭代次数)和并行度(线程数)。VeraCrypt在所有情况下都将并行度参数设为1。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
两种密钥推导函数都使用512位的盐值,这意味着每个密码有2<sup style="text-align:left; font-size:85%">512</sup> 个密钥。这显著降低了对“离线”字典/“彩虹表”攻击的脆弱性(使用盐值时,为字典中的所有密码预先计算所有密钥非常困难) [7]。盐值由
<a href="Random%20Number%20Generator.html" style="text-align:left; color:#0080c0; text-decoration:none">
VeraCrypt随机数生成器</a> 在卷创建过程中生成的随机值组成。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
<p>在1.12版本之前,VeraCrypt始终使用PBKDF2-HMAC,并采用固定的迭代次数,该次数仅取决于卷类型和使用的哈希算法。
从1.12版本开始,<a href="Personal%20Iterations%20Multiplier%20%28PIM%29.html">
PIM </a>字段(<a href="Personal%20Iterations%20Multiplier%20%28PIM%29.html">个人迭代乘数</a>)使用户能够更好地控制密钥推导函数使用的计算参数。</p>
<h4>PBKDF2-HMAC参数</h4>
<p>当未指定 <a href="Personal%20Iterations%20Multiplier%20%28PIM%29.html">
PIM </a>值或该值等于零时,VeraCrypt对PBKDF2-HMAC使用以下默认值:<br/>
<ul>
<li>对于使用SHA-256、BLAKE2s-256或Streebog的系统分区加密(引导加密),使用 <strong>200000</strong> 次迭代。</li>
<li>对于使用SHA-512或Whirlpool的系统加密,使用 <strong>500000</strong> 次迭代。</li>
<li>对于非系统加密和文件容器,所有PBKDF2-HMAC变体都将使用 <strong>500000</strong> 次迭代。
</li></ul>
</p>
<p>当用户提供 <a href="Personal%20Iterations%20Multiplier%20%28PIM%29.html">
PIM </a>值时,PBKDF2密钥推导函数的迭代次数计算如下:</p>
<ul>
<li>对于不使用SHA-512或Whirlpool的系统加密:迭代次数 = <strong>PIM x 2048</strong>
</li><li>对于使用SHA-512或Whirlpool的系统加密:迭代次数 = <strong>15000 + (PIM x 1000)</strong>
</li><li>对于非系统加密和文件容器:迭代次数 = <strong>15000 + (PIM x 1000)</strong>
</li></ul>
<h4>Argon2id参数</h4>
<p>对于Argon2id,PIM值控制内存成本和时间成本。如果未指定PIM,则使用相当于PIM = 12的默认参数(416 MiB内存,6次迭代)。</p>
<p>对于Argon2idVeraCrypt会为当前卷格式派生固定的192字节头密钥材料,而不依赖于所选加密算法。随后,所选加密算法使用该派生输出中所需的前缀。例如,AES-XTS使用前64字节。实现必须先从Argon2id请求192字节,然后再选择所需前缀;如果只请求所选算法的密钥材料长度,将得到不同的Argon2id输出,因为Argon2id会把请求的输出长度纳入计算。</p>
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
级联密码中使用的头密钥相互独立,即使它们是从单个密码(可能已应用密钥文件)派生而来。例如,对于AES-Twofish-Serpent级联,头密钥推导函数会根据给定密码推导出一个768位的加密密钥(在XTS模式下,还会从给定密码推导出一个768位的
<em style="text-align:left">辅助</em> 头密钥)。生成的768位头密钥随后被拆分为三个256位密钥(在XTS模式下,
<em style="text-align:left">辅助</em> 头密钥也被拆分为三个256位密钥,因此级联实际上总共使用六个256位密钥),其中第一个密钥由Serpent使用,第二个密钥由Twofish使用,第三个密钥由AES使用(此外,在XTS模式下,第一个辅助密钥由Serpent使用,第二个辅助密钥由Twofish使用,第三个辅助密钥由AES使用)。因此,即使攻击者拥有其中一个密钥,他也无法使用该密钥推导出其他密钥,因为除了对弱密码进行暴力攻击外,没有可行的方法来确定派生该密钥的密码。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
<a href="Random%20Number%20Generator.html" style="text-align:left; color:#0080c0; text-decoration:none; font-weight:bold">下一部分 &gt;&gt;</a></div>
</div><div class="ClearBoth"></div></body></html>