菜鳥教學--密碼學概述 (10千字)
常用工具: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
相關文章
- 一個菜鳥對密碼學的理解 (4千字)2015-11-15密碼學
- 菜鳥的ollydbg1.08b教學篇 (10千字)2003-01-27
- 【菜鳥學Java】10:Cookie技術2016-01-18JavaCookie
- 從菜鳥到專家 vi編輯器全程教學2011-02-28
- IT菜鳥的學習生活2012-06-08
- 【菜鳥讀原始碼】halo✍原始碼學習 (一)2019-09-05原始碼
- 菜鳥學破解(七)之 PowerZip V5.2 (3千字)2000-07-21
- 跟著菜鳥學python2020-11-13Python
- 菜鳥學Java(十七)——Jboss瘦身2014-01-28Java
- 菜鳥學Java(十八)——異常2014-03-31Java
- 菜鳥學習SQL注射(轉)2007-08-11SQL
- 菜鳥學設計模式(一)——小單例有大祕密2013-06-17設計模式單例
- 菜鳥的資訊保安學習之路2020-08-15
- 菜鳥學Java(十六)——Jboss簡介2014-01-15Java
- 菜鳥學Java(十一)——GET與POST2013-08-27Java
- 【菜鳥學Java】11:Session技術2016-02-16JavaSession
- 【菜鳥學Java】4:Servlet 技術2015-12-01JavaServlet
- 菜鳥學習寫的Ioc工具2013-03-27
- 菜鳥破解錄(10)之 A Day in the Life 1.51
(6千字)2000-07-23
- 菜鳥學Java(六)——簡單驗證碼生成(Java版)2013-07-26Java
- python菜鳥教程學習1:背景性學習2020-11-15Python
- 菜鳥學Python之雜湊表2019-04-09Python
- 菜鳥教程python 學習進度2020-10-13Python
- 菜鳥也想學習JSON解析2020-09-30JSON
- 菜鳥學SSH(十)——Hibernate核心介面2014-02-22
- 菜鳥學Java(九)——Servlet的基本配置2013-08-14JavaServlet
- 菜鳥學Java(十)——分頁查詢2013-08-21Java
- 菜鳥入門:Linux之Makefile概述(轉)2007-08-11Linux
- 菜鳥破解錄(12)之 AxMan3.10 (3千字)2000-07-26
- 菜鳥學習SHELL第一課---地址本的指令碼(轉)2007-08-12指令碼
- 菜鳥破解錄之 The Cleaner (4千字)2000-08-12
- 菜鳥破解錄之 DlgXRSizer (4千字)2000-08-17
- 菜鳥請教rbac的基礎知識2005-02-01
- C#、GIT詳細教程--菜鳥學院2019-02-20C#Git
- JavaScript 非同步及Promise 菜鳥學習心得2019-03-25JavaScript非同步Promise
- python菜鳥教程學習9:函式2020-11-26Python函式
- Android菜鳥學習js筆記一2018-06-27AndroidJS筆記
- 菜鳥學SSH(六)——Spring事務管理2013-12-17Spring