
LibTomCrypt
文章平均质量分 60
艾米的爸爸
密码算法技术及应用行业10+年从业经验。
展开
-
正在学习LibTomCrypt,将陆续更新学习笔记
为了督促自己认真学习LibTomCrypt,准备边学习边把学习笔记整理后放上来。LibTom 项目包括开放来源公共领域软件由Tom St Denis(tomstdenis@gmail.com,http://libtom.org)用标准C语言写成。详情参见http://libtom.org/?page=features&whatfile=cryptLibTom类库包主要有四原创 2012-10-25 11:27:40 · 53117 阅读 · 1 评论 -
密码库LibTomCrypt学习记录——(2.19)分组密码算法的工作模式——LRW磁盘加密模式
LRWLRW算法的相关信息是通过分析LibTomCrypt的LRW得到。LRW也是一种磁盘加密模式。IEEE P1619在2006前使用的还是LRW-AES模式,但在2006年后,由于某些安全原因,LRW-AES被XTS-AES代替。具体情况可以在IEEE的官方网站上查询。LRW是可调密码(tweakable block cipher)。LRW也用到了有限域GF(2^128),生成多项式和G...原创 2019-01-02 09:53:21 · 17517 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.18)分组密码算法的工作模式——XTS代码
Test_XTS_AES.h文件代码如下#ifndef _TEST_XTS_AES_H#define _TEST_XTS_AES_Htypedef unsigned __int64 ulong64;//When encrypting tweak value using AES, the tweak is first converted into a little-endian byt...原创 2019-01-02 09:49:40 · 33514 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.17)分组密码算法的工作模式——XTS磁盘加密模式
XTS 存储加密磁盘加密通常使用特殊目的、专门设计的模式。可以调节的小数据块加密模式(LRW,XEX和XTS)和大数据块的模式(CMC和EME)是设计用于加密磁盘区块的。另外几种工作模式可能会在后面介绍。在对磁盘的加密中,通常一个扇区大小为512 Byte。加密时将要写入扇区的明文数据进行加密,然后存储到扇区上。解密时,希望能直接读取到一个扇区上的信息进行解密。我的理解是,存储加密的基本要...原创 2019-01-02 09:48:25 · 16421 阅读 · 2 评论 -
密码库LibTomCrypt学习记录——(2.16)分组密码算法的工作模式——GCM代码示例
以下代码根据LibTomCrypt的对应测试代码,做相应的调整和注释。include <Windows.h>#include "tomcrypt.h"int gcm_memory2( int cipher, const unsigned char *key, unsigned long keylen,...原创 2018-12-26 14:32:22 · 11178 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.15)分组密码算法的工作模式——GCM加密认证模式
GCMGCM是一种有大吞吐能力的加密认证模式。其中主要适用了CRT模式和类似CBC模式的GHASH模式。CRT模式基本上没有大多变化,GHASH则是利用有限域上的乘法进行HASH,此运算可以通常预先计算和查表优化加速。GCM两个基本模块 GHASH和GCTR。加解密和认证验证过程都离不开这两个模块。参考文献NIST SP 800-38D The Galois Counter Mod...原创 2018-12-26 14:29:07 · 21386 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.14)分组密码算法的工作模式——CCM代码示例
#include "tomcrypt.h"#include "TestMode.h"//test , use nist test vectortypedef struct NistCCMTestVector_st{ char * name;//test vetor name int keylen; int msglen;...原创 2018-12-26 14:21:55 · 21804 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.13)分组密码算法的工作模式——CCM加密认证模式
CCMCCM是加密认证模式,CCM = CTR加密 + CBC-MAC认证。CCM模式看起来比较繁琐,尤其在参数的哦选择上,限制不断。很可能在将来某天被别的方法替代。参考文献NIST SP 800-38C.加密与MAC生成流程准备:加密算法CIPHER 密钥K; counter generation函数 formatting函数 MAC的比特长度Tlen输入随...原创 2018-12-26 14:18:59 · 67641 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.12)分组密码算法的工作模式——OMAC认证模式
OMACOMAC是一种认证模式,LibTomCrypt中涉及的OMAC,而NIST中提到的是CMAC。它们之间的关系是这样的:为避免基本的MAC算法CBC-MAC存在的安全缺陷,Black和Rogaway对其进行了改进,提出了避免CBC-MAC安全缺陷的XCBC算法。Iwata和Kurosawa对XCBC进一步改进,提出了One-Key CBC-MAC(OMAC),接着又精益求精地提出了OM...原创 2018-12-26 14:14:12 · 64649 阅读 · 5 评论 -
密码库LibTomCrypt学习记录——(2.20)分组密码算法的工作模式——LRW代码示例
//#include <Windows.h>#include "tomcrypt.h"#include "TestMode.h" typedef struct NistLRWTestVector_st{ unsigned char key[16]; unsigned char tweak[16]; unsigned char I...原创 2019-01-02 09:53:42 · 15096 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.21)分组密码算法的工作模式——F8加密模式
F8F8和F9用在3G安全中的是机密性算法(f8)和完整性算法(f9),两者都是基于KASUMI算法构造。f8是变形的OFB模式的序列密码;而f9则是变形CBC-MAC模式的消息认证码。KASUMI算法是日本三菱的Matsui等人基于MISTY算法设计的分组密码。分组大小64bit,密钥长度128bit。由于算法内部大量的使用了16bit的运算,因此最适合16bit处理器实现。 F8...原创 2019-01-02 09:53:46 · 50970 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.29)分组密码算法的工作模式——KeyWrap密钥封装模式
密钥封装(Key Wrap)密钥封装是为了对密钥进行保护,比如密钥存储在不太安全的存储设备中,或者密钥需要在网络中传输。早在2001年,NIST就发布了AES Key Wrap Specification。2002年,IETF在RFC 3394中也描述了密钥封装算法AES-KeyWrap Algorithm,电信行业协会发布了使用TDES的密钥封装算法。2008年,美国标准认可委员会(Acc...原创 2019-01-03 10:42:23 · 22420 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.28)分组密码算法的工作模式——OCB代码示例
#include "tomcrypt.h"typedef struct NistOCBTestVector_st{ char * name;//test vetor name int ptlen; unsigned char key[16]; unsigned char nonce[16]; unsigned char pt[34]; ...原创 2019-01-03 10:42:12 · 53565 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.27)分组密码算法的工作模式——OCB认证加密模式
OCBOCB是由Phillip Rogaway教授等人设计的一种认证加密模式。到目前为止它已有三个版本:OCB1(2001年)、OCB2(2003年)和 OCB3(2011年)。其中,OCB1 是IEEE 802.11i 的可选工作模式之一(也叫WRAP);OCB2 是ISO/IEC 19772:2009提及的标准之一。有鉴于此,关于OCB的文章比较多,需注意区别。按照OCB主页上的说法,OCB...原创 2019-01-02 09:54:09 · 57538 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.26)分组密码算法的工作模式——EAX代码示例
#include "tomcrypt.h"typedef struct NistEAXTestVector_st{ char * name;//test vetor name int keylen; int noncelen; int headerlen; int msglen; unsigned char key[MAXB...原创 2019-01-02 09:54:05 · 10835 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.25)分组密码算法的工作模式——EAX加密认证模式
EAXEAX是一种加密认证模式,它可以对消息明文进行加密,同时对消息明文和关联信息(Associated Data)进行认证,当然此关联信息也可以为空。EAX由Mihir Bellare等人在2003年提交给NIST,其目的是希望取代现在的CCM标准。因为相较之下,EAX有更好的表现,而CCM显得较为复杂。但到目前为止,EAX还没有取代CCM。EAX参考文献Mihir Bellare, ...原创 2019-01-02 09:54:01 · 22759 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.24)分组密码算法的工作模式——F9代码示例
//#include <Windows.h>#include "tomcrypt.h"#include "TestMode.h" int Test_F9_KASUMI(void){ static const struct { int msglen; unsigned char K[16], M[128], T[4]; } t...原创 2019-01-02 09:53:57 · 17073 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.23)分组密码算法的工作模式——F9认证模式
F9F8和F9用在3G安全中的是机密性算法(f8)和完整性算法(f9),两者都是基于KASUMI算法构造。f8是变形的OFB模式的序列密码;而f9则是变形CBC-MAC模式的消息认证码。KASUMI算法是日本三菱的Matsui等人基于MISTY算法设计的分组密码。分组大小64bit,密钥长度128bit。由于算法内部大量的使用了16bit的运算,因此最适合16bit处理器实现。 F9...原创 2019-01-02 09:53:53 · 16330 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.22)分组密码算法的工作模式——F8代码示例
//#include <Windows.h>#include "tomcrypt.h"#include "TestMode.h" int Test_F8_AES(void){ static const unsigned char key[16] = { 0x23, 0x48, 0x29, 0x00, 0x84, 0x67, 0xbe, 0x18...原创 2019-01-02 09:53:49 · 52259 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.11)分组密码算法的工作模式——CTR代码示例
以下代码实现了CBC的正确性测试(标准测试数据)说明:1. 代码里面使用了一个Str2Num函数,它将测试向量中的字符串转为十六进制字节数据,可自行实现。2. 测试向量出处为NIST SP 800-38A (Recommendation for Block Cipher Modes of Operation:Methods and Techniques)--------------...原创 2018-12-08 22:32:44 · 53517 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.9)分组密码算法的工作模式——OFB代码示例
OFB加密文件示例//#include <Windows.h>#include <stdio.h>#include <stdlib.h>#include "tomcrypt.h"#include "TestMode.h"//#include "Test_ECB_AES.h"void UserIO(char * p_print, ..原创 2018-12-07 10:51:26 · 54161 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(1.5)分组密码算法——示例代码AES-ECB
以下代码实现了AES-ECB的正确性测试(标准测试数据),以及性能测试说明:1. 代码里面使用了一个Str2Num函数,它将测试向量中的字符串转为十六进制字节数据,可自行实现。2. 测试向量出处为NIST SP 800-38A (Recommendation for Block Cipher Modes of Operation:Methods and Techniques)@@...原创 2018-12-05 10:22:22 · 18084 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(1.4)分组密码算法——AES-NI指令与AES的速度
英特尔在比较新的CPU上提供了AES-NI指令,可以直接调用这些指令来进行AES加解密。关于此指令的速度提升情况,各方反应不一,最高有说提高17倍的,有说提高8-9倍左右的,还有说提高一半左右的。这可能和各人的测试平台和倾向都不一样,因此结果各有差别。 CPU是否支持AES-NI可以使用英特尔AES-NI白皮书中的函数检测。白皮书中所述检测为:checking CPUID.01H:...原创 2018-12-05 10:03:15 · 16018 阅读 · 2 评论 -
密码库LibTomCrypt学习记录——(1.3)分组密码算法——AES算法的函数和使用流程介绍
LibTomCtypt中AES的描述子有两个,rijndael_desc和aes_desc,这二者除了name有区别外别的都一样,因此aes和rijndael是等效的。注意:VC编译AES的时候记得将aes_table.c设置为“exclude file from build”,别的带_table的c文件类似。“exclude file from build”的设置方式为:右键点击aes_ta...原创 2018-12-05 10:01:36 · 66574 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(1.2)分组密码算法——使用前注册算法register_cipher
在使用某个密码算法前需要先注册,然后才能使用。密码算法索引值的获取步骤步骤1. 利用int register_cipher(const struct ltc_cipher_descriptor *cipher)注册算法 步骤2. 利用int find_cipher(const char *name)获取已注册的密码算法索引值 步骤3. 使用完毕后利用int unregister_ciphe...原创 2018-12-05 09:59:58 · 56124 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(1.1)分组密码算法——算法描述子cipher_descriptor
LibTomCtypt中为密码算法定义了一个算法描述子cipher_descriptor,可以把它理解为一个类,里面描述了密码算法应该有的变量和函数操作。密码算法描述子的详细描述可以参见tomcrypt_cipher.hextern struct ltc_cipher_descriptor { char *name; // 密码算法名,最后一个会被置为NUL...原创 2018-12-05 09:58:41 · 11827 阅读 · 1 评论 -
密码库LibTomCrypt学习记录——(1.0)分组密码算法——概述
密码算法是用于加密和解密的数学函数,密码算法是密码协议的基础。现行的密码算法主要包括序列密码、分组密码、公钥密码、散列函数等,用于保证信息的安全,提供鉴别、完整性、抗抵赖等服务。 一些常见分组密码算法简介。DES 数据加密算法(Data Encryption Algorithm)是一种分组加密算法。DES由IBM公司在20世纪70年代开发并公开,随后为美国政府采用,并被美国国家标准局...原创 2018-12-05 09:57:14 · 11092 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(0)LibTomCrypt简介
LibTom系列是加拿大的汤姆St. 丹尼斯用标准C语言写成,该系列库包四个组成部分:LibTomMath、 LibTomCrypt、 LibTomNet,和 LibTomPoly。LibTomMath和LibTomCrypt是最成熟的组成部分。LibTom系列地址是:http://www.libtom.org/LibTomCrypt是一个简单易用的加密工具,它提供给开发者相当多的大家熟悉的分...原创 2018-12-05 09:50:25 · 18841 阅读 · 2 评论 -
LibTomCrypt学习笔记——工作模式——OMAC
介绍OMAC是一种认证模式,CMAC is an essentially the One-Key CBC-MAC (OMAC)。NIST官网的介绍如下。The CMAC authentication mode is specified inSpecial Publication 800-38B for use with any approved block cipher.CMAC st原创 2012-10-25 11:58:12 · 25035 阅读 · 1 评论 -
密码库LibTomCrypt学习记录——(2)分组密码算法的工作模式
密码算法的工作模式就是怎样使用密码算法来达到一定的目的,比如怎样加密一个文件。工作模式有很多种,仅用于加密的,用来构造HASH函数的,仅用于生成消息验证码的,用于伪随机数生成的,既能加密又能同时生成验证码的,专门针对磁盘加密的……后续将更新常见和某些特殊用途的模式,比如ECB CBC CFB OFB CTR OMAC GCM CCM XTS LRW F8 F9...原创 2018-12-05 10:30:21 · 23633 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.1)分组密码算法的工作模式——概况
密码算法的工作模式就是怎样使用密码算法来达到一定的目的,比如怎样加密一个文件。工作模式有很多种,仅用于加密的,用来构造HASH函数的,仅用于生成消息验证码的,用于伪随机数生成的,既能加密又能同时生成验证码的,专门针对磁盘加密的……很多工作模式都已经被标准化了,这其中影响最广的应该算是NIST了,其他相关标准化组织有ISO/IEC、IEEE、ANSI、IETF……以下列举其中一部分。NIS...原创 2018-12-07 10:21:24 · 61872 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.7)分组密码算法的工作模式——CFB代码示例[暂缺]
CFB代码示例暂未提供,后续更新总的来说与别的基本模式相同原创 2018-12-07 10:49:26 · 66027 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.5)分组密码算法的工作模式——CBC代码示例
以下代码实现了CBC的正确性测试(标准测试数据)说明:1. 代码里面使用了一个Str2Num函数,它将测试向量中的字符串转为十六进制字节数据,可自行实现。2. 测试向量出处为NIST SP 800-38A (Recommendation for Block Cipher Modes of Operation:Methods and Techniques)#include "tomc...原创 2018-12-07 10:42:22 · 15353 阅读 · 1 评论 -
密码库LibTomCrypt学习记录——(2.3)分组密码算法的工作模式——ECB代码示例
以下代码实现了AES-ECB的正确性测试(标准测试数据),以及性能测试说明:1. 代码里面使用了一个Str2Num函数,它将测试向量中的字符串转为十六进制字节数据,可自行实现。2. 测试向量出处为NIST SP 800-38A (Recommendation for Block Cipher Modes of Operation:Methods and Techniques)@@...原创 2018-12-07 10:39:42 · 18064 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.10)分组密码算法的工作模式——CTR模式
CTR是对序列号加密后与明文或者密文异或。这种方式被后面的很多工作模式所采用。参考文献NIST SP 800-38ACTR加解密CTR加密记每个块用到的计数器为T1,T2,Tn,要求每个计数器值各不相同Oj = CIPHK(Tj) for j = 1, 2 … n;Cj = Pj ⊕ Oj for j = 1, 2 … n-1;C*n = P*n ⊕ MSBu(On)....原创 2018-12-07 10:34:13 · 64858 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.8)分组密码算法的工作模式——OFB模式
OFB是一种加密模式。CFB和OFC工作模式中,密码算法象流密码一样生产出密钥流供异或名密文用。参考文献NIST SP 800-38AOFB加解密OFB 加密I1 = IV;Ij = Oj -1 for j = 2 … n;Oj = CIPHK(Ij) for j = 1, 2 … n;Cj = Pj ⊕ Oj for j = 1, 2 …...原创 2018-12-07 10:33:15 · 21741 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.6)分组密码算法的工作模式——CFB模式
CFB是一种加密模式。密文被反馈当寄存器中为下一个块服务。CFB和OFC工作模式中,密码算法象流密码一样生产出密钥流供异或名密文用。参考文献NIST SP 800-38ACFB加解密记:b为分组的比特大小,比如AES时b=128; s为寄存器中保留上P一个密文的比特长度,1<=s<=b;s通常为1、8、64、128。 P#j ,C#j是明文和密文的一个片段,长s比特...原创 2018-12-07 10:30:08 · 23965 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.4)分组密码算法的工作模式——CBC模式
CBC是一种加密模式,它将密文象链子一样串起来。CBC是后面介绍的很多工作模式的基础,很多新的模式,特别是带认证的模式大部分使用了CBC这种链式结构。参考文献NIST SP 800-38ACBC加解密初始化向量IV,明文P,密文CCBC加密: Cj = CIPHK(Pj ⊕ Cj-1) for j = 1 … n,记C0 = IVCBC解密: Pj = CIPH-1K(Cj...原创 2018-12-07 10:27:17 · 22275 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——(2.2)分组密码算法的工作模式——ECB模式
ECB(Electronic Codebook mode)是加密模式,加解密比较简单。各个块之间相互独立,互不影响,因此便于并行计算。参考文献NIST SP 800-38AECB加解密ECB 加密: Cj = CIPHK(Pj) for j = 1 … n.ECB 解密: Pj = CIPH -1K(Cj) for j = 1 … n.ECB模式需要用到解密函数。...原创 2018-12-07 10:22:56 · 16631 阅读 · 0 评论 -
密码库LibTomCrypt学习记录——目录
(0)LibTomCrypt简介(1)分组密码算法——概述(1.1)分组密码算法——算法描述子cipher_descriptor (1.2)分组密码算法——使用前注册算法register_cipher (1.3)分组密码算法——AES算法的函数和使用流程介绍 (1.4)分组密码算法——AES-NI指令与AES的速度 (1.5)分组密码算法——示例代码AES-ECB(2)分组密码算...原创 2019-03-08 11:52:21 · 122541 阅读 · 1 评论