熱門搜索:技工學(xué)校(907)  電子(873)  招生(678)  簡(jiǎn)章(475)  學(xué)校(470)  電腦(373)
您當(dāng)前位置:湖南電子職業(yè)中專學(xué)校文章頻道網(wǎng)絡(luò)工程技術(shù)

當(dāng)前各種加密方案完全解析

時(shí)間:2010-07-15 22:36:39    整理:佚名    []
http://www.410014.com
    加密方法當(dāng)前多種多樣,已經(jīng)不可能找出一種分類方法來(lái)把各種加密方案很好地區(qū)分開(kāi)來(lái)。基本上來(lái)說(shuō)可以分為依賴特定硬件的加密方案和不依賴硬件的加密方案。

  一、依賴硬件的加密方案

  1. 軟盤加密

  這是在計(jì)算機(jī)上 為古老的一種加密方案,它的原理是在軟盤的特殊位置寫入一些信息,軟件在運(yùn)行時(shí)要檢驗(yàn)這些信息。這種軟盤就好像一把鑰匙。軟件開(kāi)發(fā)商只需一次投資購(gòu)買一套加密工具就可以自己制作多張鑰匙盤。此方法加密簡(jiǎn)單,成本低,在軟件發(fā)展的不同時(shí)期都能看到其閃光點(diǎn)。但因?yàn)檐涷?qū)是慢速設(shè)備,多次檢查軟盤上的加密點(diǎn)會(huì)大大拖慢程序的運(yùn)行速度,所以一般加密軟件只在軟件運(yùn)行開(kāi)始的時(shí)候檢查一次,這樣不能避免用戶用一張加密盤啟動(dòng)多份軟件。而且由于軟盤是一種易損載體,加密軟件對(duì)軟盤加密點(diǎn)的反復(fù)讀寫很容易造成軟盤的損壞。而這張加密盤又不能備份,軟件公司要不斷應(yīng)付用戶更換加密盤的請(qǐng)求。另外由于這種加密技術(shù)出現(xiàn)得較早,硬解密的技術(shù)相對(duì)比較成熟,像雙星公司的King-Copy軟件能拷貝大多數(shù)的加密軟盤,連加密點(diǎn)一起復(fù)制,復(fù)制后的軟盤還是加密的。

  2. 卡加密

  在90年代初,各種各樣的漢卡涌現(xiàn)出來(lái),隨之而來(lái)的卡加密技術(shù)也風(fēng)行一時(shí)。由于種種問(wèn)題,這種加密技術(shù)現(xiàn)在已經(jīng)難得一見(jiàn)了。

  3. 軟件鎖加密

  軟件鎖加密是在國(guó)外首先出現(xiàn)的,它是一個(gè)插在計(jì)算機(jī)打印口上火柴盒大小的設(shè)備,國(guó)內(nèi)俗稱“加密狗”。在加密鎖內(nèi)部存有一定的數(shù)據(jù)和算法,計(jì)算機(jī)可以與之通訊來(lái)獲得其中的數(shù)據(jù),或通過(guò)加密鎖進(jìn)行某種計(jì)算。軟件無(wú)法離開(kāi)加密鎖而運(yùn)行。由于它不像卡加密那樣需要打開(kāi)計(jì)算機(jī)的機(jī)箱來(lái)安裝,但又像加密卡那樣可以隨時(shí)訪問(wèn),而且訪問(wèn)速度很快,所以一推出就受到軟件開(kāi)發(fā)者們的青睞。目前,所有的加密鎖都提供了可編程的接口。用戶可以控制加密鎖中的內(nèi)容,在程序中通過(guò)加密鎖的接口任意訪問(wèn)加密鎖。國(guó)外加密鎖一般僅提供若干種算法,但好的加密鎖不但可以向客戶提供加密算法,也容許客戶根據(jù)自己的意愿自定義加密算法,容許客戶自定義用戶ID號(hào)……比如:北京飛天誠(chéng)信科技公司(網(wǎng)址:www.rockey.com.cn)推出的ROCKEY-IV鎖就是一種加密強(qiáng)度很高產(chǎn)品(見(jiàn)圖1)。但加密鎖也是有一定欠缺的,由于加密鎖利用的是計(jì)算機(jī)的打印口,而打印口原來(lái)是為打印機(jī)而設(shè)計(jì)的,軟件鎖一方面要保證用戶加密操作的正確,同時(shí)也要保證打印機(jī)工作的正常。但由于打印機(jī)驅(qū)動(dòng)程序設(shè)計(jì)上千差萬(wàn)別,沒(méi)有任何一家的加密鎖能夠完全做到這一點(diǎn)。

  但這一問(wèn)題現(xiàn)在有希望得到徹底的解決,那就是USB接口的加密鎖。USB接口的加密鎖不但擁有并口加密鎖的所有優(yōu)點(diǎn),而且沒(méi)有打印上的問(wèn)題,其前景十分看好。但美中不足的是只有Windows 98和Windows 2000目前能夠支持USB設(shè)備。北京飛天誠(chéng)信科技公司推出的一款ROCKEY-USB加密鎖(見(jiàn)圖2)其安全性優(yōu)于國(guó)外產(chǎn)品,同時(shí)售價(jià)遠(yuǎn)遠(yuǎn)低于國(guó)外產(chǎn)品。

  由于軟件鎖加密目前是軟件加密的主流方案,所以再特別講一下軟件鎖加密的安全性問(wèn)題。

  首先從軟件鎖的硬件方面進(jìn)行研究。早先的軟件鎖由于硬件的加密程度不夠,容易被破解。 近一年的軟件鎖設(shè)計(jì)大多采用了低電壓CPU為基礎(chǔ)的設(shè)計(jì),CPU內(nèi)部的程序由軟件鎖廠商自行寫入,由于CPU內(nèi)部的程序是一次寫入而且不可修改、不可讀出的,安全性也比較高,而且由于CPU程序是由軟件鎖生產(chǎn)廠家來(lái)寫入,廠家可以根據(jù)自己的要求隨時(shí)修改軟件鎖內(nèi)部的程序,靈活性也比較高。

  其次我們從軟件鎖軟件方面考慮一下。實(shí)際上大多數(shù)黑客攻擊的只是軟件鎖和客戶的軟件方面,真正從硬件角度來(lái)破解軟件鎖的比較少。從結(jié)構(gòu)上來(lái)說(shuō),一個(gè)使用軟件鎖進(jìn)行加密的軟件分為三個(gè)部分:1)軟件鎖的驅(qū)動(dòng)程序部分;2)軟件鎖提供的負(fù)責(zé)同驅(qū)動(dòng)程序進(jìn)行通訊的具體語(yǔ)言模塊(.OBJ、.DLL……);3)客戶軟件部分。前兩部分都是由軟件鎖的廠家來(lái)完成的,都有不同程度的加密與反跟蹤成分,不易被解密。客戶軟件部分相對(duì)比較簡(jiǎn)單,往往是黑客攻擊的主要部分。軟件鎖的使用環(huán)節(jié)很多,任何一個(gè)環(huán)節(jié)出了問(wèn)題,都會(huì)造成整個(gè)加密方案的失敗。而客戶的使用方法往往是加密成敗的關(guān)鍵,如果某個(gè)軟件鎖的訪問(wèn) 后能夠歸結(jié)為某個(gè)條件判別的話,那么一旦在這里被跳過(guò),整個(gè)加密也就失去作用了。規(guī)劃一套真正行之有效的加密方案,才能更好地發(fā)揮軟件鎖的保護(hù)功效。

  4. 光盤加密

  既然有軟盤加密成功在先,為什么不能有光盤加密呢?但實(shí)際操作上確實(shí)是有一些問(wèn)題的,因?yàn)楣獗P有ISO9660標(biāo)準(zhǔn)協(xié)議規(guī)定,其可控制性比軟盤還要嚴(yán)格,想找出一種只能運(yùn)行而不能復(fù)制的方式確實(shí)很困難。但現(xiàn)在確實(shí)已經(jīng)有幾家這樣的產(chǎn)品出來(lái)了,而且加密方法也不盡相同。其主要原理是利用特殊的光盤母盤上的某些特征信息是不可再現(xiàn)的,而且這些特征信息大多是光盤上非數(shù)據(jù)性的內(nèi)容,在光盤復(fù)制時(shí)復(fù)制不到的地方。因?yàn)橥度胧且淮涡缘模瑢?duì)于大規(guī)模的生產(chǎn)這種加密方案可以將成本降得很低。而且軟件數(shù)據(jù)和加密在同一載體上,對(duì)用戶無(wú)疑是很方便的。但這是一種較新的加密方案,很多方面還需進(jìn)一步驗(yàn)證。而且由于加密方式所限,不可能在用戶自己刻錄的光盤上實(shí)現(xiàn)這種加密,必須是生產(chǎn)線上生產(chǎn)的光盤才能夠?qū)崿F(xiàn)。這對(duì)于一些小規(guī)模的軟件生產(chǎn)廠商還是有一定困難的,而且由于光盤的只讀性,一旦加密有錯(cuò)是無(wú)法修復(fù)的。

  二、不依賴硬件的加密方案

  所有的帶有附加硬件設(shè)備的加密方案都有一定的加密成本在里面,對(duì)于那些價(jià)格高昂的軟件當(dāng)然無(wú)所謂,但對(duì)于那些共享軟件或價(jià)格本身就很低的軟件來(lái)說(shuō),硬件加密成本可能比軟件本身的售價(jià)還高,所以近年來(lái)產(chǎn)生了很多軟加密方案。

  1. 密碼表加密

  在軟件運(yùn)行的開(kāi)始要求用戶根據(jù)屏幕的提示信息輸入特定的答案,答案往往在用戶手冊(cè)上的一份防復(fù)印的密碼表中。用戶只有輸入密碼正確后才能夠繼續(xù)運(yùn)行。這種加密方案實(shí)現(xiàn)簡(jiǎn)單,不需要太多的成本。但用戶每次運(yùn)行軟件都要查找密碼,不免使用戶感到十分不便。像臺(tái)灣的游戲大多采用此加密方式。而且往往有一些有耐心者把整個(gè)密碼表輸入到計(jì)算機(jī)中存成一個(gè)文件,同軟件的盜版一同公布出來(lái),讓加密者無(wú)可奈何。基本上是一種防君子不防小人的加密方式。

  2. 序列號(hào)加密

  這種加密方式從某種角度來(lái)講不是一套完整的加密方案,現(xiàn)今很多Shareware(共享軟件)大多采用這種加密方式,用戶在軟件的試用期是不需要交費(fèi)的,一旦試用期滿還希望繼續(xù)使用這個(gè)軟件,就必須到軟件公司進(jìn)行注冊(cè),然后軟件公司會(huì)根據(jù)你提交的信息(一般是用戶的名字)來(lái)生成一個(gè)序列號(hào),當(dāng)你收到這個(gè)序列號(hào)以后,并在軟件運(yùn)行的時(shí)候輸入進(jìn)去,軟件會(huì)驗(yàn)證你的名字與序列號(hào)之間的關(guān)系是否正確,如果正確說(shuō)明你已經(jīng)購(gòu)買了這個(gè)軟件,也就沒(méi)有日期的限制了。這種加密方案實(shí)現(xiàn)簡(jiǎn)單,而且購(gòu)買過(guò)程也完全在Internet上實(shí)現(xiàn),無(wú)論是開(kāi)發(fā)者和購(gòu)買者都覺(jué)得很方便。不過(guò)有心的人可能已經(jīng)注意到軟件的名字與序列號(hào)之間的驗(yàn)證是在你的計(jì)算機(jī)上完成的,很多黑客利用這個(gè)漏洞找出了名字和序列號(hào)之間的換算關(guān)系,編寫出一種叫KeyMaker的程序,你只要輸入你的名字,這個(gè)程序會(huì)幫助你計(jì)算出序列號(hào),再將你的名字和這個(gè)序列號(hào)輸入進(jìn)軟件中就變成正版軟件了。而且也沒(méi)有什么更好的方法來(lái)阻止用戶擴(kuò)散他注冊(cè)后得到的序列號(hào)。

  3. 許可證加密

  這種方式從某種角度上可以說(shuō)是序列號(hào)加密的一個(gè)變種,你從網(wǎng)上下載的或購(gòu)買過(guò)來(lái)的軟件并不能直接使用,軟件在安裝時(shí)或運(yùn)行時(shí)會(huì)對(duì)你的計(jì)算機(jī)進(jìn)行一番檢測(cè),并根據(jù)檢測(cè)結(jié)果生成一個(gè)你的計(jì)算機(jī)的特定指紋,這個(gè)指紋可以是一個(gè)小文件,也可以是一串誰(shuí)也看不懂的數(shù),你需要把這個(gè)指紋數(shù)據(jù)通過(guò)Internet、E-mail、電話、傳真等方式發(fā)送到開(kāi)發(fā)商那里,開(kāi)發(fā)商再根據(jù)這個(gè)指紋給你一個(gè)注冊(cè)碼或注冊(cè)文件,你得到這個(gè)注冊(cè)碼或注冊(cè)文件并按軟件要求的步驟在你的計(jì)算機(jī)上完成注冊(cè)后方能使用。這個(gè)方法的買賣也是完全通過(guò)網(wǎng)絡(luò)來(lái)進(jìn)行的,而且用戶購(gòu)買的軟件被限制只能在他自己的計(jì)算機(jī)上面運(yùn)行,換到其他的計(jì)算機(jī)上,這個(gè)注冊(cè)碼或注冊(cè)文件可能不再有效。但用戶更換某些硬件設(shè)備也可能造成注冊(cè)碼的失效,而且用戶得到軟件后在完成注冊(cè)工作前會(huì)有一段時(shí)間無(wú)法使用。

  加密方案涉及的主要技術(shù)

  1.外殼加密

  “外殼”這個(gè)詞估計(jì)是中國(guó)人獨(dú)創(chuàng)的,我覺(jué)得比較生動(dòng)貼切,它的意思就是給可執(zhí)行的文件加上一個(gè)外殼。用戶執(zhí)行的實(shí)際上是這個(gè)外殼的程序,而這個(gè)外殼程序負(fù)責(zé)把用戶原來(lái)的程序在內(nèi)存中解開(kāi)壓縮,并把控制權(quán)交還給解開(kāi)后的真正的程序,由于一切工作都是在內(nèi)存中運(yùn)行,用戶根本不知道也不需要知道其運(yùn)行過(guò)程,并且對(duì)執(zhí)行速度沒(méi)有什么影響。

  如果在外殼程序中加入對(duì)軟件鎖或鑰匙盤的驗(yàn)證部分,它就是我們所說(shuō)的外殼加密了。其實(shí)外殼加密的作用還不止于此,在Internet上面有很多程序是專門為加殼而設(shè)計(jì)的,它對(duì)程序進(jìn)行壓縮或根本不壓縮,它的主要特點(diǎn)在于反跟蹤,加密代碼和數(shù)據(jù),保護(hù)你的程序數(shù)據(jù)的完整性。如果你不希望你的程序代碼被黑客修改,如果你的程序不希望被人跟蹤調(diào)試,如果你的算法程序不想被別人靜態(tài)分析,這種外殼程序就是為你設(shè)計(jì)的。

  需要注意的是,有很多網(wǎng)上免費(fèi)的外殼加密程序兼容性很差,加密后的程序在某些計(jì)算機(jī)或某些操作系統(tǒng)下無(wú)法運(yùn)行。

  2.序列號(hào)加密中的數(shù)學(xué)算法

  大多數(shù)軟件加密本身的實(shí)現(xiàn)都是一種編程上的技巧。但近幾年來(lái)隨著序列號(hào)加密程序的普及,數(shù)學(xué)算法在軟件加密中的比重越來(lái)越大了。

  我們先來(lái)看看在因特網(wǎng)上大行其道的序列號(hào)加密的工作原理。當(dāng)用戶從網(wǎng)絡(luò)上下載某個(gè)Shareware—共享軟件后,一般都有使用時(shí)間上的限制,當(dāng)過(guò)了共享軟件的試用期后,你必須到這個(gè)軟件的公司去注冊(cè)后方能繼續(xù)使用。注冊(cè)過(guò)程一般是用戶把自己的私人信息(一般主要指名字)連同信用卡號(hào)碼告訴給軟件公司,軟件公司會(huì)根據(jù)用戶的信息計(jì)算出一個(gè)序列碼出來(lái),在用戶得到這個(gè)序列碼后,按照注冊(cè)需要的步驟在軟件中輸入注冊(cè)信息和注冊(cè)碼,其注冊(cè)信息的合法性由軟件驗(yàn)證通過(guò)后,軟件就會(huì)取消掉本身的各種限制。

  軟件驗(yàn)證序列號(hào)的合法性過(guò)程,其實(shí)就是驗(yàn)證用戶名與序列號(hào)之間的換算關(guān)系是否正確的過(guò)程。現(xiàn)有的序列號(hào)加密算法大多是軟件開(kāi)發(fā)者自行設(shè)計(jì)的,大部分相當(dāng)簡(jiǎn)單。而且有些算法作者雖然下了很大的工夫,但效果往往達(dá)不到它所希望的結(jié)果。其實(shí)現(xiàn)在有很多現(xiàn)成的加密算法可以使用,如RSADES、MD4、MD5……只不過(guò)這些算法是為了加密密文或密碼用的,同序列號(hào)加密多少有些不同,如果希望使用這些加密算法的話多少需要?jiǎng)狱c(diǎn)腦筋。我在這里試舉一例,希望有拋磚引玉的作用:

  1)在軟件程序中有一段加密過(guò)的密文S;

  2)密鑰=F(用戶名稱,序列號(hào)); (用上面的二元算法得到密鑰)

  3)明文D=F-DES(密文S,密鑰); (用得到的密鑰來(lái)解密密文得到明文D)

  4)CRC=F-CRC(明文D); (對(duì)得到的明文用各種CRC統(tǒng)計(jì))

  5)檢查CRC是否正確, 好多設(shè)計(jì)幾種CRC算法,檢查多個(gè)CRC結(jié)果是否都正確。

  用這種方法,在沒(méi)有一個(gè)已知正確的序列號(hào)的情況下是永遠(yuǎn)推算不出正確的序列號(hào)的。

  3.解釋、編譯與反編譯

  如果你設(shè)計(jì)了一種不希望別人知道的特有的算法,所采用的加密手段往往同你的編程語(yǔ)言有很大的關(guān)系。對(duì)于解釋語(yǔ)言與編譯語(yǔ)言所編制出來(lái)的代碼安全性上而言,可以說(shuō)是各有優(yōu)缺點(diǎn)。解釋語(yǔ)言有一個(gè)致命的弱點(diǎn),那就是解釋語(yǔ)言的程序代碼都是以偽碼的方式存放的,一旦被人找到了偽碼與源碼之間的對(duì)應(yīng)關(guān)系,就很容易做出一個(gè)反編譯器出來(lái),你的源程序等于被公開(kāi)了一樣。而編譯語(yǔ)言因?yàn)橹苯影延脩舫绦蚓幾g成機(jī)器碼,再經(jīng)過(guò)優(yōu)化程序的優(yōu)化,很難從程序返回到你的源程序的狀態(tài),但對(duì)于熟悉匯編語(yǔ)言的解密者來(lái)說(shuō),也很容易通過(guò)跟蹤你的代碼來(lái)確定某些代碼的用途。

  根據(jù)我對(duì)各種具有反編譯器的語(yǔ)言的了解,Visual Basic 5.0以上版本和C語(yǔ)言還沒(méi)有反編譯器。我的建議是:

  1)千萬(wàn)不能編制功能強(qiáng)大的子程序,如果你程序的一個(gè)子程序就能印錢的話,我就不需要看別的了。

  2)多用全局變量, 好是全局的臨時(shí)變量,這個(gè)變量在每個(gè)子程序中的用法都不一樣,程序結(jié)構(gòu)可能不太好,但能造成牽一發(fā)而動(dòng)全身的效果。

  3)如果能用C++的話,盡量用C++來(lái)編程, 好把你的算法全用類來(lái)實(shí)現(xiàn),哪怕是一個(gè)加法減法也給它定義個(gè)類,再?gòu)淖宇惿厦胬^承繼承再繼承。

  4)編譯后的程序不能小于500kB。

  4.CPU、操作系統(tǒng)與編程語(yǔ)言

  一個(gè)軟件的加密性是否良好同具體的CPU、操作系統(tǒng)與編程語(yǔ)言是有很大關(guān)系的。這里有個(gè)加密方面的摩爾定律,某種技術(shù)的普及化程度越高,那么它的加密性就越差。例如我用VB寫一個(gè)程序,其中調(diào)用了大量的ActiveX、COM等控件,而且針對(duì)MMX、3DNow、SSE……做了具體的優(yōu)化。這樣的程序比完全用VC寫的程序的安全性要好得多,因?yàn)檫@完全是一種純技術(shù)上的比拼,如果某個(gè)黑客對(duì)VB,ActiveX,COM的技術(shù)及內(nèi)部工作原理十分清楚的話,可能破解這種程序要比用VC編寫的程序容易許多。如果說(shuō)軟件的加密性同軟件的執(zhí)行效率是不沖突的話,那么軟件的加密性同軟件的可移植性就很難共存了,因?yàn)槟悴豢赡芟M粋(gè)能鎖住所有門的鎖有很好的安全性。不同的平臺(tái)、不同的CPU都會(huì)產(chǎn)生不同的加密方式,但軟件必然是在特定的CPU和操作系統(tǒng)平臺(tái)上執(zhí)行,針對(duì)特定平臺(tái)的優(yōu)化,不但是安全性的要求,更多的是執(zhí)行效率上的考慮

  我們經(jīng)常需要一種措施來(lái)保護(hù)我們的數(shù)據(jù),防止被一些懷有不良用心的人所看到或者破壞。在信息時(shí)代,信息可以幫助團(tuán)體或個(gè)人,使他們受益,同樣,信息也可以用來(lái)對(duì)他們構(gòu)成威脅,造成破壞。在競(jìng)爭(zhēng)激烈的大公司中,工業(yè)間諜經(jīng)常會(huì)獲取對(duì)方的情報(bào)。因此,在客觀上就需要一種強(qiáng)有力的安全措施來(lái)保護(hù)機(jī)密數(shù)據(jù)不被竊取或篡改。數(shù)據(jù)加密與解密從宏觀上講是非常簡(jiǎn)單的,很容易理解。加密與解密的一些方法是非常直接的,很容易掌握,可以很方便的對(duì)機(jī)密數(shù)據(jù)進(jìn)行加密和解密。

  一、數(shù)據(jù)加密方法

  在傳統(tǒng)上,我們有幾種方法來(lái)加密數(shù)據(jù)流。所有這些方法都可以用軟件很容易的實(shí)現(xiàn),但是當(dāng)我們只知道密文的時(shí)候,是不容易破譯這些加密算法的(當(dāng)同時(shí)有原文和密文時(shí),破譯加密算法雖然也不是很容易,但已經(jīng)是可能的了)。 好的加密算法對(duì)系統(tǒng)性能幾乎沒(méi)有影響,并且還可以帶來(lái)其他內(nèi)在的優(yōu)點(diǎn)。例如,大家都知道的PKZIP,它既壓縮數(shù)據(jù)又加密數(shù)據(jù)。又如,DBMS的一些軟件包總是包含一些加密方法以使復(fù)制文件這一功能對(duì)一些敏感數(shù)據(jù)是無(wú)效的,或者需要用戶的密碼。所有這些加密算法都要有高效的加密和解密能力。

  幸運(yùn)的是,在所有的加密算法中 簡(jiǎn)單的一種就是“置換表”算法,這種算法也能很好達(dá)到加密的需要。每一個(gè)數(shù)據(jù)段(總是一個(gè)字節(jié))對(duì)應(yīng)著“置換表”中的一個(gè)偏移量,偏移量所對(duì)應(yīng)的值就輸出成為加密后的文件。加密程序和解密程序都需要一個(gè)這樣的“置換表”。事實(shí)上,80x86 CPU系列就有一個(gè)指令‘XLAT’在硬件級(jí)來(lái)完成這樣的工作。這種加密算法比較簡(jiǎn)單,加密解密速度都很快,但是一旦這個(gè)“置換表”被對(duì)方獲得,那這個(gè)加密方案就完全被識(shí)破了。更進(jìn)一步講,這種加密算法對(duì)于黑客破譯來(lái)講是相當(dāng)直接的,只要找到一個(gè)“置換表”就可以了。這種方法在計(jì)算機(jī)出現(xiàn)之前就已經(jīng)被廣泛的使用。

  對(duì)這種“置換表”方式的一個(gè)改進(jìn)就是使用2個(gè)或者更多的“置換表”,這些表都是基于數(shù)據(jù)流中字節(jié)的位置的,或者基于數(shù)據(jù)流本身。這時(shí),破譯變的更加困難,因?yàn)楹诳捅仨氄_的做幾次變換。通過(guò)使用更多的“置換表”,并且按偽隨機(jī)的方式使用每個(gè)表,這種改進(jìn)的加密方法已經(jīng)變的很難破譯。比如,我們可以對(duì)所有的偶數(shù)位置的數(shù)據(jù)使用A表,對(duì)所有的奇數(shù)位置使用B表,即使黑客獲得了明文和密文,他想破譯這個(gè)加密方案也是非常困難的,除非黑客確切的知道用了兩張表。

  與使用“置換表”相類似,“變換數(shù)據(jù)位置”也在計(jì)算機(jī)加密中使用。但是,這需要更多的執(zhí)行時(shí)間。從輸入中讀入明文放到一個(gè)buffer中,再在buffer中對(duì)他們重排序,然后按這個(gè)順序再輸出。解密程序按相反的順序還原數(shù)據(jù)。這種方法總是和一些別的加密算法混合使用,這就使得破譯變的特別的困難,幾乎有些不可能了。例如,有這樣一個(gè)詞,變換起字母的順序,slient 可以變?yōu)閘isten,但所有的字母都沒(méi)有變化,沒(méi)有增加也沒(méi)有減少,但是字母之間的順序已經(jīng)變化了。

  但是,還有一種更好的加密算法,只有計(jì)算機(jī)可以做,就是字/字節(jié)循環(huán)移位和XOR操作。如果我們把一個(gè)字或字節(jié)在一個(gè)數(shù)據(jù)流內(nèi)做循環(huán)移位,使用多個(gè)或變化的方向(左移或右移),就可以迅速的產(chǎn)生一個(gè)加密的數(shù)據(jù)流。這種方法是很好的,破譯它就更加困難!而且,更進(jìn)一步的是,如果再使用XOR操作,按位做異或操作,就就使破譯密碼更加困難了。如果再使用偽隨機(jī)的方法,這涉及到要產(chǎn)生一系列的數(shù)字,我們可以使用Fibbonaci數(shù)列。對(duì)數(shù)列所產(chǎn)生的數(shù)做模運(yùn)算(例如模3),得到一個(gè)結(jié)果,然后循環(huán)移位這個(gè)結(jié)果的次數(shù),將使破譯次密碼變的幾乎不可能!但是,使用Fibbonaci數(shù)列這種偽隨機(jī)的方式所產(chǎn)生的密碼對(duì)我們的解密程序來(lái)講是非常容易的。

  在一些情況下,我們想能夠知道數(shù)據(jù)是否已經(jīng)被篡改了或被破壞了,這時(shí)就需要產(chǎn)生一些校驗(yàn)碼,并且把這些校驗(yàn)碼插入到數(shù)據(jù)流中。這樣做對(duì)數(shù)據(jù)的防偽與程序本身都是有好處的。但是感染計(jì)算機(jī)程序的病毒才不會(huì)在意這些數(shù)據(jù)或程序是否加過(guò)密,是否有數(shù)字簽名。所以,加密程序在每次load到內(nèi)存要開(kāi)始執(zhí)行時(shí),都要檢查一下本身是否被病毒感染,對(duì)與需要加、解密的文件都要做這種檢查!很自然,這樣一種方法體制應(yīng)該保密的,因?yàn)椴《境绦虻木帉懻邔?huì)利用這些來(lái)破壞別人的程序或數(shù)據(jù)。因此,在一些反病毒或殺病毒軟件中一定要使用加密技術(shù)。

  循環(huán)冗余校驗(yàn)是一種典型的校驗(yàn)數(shù)據(jù)的方法。對(duì)于每一個(gè)數(shù)據(jù)塊,它使用位循環(huán)移位和XOR操作來(lái)產(chǎn)生一個(gè)16位或32位的校驗(yàn)和 ,這使得丟失一位或兩個(gè)位的錯(cuò)誤一定會(huì)導(dǎo)致校驗(yàn)和出錯(cuò)。這種方式很久以來(lái)就應(yīng)用于文件的傳輸,例如 XMODEM-CRC。 這是方法已經(jīng)成為標(biāo)準(zhǔn),而且有詳細(xì)的文檔。但是,基于標(biāo)準(zhǔn)CRC算法的一種修改算法對(duì)于發(fā)現(xiàn)加密數(shù)據(jù)塊中的錯(cuò)誤和文件是否被病毒感染是很有效的。

  二、基于公鑰的加密算法

  一個(gè)好的加密算法的重要特點(diǎn)之一是具有這種能力:可以指定一個(gè)密碼或密鑰,并用它來(lái)加密明文,不同的密碼或密鑰產(chǎn)生不同的密文。這又分為兩種方式:對(duì)稱密鑰算法和非對(duì)稱密鑰算法。所謂對(duì)稱密鑰算法就是加密解密都使用相同的密鑰,非對(duì)稱密鑰算法就是加密解密使用不同的密鑰。非常著名的PGP公鑰加密以及RSA加密方法都是非對(duì)稱加密算法。加密密鑰,即公鑰,與解密密鑰,即私鑰,是非常的不同的。從數(shù)學(xué)理論上講,幾乎沒(méi)有真正不可逆的算法存在。例如,對(duì)于一個(gè)輸入‘a(chǎn)’執(zhí)行一個(gè)操作得到結(jié)果‘b’,那么我們可以基于‘b’,做一個(gè)相對(duì)應(yīng)的操作,導(dǎo)出輸入‘a(chǎn)’。在一些情況下,對(duì)于每一種操作,我們可以得到一個(gè)確定的值,或者該操作沒(méi)有定義(比如,除數(shù)為0)。對(duì)于一個(gè)沒(méi)有定義的操作來(lái)講,基于加密算法,可以成功地防止把一個(gè)公鑰變換成為私鑰。因此,要想破譯非對(duì)稱加密算法,找到那個(gè)唯一的密鑰,唯一的方法只能是反復(fù)的試驗(yàn),而這需要大量的處理時(shí)間。

  RSA加密算法使用了兩個(gè)非常大的素?cái)?shù)來(lái)產(chǎn)生公鑰和私鑰。即使從一個(gè)公鑰中通過(guò)因數(shù)分解可以得到私鑰,但這個(gè)運(yùn)算所包含的計(jì)算量是非常巨大的,以至于在現(xiàn)實(shí)上是不可行的。加密算法本身也是很慢的,這使得使用RSA算法加密大量的數(shù)據(jù)變的有些不可行。這就使得一些現(xiàn)實(shí)中加密算法都基于RSA加密算法。PGP算法(以及大多數(shù)基于RSA算法的加密方法)使用公鑰來(lái)加密一個(gè)對(duì)稱加密算法的密鑰,然后再利用一個(gè)快速的對(duì)稱加密算法來(lái)加密數(shù)據(jù)。這個(gè)對(duì)稱算法的密鑰是隨機(jī)產(chǎn)生的,是保密的,因此,得到這個(gè)密鑰的唯一方法就是使用私鑰來(lái)解密。

  我們舉一個(gè)例子:假定現(xiàn)在要加密一些數(shù)據(jù)使用密鑰‘12345’。利用RSA公鑰,使用RSA算法加密這個(gè)密鑰‘12345’,并把它放在要加密的數(shù)據(jù)的前面(可能后面跟著一個(gè)分割符或文件長(zhǎng)度,以區(qū)分?jǐn)?shù)據(jù)和密鑰),然后,使用對(duì)稱加密算法加密正文,使用的密鑰就是‘12345’。當(dāng)對(duì)方收到時(shí),解密程序找到加密過(guò)的密鑰,并利用RSA私鑰解密出來(lái),然后再確定出數(shù)據(jù)的開(kāi)始位置,利用密鑰‘12345’來(lái)解密數(shù)據(jù)。這樣就使得一個(gè)可靠的經(jīng)過(guò)高效加密的數(shù)據(jù)安全地傳輸和解密。

  一些簡(jiǎn)單的基于RSA算法的加密算法可在下面的站點(diǎn)找到:

  ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa

 三、一個(gè)嶄新的多步加密算法

  現(xiàn)在又出現(xiàn)了一種新的加密算法,據(jù)說(shuō)是幾乎不可能被破譯的。這個(gè)算法在1998年6月1日才正式公布的。下面詳細(xì)的介紹這個(gè)算法:

  使用一系列的數(shù)字(比如說(shuō)128位密鑰),來(lái)產(chǎn)生一個(gè)可重復(fù)的但高度隨機(jī)化的偽隨機(jī)的數(shù)字的序列。一次使用256個(gè)表項(xiàng),使用隨機(jī)數(shù)序列來(lái)產(chǎn)生密碼轉(zhuǎn)表,如下所示:

  把256個(gè)隨機(jī)數(shù)放在一個(gè)距陣中,然后對(duì)他們進(jìn)行排序,使用這樣一種方式(我們要記住 初的位置)使用 初的位置來(lái)產(chǎn)生一個(gè)表,隨意排序的表,表中的數(shù)字在0到255之間。如果不是很明白如何來(lái)做,就可以不管它。但是,下面也提供了一些原碼(在下面)是我們明白是如何來(lái)做的。現(xiàn)在,產(chǎn)生了一個(gè)具體的256字節(jié)的表。讓這個(gè)隨機(jī)數(shù)產(chǎn)生器接著來(lái)產(chǎn)生這個(gè)表中的其余的數(shù),以至于每個(gè)表是不同的。下一步,使用"shotgun technique"技術(shù)來(lái)產(chǎn)生解碼表。基本上說(shuō),如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一個(gè)在0到255之間的數(shù))。在一個(gè)循環(huán)中賦值,使用一個(gè)256字節(jié)的解碼表它對(duì)應(yīng)于我們剛才在上一步產(chǎn)生的256字節(jié)的加密表。

  使用這個(gè)方法,已經(jīng)可以產(chǎn)生這樣的一個(gè)表,表的順序是隨機(jī),所以產(chǎn)生這256個(gè)字節(jié)的隨機(jī)數(shù)使用的是二次偽隨機(jī),使用了兩個(gè)額外的16位的密碼.現(xiàn)在,已經(jīng)有了兩張轉(zhuǎn)換表,基本的加密解密是如下這樣工作的。前一個(gè)字節(jié)密文是這個(gè)256字節(jié)的表的索引。或者,為了提高加密效果,可以使用多余8位的值,甚至使用校驗(yàn)和或者CRC算法來(lái)產(chǎn)生索引字節(jié)。假定這個(gè)表是256*256的數(shù)組,將會(huì)是下面的樣子:

  crypto1 = a[crypto0][value]

  變量'crypto1'是加密后的數(shù)據(jù),'crypto0'是前一個(gè)加密數(shù)據(jù)(或著是前面幾個(gè)加密數(shù)據(jù)的一個(gè)函數(shù)值)。很自然的,第一個(gè)數(shù)據(jù)需要一個(gè)“種子”,這個(gè)“種子” 是我們必須記住的。如果使用256*256的表,這樣做將會(huì)增加密文的長(zhǎng)度。或者,可以使用你產(chǎn)生出隨機(jī)數(shù)序列所用的密碼,也可能是它的CRC校驗(yàn)和。順便提及的是曾作過(guò)這樣一個(gè)測(cè)試: 使用16個(gè)字節(jié)來(lái)產(chǎn)生表的索引,以128位的密鑰作為這16個(gè)字節(jié)的初始的"種子"。然后,在產(chǎn)生出這些隨機(jī)數(shù)的表之后,就可以用來(lái)加密數(shù)據(jù),速度達(dá)到每秒鐘100k個(gè)字節(jié)。一定要保證在加密與解密時(shí)都使用加密的值作為表的索引,而且這兩次一定要匹配。

  加密時(shí)所產(chǎn)生的偽隨機(jī)序列是很隨意的,可以設(shè)計(jì)成想要的任何序列。沒(méi)有關(guān)于這個(gè)隨機(jī)序列的詳細(xì)的信息,解密密文是不現(xiàn)實(shí)的。例如:一些ASCII碼的序列,如“eeeeeeee"可能被轉(zhuǎn)化成一些隨機(jī)的沒(méi)有任何意義的亂碼,每一個(gè)字節(jié)都依賴于其前一個(gè)字節(jié)的密文,而不是實(shí)際的值。對(duì)于任一個(gè)單個(gè)的字符的這種變換來(lái)說(shuō),隱藏了加密數(shù)據(jù)的有效的真正的長(zhǎng)度。

  如果確實(shí)不理解如何來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù)序列,就考慮FIBBONACCI數(shù)列,使用2個(gè)雙字(64位)的數(shù)作為產(chǎn)生隨機(jī)數(shù)的種子,再加上第三個(gè)雙字來(lái)做XOR操作。 這個(gè)算法產(chǎn)生了一系列的隨機(jī)數(shù)。算法如下:

  unsigned long dw1, dw2, dw3, dwMask;

  int i1;

  unsigned long aRandom[256];

  dw1 = {seed #1};

  dw2 = {seed #2};

  dwMask = {seed #3};

  // this gives you 3 32-bit "seeds", or 96 bits total

  for(i1=0; i1 < 256; i1++)

  {

  dw3 = (dw1 + dw2) ^ dwMask;

  aRandom[i1] = dw3;

  dw1 = dw2;

  dw2 = dw3;

  }

  如果想產(chǎn)生一系列的隨機(jī)數(shù)字,比如說(shuō),在0和列表中所有的隨機(jī)數(shù)之間的一些數(shù),就可以使用下面的方法:

  int __cdecl MySortProc(void *p1, void *p2)

  {

  unsigned long **pp1 = (unsigned long **)p1;

  unsigned long **pp2 = (unsigned long **)p2;

  if(**pp1 < **pp2)

  return(-1);

  else if(**pp1 > *pp2)

  return(1);

  return(0);

  }

  ...

  int i1;

  unsigned long *apRandom[256];

  unsigned long aRandom[256]; // same array as before, in this case

  int aResult[256]; // results go here

  for(i1=0; i1 < 256; i1++)

  {

  apRandom[i1] = aRandom + i1;

  }

  // now sort it

  qsort(apRandom, 256, sizeof(*apRandom), MySortProc);

  // final step - offsets for pointers are placed into output array

  for(i1=0; i1 < 256; i1++)

  {

  aResult[i1] = (int)(apRandom[i1] - aRandom);

  }

  ...

  變量'aResult'中的值應(yīng)該是一個(gè)排過(guò)序的唯一的一系列的整數(shù)的數(shù)組,整數(shù)的值的范圍均在0到255之間。這樣一個(gè)數(shù)組是非常有用的,例如:對(duì)一個(gè)字節(jié)對(duì)字節(jié)的轉(zhuǎn)換表,就可以很容易并且非常可靠的來(lái)產(chǎn)生一個(gè)短的密鑰(經(jīng)常作為一些隨機(jī)數(shù)的種子)。這樣一個(gè)表還有其他的用處,比如說(shuō):來(lái)產(chǎn)生一個(gè)隨機(jī)的字符,計(jì)算機(jī)游戲中一個(gè)物體的隨機(jī)的位置等等。上面的例子就其本身而言并沒(méi)有構(gòu)成一個(gè)加密算法,只是加密算法一個(gè)組成部分。

  作為一個(gè)測(cè)試,開(kāi)發(fā)了一個(gè)應(yīng)用程序來(lái)測(cè)試上面所描述的加密算法。程序本身都經(jīng)過(guò)了幾次的優(yōu)化和修改,來(lái)提高隨機(jī)數(shù)的真正的隨機(jī)性和防止會(huì)產(chǎn)生一些短的可重復(fù)的用于加密的隨機(jī)數(shù)。用這個(gè)程序來(lái)加密一個(gè)文件,破解這個(gè)文件可能會(huì)需要非常巨大的時(shí)間以至于在現(xiàn)實(shí)上是不可能的。

  四、結(jié)論

  由于在現(xiàn)實(shí)生活中,我們要確保一些敏感的數(shù)據(jù)只能被有相應(yīng)權(quán)限的人看到,要確保信息在傳輸?shù)倪^(guò)程中不會(huì)被篡改,截取,這就需要很多的安全系統(tǒng)大量的應(yīng)用于政府、大公司以及個(gè)人系統(tǒng)。數(shù)據(jù)加密是肯定可以被破解的,但我們所想要的是一個(gè)特定時(shí)期的安全,也就是說(shuō),密文的破解應(yīng)該是足夠的困難,在現(xiàn)實(shí)上是不可能的,尤其是短時(shí)間內(nèi)。


想在此處做廣告,請(qǐng)聯(lián)系QQ:879330360
百度中找“當(dāng)前各種加密方案完全解析”的內(nèi)容
GOOGLE中找“當(dāng)前各種加密方案完全解析”的內(nèi)容
關(guān)鍵詞:當(dāng)前各種加密方案完全解析 相關(guān)文章
相關(guān)推薦文章
熱門文章
新文章
想在此處做廣告,請(qǐng)聯(lián)系QQ:879330360
家電維修班,手機(jī)維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動(dòng)工具維修班、電動(dòng)車摩托車維修班、網(wǎng)絡(luò)營(yíng)銷培訓(xùn)、網(wǎng)站設(shè)計(jì)培訓(xùn)、淘寶培訓(xùn)---全國(guó)招生 家電維修班,手機(jī)維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動(dòng)工具維修班、電動(dòng)車摩托車維修班、網(wǎng)絡(luò)營(yíng)銷培訓(xùn)、網(wǎng)站設(shè)計(jì)培訓(xùn)、淘寶培訓(xùn)---全國(guó)招生 主站蜘蛛池模板: 亚州三级久久电影 | 国内精品伊人久久久久 | 亚洲精品自在在线观看 | 久久热最新网站获取3 | 无码欧美喷潮福利XXXX | 俄罗斯bbbb| 3D内射动漫同人资源在线观看 | 精品一产品大全 | 精品国产乱码久久久人妻 | yellow在线观看免费观看大全 | 受坐在攻腿上H道具PLAY | 免费人成在线观看网站视频 | 蜜桃无码AV视频在线观看 | 最新国产三级在线不卡视频 | 女侠含泪巨臀迎合79 | 青柠在线观看免费播放电影 | 古代荡女丫鬟高H辣文纯肉 姑娘视频日本在线播放 | 中俄两军在日本海等上空战略巡航 | 亚洲欧美综合在线中文 | 花蝴蝶高清在线视频免费观看 | 精品人妻一区二区三区视频53 | 51精品国产AV无码久久久密桃 | 玛雅成人网 | 木凡的天空在线收听 | 边摸边吃奶玩乳尖视频 | 午夜理论在线观看不卡大地影院 | 丰满女朋友在线观看中文 | 国产中文欧美日韩在线 | 老色69久久九九精品高潮 | 最近韩国日本免费观看mv免费版 | 亚洲AV午夜福利精品香蕉麻豆 | 国产精品1卡二卡三卡四卡乱码 | 亚洲黄色免费在线观看 | av av在线 | 2020国产成人精品视频人 | 伊人久久大香网 | 亚洲热在线视频 | 亚洲高清视频一区 | 嫩草AV久久伊人妇女 | 我的漂亮朋友在线观看全集免费 | FREESEXVIDEO 性老少配 |