VeraCrypt

VeraCrypt是一款开放源代码的即时加密软件（OTFE）。它可以创建一个虚拟加密磁盘文件或加密分区，或预引导认证整个存储设备（除非使用了UEFI或GPT）。

VeraCrypt是已经停止开发的TrueCrypt项目的一个分支。据其开发者声称，安全方面的改进已经落实，最初TrueCrypt的代码审计问题已得到解决。

## 加密方式

### 算法

与TrueCrypt相同，VeraCrypt支持的加密算法有AES、Camellia、Kuzenyechik、Serpent及Twofish。此外，另有十种多重加密方式：AES-Twofish，AES-Twofish-Serpent，Serpent-AES，Serpent-Twofish-AES，Twofish-Serpent，Camellia-Kuzenyechik，Kuzenyechik-Twofish，Camellia-Serpent，Kuzenyechik-AES及Kuzenyechik-Serpent-Camellia。可使用的密码散列函数有RIPEMD-160，SHA-256，SHA-512，Whirlpool（加密算法）和Streebog。

### 操作模式

VeraCrypt使用XTS操作模式。

### 密匙

软件头密匙（header key）和第二头密匙（the secondary header key）是使用512-位盐和327,661至655,331迭代的PBKDF2产生的，这取决于其使用的底层散列函数。

## 安全性改进

据其开发者声称，VeraCrypt对TrueCrypt提出了一些安全方面的改进。

虽然TrueCrypt使用1000次迭代的PBKDF2-RIPEMD160算法的系统分区，然而VeraCrypt使用的是327,661次迭代。对于标准储存器和其他分区，VeraCrypt使用655331次迭代的RIPEMD160和500,000次迭代SHA-2和Whirlpool。虽然这使得VeraCrypt在打开被加密分区时稍慢，但它可以让密码破解增加最少10倍和最多约300倍的的难度。“事实上，如果破解TrueCrypt的加密分区需要一个月，那么破解VeraCrypt可能需要一年。”

Windows在引导程序中的漏洞也是如此。开发人员增加了对SHA-256的系统启动加密选项，还修正了Shell的安全问题。Linux和Mac OS X用户受益于硬盘驱动器扇区大小大于512的支持，并且Linux得到了NTFS格式加密扇区的支持。

由于安全性改进，因此VeraCrypt存储格式是与TrueCrypt不兼容的。VeraCrypt开发团队认为，TrueCrypt的旧格式容易受到美国国家安全局的攻击，因此它必须被抛弃。这是和VeraCrypt的竞争对手——CipherShed之间的主要区别之一，CipherShed继续使用了TrueCrypt加密格式。自版本1.0F开始，VeraCrypt开始支持打开及转换TrueCrypt的旧格式加密卷。

## 似是而非的否认

VeraCrypt支持一种名为“似是而非的否认”的功能，允许在卷内创建另一个“隐藏驱动卷”。此外，Windows版本的VeraCrypt可以创建并运行一个隐藏的加密操作系统，其存在可以被否认。该功能使用户在受到胁迫时通过展示无关紧要的外层卷，而使内层隐藏卷蒙混过关。

VeraCrypt帮助文档中列出多种方式写明当该功能受到影响时（例如第三方软件可能通过临时文件、缩略图等向未加密的磁盘分区泄露信息），几种可能的方法来避免这种情况。

## 性能

VeraCrypt支持多元处理并行加密，在Windows系统中，流水线型读写操作（异步处理的一种形式）以提高加密解密的性能效率。该软件在较新的处理器支持AES-NI指令集，亦支持AES硬件加速以进一步提高性能。磁盘加密对性能的影响在使用直接内存访问（Direct Memory Access，DMA）操作中尤其明显，因为所有数据必须通过CPU进行解密，而不是直接从磁盘复制到内存。

## 安全问题

VeraCrypt很容易受到各种已知的攻击，也影响到其他基于软件的磁盘加密软件，如BitLocker。为了缓解这些攻击，VeraCrypt的帮助文档要求用户遵守各种安全防范措施。一些安全问题详述如下：

### 内存中的加密密匙

VeraCrypt存储其在内存中的密匙。普通个人计算机上对动态内存断电后的几秒钟（或更长，如降低温度）之后可能仍然保留着数据。即使在内存中的数据已经严重丢失，仍有各种算法可以恢复密钥。这种方法被称为冷启动攻击，特别适用于在接入电源时，闲置或锁屏模式下的笔记本电脑，现已成功地用于攻击由TrueCrypt加密保护的文件系统。

### 物理安全性

VeraCrypt帮助文档指出，如果攻击者物理攻击计算机中的数据，或者在受感染的电脑上使用该软件，VeraCrypt也无法保全其加密数据的完整性。当然电脑被盗，遗失或被没收这样的情况自然无能为力。当攻击者通过物理访问电脑，例如，安装一个硬件或软件的键盘记录器或一个总线主控装置捕获内存信息，或安装任何其他恶意硬件或软件的攻击，让攻击者捕捉到未加密的数据（包括加密密钥和密码），然后以这些非法得到的加密密匙及密码进行解密。因此，物理安全是一个完善安全系统的基本前提。这种攻击方式也一般称之为“邪恶女佣攻击”（Evil Maid attack）。

### 恶意软件

VeraCrypt帮助文档指出，VeraCrypt无法保护被感染某些恶意软件类型的电脑上的数据。某些类型的恶意软件被设计用来记录键盘输入，包括键入的密码，攻击者也可以通过互联网上传或保存到未加密的本地驱动器后读取它，或者直接物理访问计算机时。

### 可信平台模块

VeraCrypt网站上的FAQ指出，可信平台模块（Trusted Platform Module，TPM）的安全性并不可靠。因为如果攻击者具有对计算机的物理管理访问权限时，电脑可能被攻击者植入恶意程序，如一个简单的键盘按键记录器等，可以被用来捕捉密码或其他敏感信息。——TPM并非杀毒软件，并不会防止攻击者恶意修改计算机，因此VeraCrypt将不支持TPM。

## 安全审计

VeraCrypt正在进行一次独立的代码审核，目前正处于初期规划阶段。

VeraCrypt是基于TrueCrypt开发的，通过独立的安全审计。审计的第一阶段已于2014年4月14日完成，结果为“没有证据证明该软件有后门或恶意代码”。审计的第二阶段完成于2015年4月2日，结果为“没有证据表明该软件有故意后门，或在大多数情况下将使软件不安全的严重设计缺陷”。

## 许可证

VeraCrypt从2015年6月28日起采用Apache 2.0许可证授权。在此之前，它是以微软公共许可证（Microsoft Public License）发布的。VeraCrypt使用了大量从其前身TrueCrypt得到的代码，也是唯一一款使用 TrueCrypt License 3.0 的加密软件。然而这并不是一个广泛使用的开源软件许可证，也不是自由软件基金会定义的自由软件许可证，因为它包含分销和版权责任的限制等。

## 基本资料

- 开发者：IDRIX
- 发行日期：2013年6月22日
- 状态：活跃
- 编程语言：C、C++、汇编语言
- 操作系统：Windows XP及更高版本、Windows Server 2003–2012、macOS 10.7及更高版本、Linux、FreeBSD
- 语言：37
- 类型：硬盘加密软件
- 许可协议：Apache License 2.0 但受限于 TrueCrypt License version 3.0