• 标 题:菜鸟教学--密码学概述 (10千字)
  • 作 者:winroot
  • 时 间:2003-10-02 15:03:53
  • 链 接:http://bbs.pediy.com

常用工具:RSATool2v17 ,CC  1.1 (beta 6) ,MD5 Brute Forcer ,CrypTooL v 1.2(christal),
         DAMN Hash Calculator,dsatoolv13,EccTool 1.2 BY StKman
         hash 0.35 by yyxzz[CCG](yyxzz是著名灌水组织WaterClub[WC]的发起人和领导者^_^)
         
  声  明:
      本文是一篇基础教学文章,对密码学进行了大概的介绍,为菜鸟(和我一样的人)以后学习研究密码学提供
 一些基础.

目录:
  一.前言

  二.密码学概念及常用术语

  三.密码学算法分类及简单介绍

  四.总结



********************************************************************************************
*                                    前言                                                  *
********************************************************************************************
     我爱说废话,大家不要烦!
     初学破解者大都是从明码比较到算法分析,在学习过程中总能听到一些算法属于密码学.
一听到密码学大家都感到有点玄,感到很神秘.网上关于特定的某个算法的文章还是有不少的,
但是很少有一篇文章来把各个算法合在一起,系统的讲一下,使大家对密码学有个大致的了解.
所以就有了我这篇废文.
     废话少说,我们来说正题,省得浪费大家时间^_^

********************************************************************************************
*                              密码学概念及常用术语                                        *
********************************************************************************************

密码学  顾名思义就是 研究密码 的一门学科(鸡蛋,香蕉皮,拖鞋................!@#$%^&*)

    密码学最早适用于军事通讯领域,他从诞生的那天起就决定了他的主要作用就是
通讯加密(并非是专门用于编写软件注册算法),这一点很重要,这样使我们可以比较密码学的用语与
软件注册算法用语的差别,以及在使用上的差别.


㈠ 下面先来一些名词解释:

1.加密系统:由算法以及所有可能的明文,密文和密钥组成. 

2.密码算法:密码算法也叫密码(cipher),适用于加密和解密的数学函数.(通常情况下,
           有两一个用于解密个相关的函数: 一个用于加密,两一个用于解密)

3.明文(plaintext):未被加密的消息.

4.密文(ciphertext):被加密的消息.

5.加密(encrypt),解密(decrypt):  kao这还用解释吗?玩我? 凸-_-凸
                               用某种方法伪装消息以隐藏他的内容的过程称为加密.
                                解密…………………自己想^_^  

6.密钥(key):这个概念不好解释(有种只可意会不可言传的意思^_^我水平不够),密钥就是参与加密及解密算法            的关键数据.没有他明文不能变成密文,密文不能明文,画个图来解释把
                          
                               加密密钥                解密密钥
                                  |                       |
                     明文----->【加密】----->密文----->【解密】----->明文
                 
            注:有时候:加密密钥=解密密钥

㈡  密码分析学:密码分析学是在不知道密钥的情况下,恢复出明文的学科.
     
     请大家注意这个句子的定语:在不知道密钥的情况下!!!!!!!!!!!!
     有什么要注意的?后面再说!!^_^
 

********************************************************************************************
*                          密码学算法分类及简单介绍                                        *
********************************************************************************************

㈠经典密码学
      这类加密方法算是加密算法的鼻祖,从古代一直应用到到近代。当然它主要还是应用于军事。
现在很少有人用这种方式加密这里只是简单的提一下,如果你想详细了解请查阅相关资料。
1。简单代替密码:凯撒(Caesar)。
2。多表代替密码:维吉尼亚(Vigenere)。
3。换位密码
4。转轮机:恩尼格马(Enigma)。

注:他们都不能算是计算机密码算法,因为那时候还没有计算机。^_^


㈡对称算法
   
    对称算法(symmetric algorithm)就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。
  
   对称算法可分为两类:
   1。序列密码(stream cipher):一次只对明文中的单个位(有时对字节)运算的算法。
      常用的序列密码算法有:A5(GSM用的加密算法,千万不要告诉我你不知道GSM是什么,看看你的手机^_^)
                            RC4,SEAL,WAKE,PKZIP。
   2。分组密码(block cipher):对明文的一组位进行运算的算法,典型的分组长度是64位。
      常见的分组密码算法有:DES&DES各种变形,IDEA,RC2,GOST,BLOWFISH,RC5,MISTY1,CAST128,                                      CAST256,AES.MARS,RC6,Rijndael,TEA,3-WAY,Twofish…………
对称算法的加/解密方式:

                                密钥                    密钥
                                  |                       |
                     明文----->【加密】----->密文----->【解密】----->明文
就是如此。

    聪明的您很快就会发现:对称算法如果应用于通讯中,我们可以比较简单的得到密文。但是对于解密关键的密钥,我们是很难获取的。这时我们就需要一种密码的攻击方式:唯密文攻击。这需要应用到密码分析学的知识。搞这些的都是高人,需要有深厚的数学功底,超强的耐心还有一点点运气。^_^

    看到这里可能有一些人觉得这么困难我放弃,千万不要放弃,我们要看一下上段话的条件,那是用于通讯中。而我们要分析的是共享软件加密算法^_^。

    而当我们将对称算法应用到共享软件加密的时候,我们能比较容易得到软件注册算法的密钥,因为共享软件(大部分)的密钥经过反汇编后我们都能找得到,就在进入加密算法前我们能看到密钥,得到密钥后,又知道是哪种算法,这样很简单的就可得到密文(明文),我们可以借助各种算法工具来…………^_^。

    这就是对称算法在共享软件加密上应用的一个软肋,如何克服?我们来引用看雪书上的一段话:若要采用对称算法验证注册码,正确的使用方法是把用户输入的注册码(或者注册码的一部分,注册码的散列值)作为加密算法或者解密算法的密钥。这样,解密这项要找到一个正确的注册码时,只能采用穷举法。
    这样可以加大分析的难度,但是当有一个正确的注册码后,还是可以攻破的,这就靠你自己了。^_^


    
㈢单向散列函数算法(hash)

    单向散列函数H(M)作用于任意长度的消息M,他返回一固定长度的散列值h:
                             h=H(M)
其中h的长度为m。
    输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数具有使其单向的如下特征:
 * 给定M,很容易计算h。
 * 给定h,根据H(M)=h计算M很难。
 * 给定M,要找到另一条消息M'并满足H(M)=H(M')很难。

  这就是定义,简单的说就是他能把任意长度的消息变成一个固定长度的散列值(是散列值而不是字符串)
但是你从散列值很难推出他的消息。而且不存在两个不同的消息有相同的散列值的情况。

  由定义和这些特性我们可以得出单项散列算法,是不能单独用于共享软件加密,这样会非常容易被破解或者作者本人就很难得到注册码。所以单向散列函数算法,在通讯中应用于数字签名,消息的完整性检测,消息起源的验证等,当它应用于共享软件加密就只能作为加密的一个中间步骤。
  一般情况下,破解者是不需要了解hash函数的具体内容,只要能鉴别是何种算法就行了。
  常见的单向散列函数算法有:
      HAVAL, MD2, MD4, MD5, PanamaHash, RIPEMD160, SHA, SHA256, SHA384, SHA512, Tiger

“winroot”的各种散列值

MD2_128  : EFCB691878944AC42E1FD7F044FAF8D0
MD4_128  : D3E81CD9EF4A4854017B3E37E0D7E545
MD5_128  : F366A5751A638525F5226D25D446B018
SHA160   : 860A3EA72714EFFBED4D35218D3C3FD662B4113B
SHA256   : DE0B5A0FC4BADDB8BED3859FE024562E79B6D05E1ACEF7644E361574C223CF08
SHA384   : 54FAD90387747873ED77F7029A2C458C25AF0C1D74EC7EC8BFC3F91A0A03B42E78F39E345AB499FC659054C8C5ACDA05
SHA512   : 7387E2037B225651F2C859BBC09C2C43E1F8F081E75CDDFDAC6DB16792F7008C0BD15B9E2B715004D2EBC6E5A5E8A62394EC7B76439578EE4814641B395820C6
RIPEMD160: 1FE6301049FAF5A3221BBDCB802ACCE3E609EC37
Tiger_192: 14BEEAD7C220E46F49BDE02DDB17D23BA315A012309772D5
PanamaHash_256: A5A9DE1855766746B9AFCA26D3C08C8DAD2E51E0EBF5F8BB5059CD084A8000B9
HAVAL(128bit,pass=3): C004F3C26B8BA5390C036654002BFC5B
HAVAL(160bit,pass=3): 624D82E66D1C496A8DBC385B3732857821B2E6E0
HAVAL(192bit,pass=3): E9C02C115CF4026E13FE204601FB4E9E2FB56A715B7E7207
HAVAL(224bit,pass=3): 416ADBD1C21472D79856B77E7FE2C31F21332C68EFE70F1A2DD16730
HAVAL(256bit,pass=3): C59A131E3C8A0519B248AA7D70CD6153F64F44B62337471BAE01ACE985468A56
HAVAL(128bit,pass=4): A53DAB690512E28AB714F76A25A1FCC1
HAVAL(160bit,pass=4): 63C9A7871EDFAE9505A5C34F4309972431F09EB6
HAVAL(192bit,pass=4): A4FA8440A261995965BD3DFB27B03E6FD4F43462094B0D8A
HAVAL(224bit,pass=4): DC6E5EB71A02637A7A5D53BC84DD60904F136989BD73DFAF3CF88E2C
HAVAL(256bit,pass=4): 5070D8015AA9A849A6DF4F7FF8F154A3F626B841720AF12D2DB866E782D6AF24
HAVAL(128bit,pass=5): 2D0B887087B7AB076FA34334D553C532
HAVAL(160bit,pass=5): 028EC2A53F09CF0C527F176D73C7F8EC2FFD22FF
HAVAL(192bit,pass=5): A5320BDB1771C4872A4DAC85DF49DC41D01F513EF6A393BF
HAVAL(224bit,pass=5): 8B687C32D71699ED80F886BA7DB37F8B1BEFDDA027111B7A73F92442
HAVAL(256bit,pass=5): EA2D86A050C2707FCA1AAF5B42D3B4C632A6372ECA9877C203365B59B46950E4

常用工具:DAMN Hash Calculator,hash 0.35 by yyxzz[CCG](yyxzz是著名灌水组织WaterClub[WC]的发起人和领导者^_^)

㈣公开密钥算法
    公开密钥算法(public-key algorithm,也叫非对称算法):用做加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。
   之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生人可以用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。
   加密密钥也叫做公开密钥(public-key,简称公钥),解密密钥叫做私人密钥(private key,简称私钥)

  请大家注意,上面说到的用公钥加密,私钥解密是用于通讯领域中的信息加密。在共享软件加密算法中,我们用的是用私钥加密,公钥解密,即公开密钥算法的另一用途--数字签名。

   关于 公开密钥算法的安全性我们引用看雪书上的一段话:
   “公开密钥算法的安全性都是基于复杂的数学难题。根据所给予的数学难题来分类,有以下三类系统目前被认为是安全和有效的:大整数因子分解系统(代表性的有RSA),离散对数系统(代表性的有DSA,ElGamal)和椭圆曲线离散对数系统(代表性的有ECDSA)”
      常见公开密钥算法:
               RSA        能用于信息加密和数字签名
               ElGamal    能用于信息加密和数字签名
               DSA        数字签名
               ECDSA      能用于信息加密和数字签名

公开密钥算法将成为共享软件加密算法的主流,因为它的安全(当然还是作者的使用)。以RSA为例:当N的位数大于1024后(强素数),现在认为无法分解。


********************************************************************************************
*                                        结语                                              *
********************************************************************************************
   
   说了这么多废话,就是让菜鸟们对密码学有个大致的了解。谢谢大家捧场!!

好了,密码学算法我就介绍到这里,具体的算法描述自己找资料,我这里只是概述,找不到资料?请访问www.google.com找不到你来找我^_^。


主要参考文献
 Bruce Schneier 《应用密码学》,机械工业出版社
 看雪    《加密与解密(第二版)》,电子工业出版社
 娃娃  《MD5的介绍,算法以及实现》
 ZMWorm[CCG]  《ECC加密算法入门介绍》
 娃娃      《DSA算法的理论,实现,以及在破解中的应用》
 blowfish  《如何用非对称密码算法制作共享软件的注册码》
 还有各位看雪论坛朋友的一言一行

                                                                   WiNrOOt
                                                                  2003-10-2