Truecrypt的代码分析

Truecrypt的代码分析

 

在使用truecrypt接口的时候,实际上不需要非常了解truecrypt的源码,只需要了解truecrypt对外的接口就可以,如果调用truecrypt的接口,来实现我们想要的功能。

 

之前转载的四篇介绍truecrypt基本接口的文章,已经作了详细的说明。

     TrueCrypt原理与系统开发(1)TrueCrypt Format创建加密卷

     TrueCrypt原理与系统开发(2)TrueCrypt Mount加载虚拟磁盘

     TrueCrypt原理与系统开发(3)TrueCrypt Mount卸载虚拟磁盘

     TrueCrypt原理与系统开发(4)TrueCrypt Mount更改加密卷密码

 

truecrypt 最新版本中的部分结构体作了修改。

加载加密磁盘结构体

struct MountOptions

       bool CachePassword;    // 是否使用缓存密码

       wstring FilesystemOptions;

       wstring FilesystemType;

       shared_ptr <KeyfileList> Keyfiles;

       shared_ptr <DirectoryPath> MountPoint;

        bool NoFilesystem;

       bool NoHardwareCrypto;

       bool NoKernelCrypto;

       shared_ptr <VolumePassword> Password;

       bool PartitionInSystemEncryptionScope;

       shared_ptr <VolumePath> Path;

       bool PreserveTimestamps;

       VolumeProtection::Enum Protection;

       shared_ptr <VolumePassword> ProtectionPassword;

       shared_ptr <KeyfileList> ProtectionKeyfiles;

       bool Removable;

       bool SharedAccessAllowed;

       VolumeSlotNumber SlotNumber;

       bool UseBackupHeaders;

 

创建加密磁盘的结构体

struct VolumeCreationOptions

    {

       VolumePath Path;  // 分区名

       VolumeType::Enum Type; // 普通分区还是掩藏分区

       uint64 Size;         // 分区大小

       shared_ptr <VolumePassword> Password;//密码

       shared_ptr <KeyfileList> Keyfiles; //

       shared_ptr <Pkcs5Kdf> VolumeHeaderKdf; // 哈希算法

       shared_ptr <EncryptionAlgorithm> EA;   // 加密算法

       bool Quick;                            // 是否快速格式化

 

       struct FilesystemType                  // 格式

       {

           enum Enum

           {

              Unknown = 0,

              None,

              FAT,

              NTFS,

              Ext2,

              Ext3,

              Ext4,

              MacOsExt,

              UFS

           };

 

 

       FilesystemType::Enum Filesystem;   // 类型,是文件或者是磁盘分区

       uint32 FilesystemClusterSize;// 族大小

       uint32 SectorSize;          // 扇区大小

 

 

truecrypt加密算法介绍

 

truecrypt中的加密算法

AES

Serpent

Twofish

AESTwofish

AESTwofishSerpent

SerpentAES

SerpentTwofishAES

TwofishSerpent

 

哈希算法

AESBlowfish

AESBlowfishSerpent

Blowfish

Cast5

TripleDES

cryto中,我们可以看到有

Aes,Blowfish,Cast5,TripleDes,Serpent,Twofish这几种加密算法。而上面这么多的加密算法,就是把这几种加密算法结合一起使用。

AESAdvanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;

BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;

CAST-128(Cast):是一种类似于DES的置换组合网路(Substitution-PermutationNetworkSPN)加密系统,对于微分密码分析、线性密码分析、密码相关分析具有较好的抵抗力

TripleDES(三重DES):数据加密算法(Data Encryption AlgorithmDEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。

Serpent:是 Ross Anderson, Eli Biham 和 Lars Knudsen 开发的块加密算法. Serpent 可以使用不同的密钥长度. Serpent 也是高级加密标准 (AES)的5个候选之一.

Twofish:Twofish 则是counterpane 公司向NIST提交的一种满足AES 要求的加密算法。Twofish 采用128位数据块(128 bits block),128- 192- 256-bit 可变长度密钥

 

70年代以来DES是美国政府所采用的加密标准,但DES使用的56位密钥过短,随着电脑计算能力的不断提高,已经越来越不安全了,以现代计算能力,24小时内即可能破解DES
90年代中期,美国国家标准与技术研究院(NIST)开始考虑用高级加密标准(Advanced Encryption Standard AES)替代DES
AES
是采用公开竞标的,NIST的要求是:候选算法使用128bit的区块;候选算法必须使用最小128bit长度的密钥,并且可以向上扩大,且可以使 用128192256bit密钥;候选算法要足够快,最好和DES算法差不多快;候选算法必须免费,没有知识产权约束。可以提名专利算法,但是如果被 选,必须成为免费使用许可。
最初有约15种算法被提交作为AES的候选算法,经过长时间筛选,NIST测试的算法减少到5个,分别为RijndaelSerpent TwofishMARS RC6
再次筛选后还剩Rijndael、Serpent、Twofish,这三种算法各有长短,Serpent被认为最安全,而Rijndael速度 最快,Twofish则居中。
最后NIST选择了Rijndael作为AES的算法

 

 

加密模式

所谓模式,就是方法,就是加密的方法,既然是对称加密,解密方法也包括在内了。在分组密码理论上,简单的说就是一个分组经过加密,产生一个对应的分组密 文,至于如何加密,没有限制,模式就对应这里的如何加密,从A点到B点,我们可以有多种走法,供君选择,可以是直接AB,也可以是AC再到B。在 软件结构上也常如此,上层可能不需要知道底层如何工作,下层也不认识上层,各自做自己的分内事就好了。不知道设计者是否就是出于这样的考虑,才提出这样的 概念。正如哲学所说:机制与策略分离,果真如此。为什么今天才想通,怪!可能是把加密算法(cipher algorithm)与模式(mode)弄混了吧。模式中会用到加密算法,加密算法属于模式中的一个环节。常见的分组加密算法有: DES3DESAES。它们都有可与之搭配的模式

CBC(Cipher Block Chaining)

A. 所有分组使用同一密钥;但是,加密算法的输入是本次分组明文与前次密文的异或(第一次需要IV),这就克服了ECB相同明文产生相同密文的缺陷。

B. 加密函数加密,解密函数解密。

 

 

哈希算法

Ripemd160

Sha512

Whirlpool

哈希算法将任意长度的二进制映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。

 

RIPEMD:顾名思义RIPEMD就是成熟md算法,是Hans Dobbertin3人在md4,md5的基础上,于1996年提出来的。算法共有4个标准128160256320,其对应输出长度分别为16 字节、20字节、32字节和40字节。不过,让人难以致信的是RIPEMD的设计者们根本就没有真正设计256320位这2种标准,他们只是在128位 和160位的基础上,修改了初始参数和s-box来达到输出为256320位的目的。所以,256位的强度和128相当,而320位的强度和160位相 当。RIPEMD建立在md的基础之上,所以,其添加数据的方式和md5完全一样。

 

你可能感兴趣的:(算法,加密,解密,encryption,代码分析,磁盘)