常见加密算法浅析

DES3加密仿真结果:

 

解密仿真结果:

 

用软件验证结果正确。

DES

明文/密文:64bits

秘钥:56bits+8bits(校验值)

1. 64bits初始P置换,然后拆分为两个32bitsLi,Ri

Ri=Li-1f(Ri-1,Ki)

Li=Ri-1

2. f运算f(Ri-1,Ki)

fA,J:A32bitJ48bit;

①A扩展为48bits,即4 bit转换成6 bit

②E(A)J=B B=B1B2..B7B8,B16bit

③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加密

aRSA是非对称加密算法,公开秘钥,利用私密解密。

涉及到的数学知识主要有:

1.互质:互质,公约数只有1的两个整数例子,(5,13),(110)互质,(2,4)不是互质;

2.模指数运算

(模运算:10 mod3) = 11 mod (3) = 1 

bRSA 主要运算流程:

(1) 选择一对不同的,足够达标的素数p,q

(2) 计算n=pq;

(3) 计算fn=(p-1)(q-1);

(4) 找一个与fn)互质的数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,已知,很难求出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轮;

轮秘钥扩展:其长度由加/解密轮数决定

(有两个函数 RotWordSubWord

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) 定义四个按位操作运算函数 :FGHI;并且定义四轮变换函数FFGGHHII

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

1MD5  SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?这里简单说一下:

    1MD4

    MD4(RFC 1320) MIT  Ronald L. Rivest  1990 年设计的,MD Message Digest的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。

    2) MD5

    MD5(RFC 1321) Rivest1991年对MD4的改进版本。它仍以512位分组来输入,其输出是432位字的级联,与 MD4 相同。MD5MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

    3SHA1 及其他

    SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。

 

    2Windows系统下的hash密码格式

       Windows系统下的hash密码格式为:用户名称:RID:LM-HASH:NT-HASH值,例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示

  用户名称为:Administrator

    RID为:500

    LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
    NT-HASH值为:683020925C5D8569C23AA724774CE6CC

    (1)WindowsLM 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) WindowsNTLM 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)NTLMLM只能存储小于等于14个字符的密码hash,如果密码大于14个,windows就自动使用NTLM对其进行加密了,(这个在LC5里有两种破解方式,所以破解不出来的时候可以换种思路,基本是NTLM)一般情况下使用PwDump或其他一些hash导出工具(Cain)导出的hash都有对应的LMNTLM值,也就是说这个密码位数<=14,如果大于14位那么就只有对应的NTLM hash可用了,这时LM也会有值,但对我们来说没用,不能靠他来查LM彩虹表。 
      操作系统:对于XPwin2kwin2k3来说,系统默认使用LM进行加密(也可人为设置成NTLM),之后的win2008win7Vista禁用了LM,默认使用NTLM,所以不要拿着LM生成的rainbow table去找NTLMhash值,但是反过来却可以,因为使用LM方式的加密往往会存在一个对应的NTLM hash(如果密码位数<=14的话,系统同时对这个密码使用NTLM加密并存储了NTLMhash),这时候使用ophcrackNTLM表查找的就是这个NTLMhash了,而不是LMhash 

猜你喜欢

转载自blog.csdn.net/frank_wff/article/details/42709161