DES3加密仿真结果:
解密仿真结果:
用软件验证结果正确。
DES:
明文/密文:64bits;
秘钥:56bits+8bits(校验值)
1. 64bits初始P置换,然后拆分为两个32bits,Li,Ri;
Ri=Li-1f(Ri-1,Ki)
Li=Ri-1
2. f运算f(Ri-1,Ki)
f(A,J):A为32bit,J是48bit;
①A扩展为48bits,即4 bit转换成6 bit;
②E(A)J=B B=B1B2..B7B8,B1是6bit
③S盒(4 * 16),b1b6 * b2b3b4b5 确定的二进制数(<16,只需要4bits即可,所以48转换为32bits)
S1盒子
④P盒置换得到另外32bits Li-1= Ri
3. 轮秘钥算法
56bits拆分为两部分Ci,Di;
Ci=Ci-1左移
Di=Di-1左移(移动位数除了1.2.9.16时候左移一位外,其他均移动两位)
左右结合后得到的56bits 在经过压缩置换为48bits,即得到每轮的秘钥。
计算:
Ri=Li-1f(Ri-1,Ki)
Li=Ri-1
最后这样得到最终的密文
RSA加密
a、RSA是非对称加密算法,公开秘钥,利用私密解密。
涉及到的数学知识主要有:
1.互质:互质,公约数只有1的两个整数,例子,(5,13),(1,10)互质,(2,4)不是互质;
2.模指数运算
(模运算:10 mod(3) = 1,1 mod (3) = 1 )
b、RSA 主要运算流程:
(1) 选择一对不同的,足够达标的素数p,q;
(2) 计算n=pq;
(3) 计算f(n)=(p-1)(q-1);
(4) 找一个与f(n)互质的数e(不是2.7....);1<e<f(n)
(5) de^-1 mod (f(n)) ;是指同余数;
(6) 公钥KU=(e,n),私钥KR=(d,n);
(7) 加密:C=m^e mod n;
(8) 解密:M=c^d mod n
优点:n=pq,已知n ,很难求出pq,(当n很大时候,需要计算机很长预案算时间)
缺点: 产生密钥麻烦;速度慢,只能使用少量数据加密,大量数据加密还是得靠对称算法。
AES加密
输入明文128 bits ,写成4 * 4 的数组 (每个元素一个字节)
秘钥可选择,一般为128,192,256 bits
明文加密步骤:
(1)字节替换 SubByte (s盒,仿射变换)
(2)行移位变换(ShiftRows);
(3)列混合变换(MixClolums);
(4)得到的结果Roundkey = 密文;128对应10轮,192->12轮,256->14轮;
轮秘钥扩展:其长度由加/解密轮数决定
(有两个函数 RotWord,SubWord)
TEA 加密
明文/密文 64 bits ,秘钥128bits ,一般Round=32,64
计算过程了主要使用到一个常数:0x9e377b9,为防止易破解,改为sub变量,0x61c88647替换,主要用于网上的协议加密,存储数据的简单加密;(网传QQ会使用的就是这种算法)
MD5加密 、SHA-1
明文一般要补位(1.......00000, 所以补位最后应该是0x80,00,00),密钥即四个参数
可用作数字认证和数据加密,得到的是一个hash值。
(1) 补位,使明文对64求余等于56;
(2) 附加刷具长度64bits=8Bytes,所以一共(k+1)*64bits;
(3) 初始化MD5四个参数
(4) 定义四个按位操作运算函数 :F,G,H,I;并且定义四轮变换函数FF,GG,HH,II;
F(x.y.z)=(x and y) or (-x and z )
FF(a,b,c,d,Mj,s,ti):a = b+ ((a+ (F(b,c,d)))+Mj+ti <<<S
(5) 处理数据:64Bytes 用十六个4字节单位 定义数组M[16],T[1..64]是常数;
(6) 数据结果:abcd 连续存放,得到16Bytes
1、MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?这里简单说一下:
(1)MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD是 Message Digest的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。
(2) MD5
MD5(RFC 1321)是 Rivest于1991年对MD4的改进版本。它仍以512位分组来输入,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好
(3)SHA1 及其他
SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
2、Windows系统下的hash密码格式
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示
用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
(1)Windows下LM Hash值生成原理
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000
技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。
说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密
"KGS!@#$%" -> 4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
(2) Windows下NTLM Hash生成原理
从IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash应运而生。假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节
"123456" -> 310032003300340035003600
从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串"KGS!@#$%"。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。
3、比较LM 、 NT:
两种加密算法分别是LanManager(LM)和NTLM,LM只能存储小于等于14个字符的密码hash,如果密码大于14个,windows就自动使用NTLM对其进行加密了,(这个在LC5里有两种破解方式,所以破解不出来的时候可以换种思路,基本是NTLM的)一般情况下使用PwDump或其他一些hash导出工具(如Cain)导出的hash都有对应的LM和NTLM值,也就是说这个密码位数<=14,如果大于14位那么就只有对应的NTLM hash可用了,这时LM也会有值,但对我们来说没用,不能靠他来查LM彩虹表。
操作系统:对于XP、win2k和win2k3来说,系统默认使用LM进行加密(也可人为设置成NTLM),之后的win2008、win7和Vista禁用了LM,默认使用NTLM,所以不要拿着LM生成的rainbow table去找NTLM的hash值,但是反过来却可以,因为使用LM方式的加密往往会存在一个对应的NTLM hash(如果密码位数<=14的话,系统同时对这个密码使用NTLM加密并存储了NTLM的hash),这时候使用ophcrack的NTLM表查找的就是这个NTLM的hash了,而不是LM的hash。