當前位置:首頁 » 操作系統 » wilson演算法

wilson演算法

發布時間: 2023-09-08 00:56:09

演算法是什麼

演算法是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令。

演算法代表著用系統的方法描述解決問題的策略機制,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸察並臘出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間,空間或效率來完成同樣的任務。

演算法中的指令描述的是一個計算。當其運行時能從一個初始狀態和初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態,一個狀態到另一個狀態的轉移不一定是確定的。

演算法思想:

1、遞推法

遞推是序列計算機中的一種常用演算法,它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定項的值。其思想是把一個復雜蔽卜的龐大的計算過程轉化為簡單過程的多次重復,該演算法利用了計算機速度快和不知疲倦的機器特點。

2、遞歸法

程序調用自身的編程技巧稱為遞歸,一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法。它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需敗滑要的多次重復計算。

以上內容參考:網路—演算法

② ARM架構簡介及詳細資料

歷史

一顆主要用於路由器的Conexant ARM處理器是Acorn電腦公司(Acorn Computers Ltd)於1983年開始的開發計畫。

這個團隊由Roger Wilson和Steve Furber帶領,著手開發一種新架構,類似進階的MOS Technology 6502處理器。Acorn有一大堆建構在6502架構上的電腦,因此能設計出一顆類似的晶片即意味著對公司有很大的優勢。

團隊在1985年時開發出ARM1 Sample版,而首顆"真正"的產能型ARM2於次年量產。ARM2具有32位的數據匯流排、26位的定址空間,並提供64 Mbyte的定址范圍與16個32-bit的暫存器。這些暫存器其中有一顆做為(word大小)程式計數器,其前面6 bits和後面2 bits用來保存處理器狀態標記(Processor Status Flags)。ARM2可能是全世界最簡單實用的32位微處理器,其僅容納了30,000個電晶體(相較於Motorola六年後的68000其包含了70,000顆)。之所以精簡的原因在於它不含微碼(請參閱microcode)(這表示大概只有68000的1/3至1/4),而與現今大多數的 CPU 不同,它沒有包含任何的高速快取。這個精簡的特色使它只需消耗很少的電能,卻能發揮比 Intel 80286 更好的效能。後繼的處理器ARM3更備有4KB的高速快取,使它能發揮更佳的效能。

在1980年代晚期,蘋果電腦開始與Acorn合作開發新版的ARM核心,由於這專案非常重要,Acorn甚至於1990年將設計團隊另組成一間名為安謀國際科技(Advanced RISC Machines Ltd.)的新公司。也基於這原因,使得差正ARM有時候反而稱作Advanced RISC Machine而不是Acorn RISC Machine。由扒森於其母公司ARM Holdings plc於1998年的倫敦交易市場和NASDAQ掛牌上市[1],使得Advanced RISC Machines成了ARM Ltd旗下擁有的產品。

這個專案到後來進入了ARM6,首版的式樣在1991年釋出,然後蘋果電腦使用ARM6架構的ARM 610來當作他們Apple Newton PDA的基礎。在1994年,Acorn使用ARM 610做為他們Risc PC電腦內的CPU。

在這些變革之後,核心部份卻大多維持一樣的大小。ARM2有30,000顆電晶體,但ARM6卻也只增長到35,000顆。主要概念是以ODM的方式,使ARM核心能搭配一些選配的零件而製成一顆完整的CPU,而且可在現有的晶圓廠里製作並以低成本的方式達到很大的效能。

ARM的經營模式在於出售其智慧財產權核(IP core),授權廠家依照設計製作出建構於此核的微控制器和中央處理器。最成功的實作案例屬 ARM7TDMI,幾乎賣出了數億套內建微控制器的裝置。

DEC 購買這個架構虛此悔的產權(此處會造成混淆在於其本身也製造 DEC Alpha 並研發出StrongARM。在 233 MHz 的頻率下,這顆 CPU 只消耗一瓦特的電能(後來的晶片消耗得更少)。這項設計後來為了和 Intel 的控訴和解而技術移轉,Intel 因而趁機以 StrongARM 架構補強他們老舊的 i960 產線。Intel 後來開發出他們自有的高效能實作,稱作XScale,之後也賣給了 Marvell。

支援智慧型型手機、PDA和其他手持裝置最常見的架構是ARMv4。XScale 和 ARM926 處理器是ARMv5TE,而且比起建構在 ARMv4 的 StrongARM、ARM925T 和 ARM7TDMI 等處理器還更常見於許多高階裝置上。架構版本如下欄所示。

設計檔案

講求精簡又快速的設計方式,整體電路化卻又不採用微碼,就像早期使用在Acorn微電腦的8位6502處理器。

ARM架構包含了下述RISC特性:

讀取/儲存 架構

不支援地址不對齊記憶體存取(ARMv6核心現已支持)

正交指令集(任意存取指令可以任意的定址方式存取數據Orthogonal instruction set)

大量的16 × 32-bit 暫存器陣列(register file)

固定的32 bits 操作碼(opcode)長度,降低編碼數量所產生的耗費,減輕解碼和流水線化的負擔。

大多均為一個CPU周期執行。

為了補強這種簡單的設計方式,相較於同時期的處理器如Intel 80286和Motorola 68020,還多加了一些特殊設計:

大部分指令可以條件式地執行,降低在分支時產生的負重,彌補分支預測器(branch predictor)的不足。

算數指令只會在要求時更改條件編碼(condition code)

32-bit筒型位移器(barrel shifter)可用來執行大部分的算數指令和定址計算而不會損失效能

強大的索引定址模式(addressing mode)

精簡但快速的雙優先權中斷子系統,具有可切換的暫存器組

有個附加在ARM設計中好玩的東西,就是使用一個4-bit 條件編碼 在每個指令前頭,表示每支指令的執行是否為有條件式的

這大大的減低了在記憶體存取指令時用到的編碼位,換句話說,它避免在對小型敘述如if做分支指令。有個標準的範例引用歐幾里得的最大公因子演算法:

在C程式語言中,循環為:

int gcd (int i, int j)

{

while (i != j)

if (i > j)

i -= j;

else

j -= i;

return i;

}

在ARM 匯編語言中,循環為:

loop CMP Ri, Rj ; 設定條件為 "NE"(不等於) if (i != j)

; "GT"(大於) if (i > j),

; or "LT"(小於) if (i < j)

SUBGT Ri, Ri, Rj ; 若 "GT"(大於), i = i-j;

SUBLT Rj, Rj, Ri ; 若 "LT"(小於), j = j-i;

BNE loop ; 若 "NE"(不等於),則繼續迴圈

這避開了then和else子句之間的分支。

另一項指令集的特色是,能將位移(shift)和回轉(rotate)等功能並成"資料處理"型的指令(算數、邏輯、和暫存器之間的搬移),因此舉例來說,一個C語言的敘述

a += (j << 2);

在ARM之下,可簡化成只需一個word和一個cycle即可完成的指令

ADD Ra, Ra, Rj, LSL #2

這結果可讓一般的ARM程式變得更加緊密,而不需經常使用記憶體存取,流水線也可以更有效地使用。即使在ARM以一般認定為慢速的速度下執行,與更復雜的CPU設計相比它仍能執行得不錯。

ARM處理器還有一些在其他RISC的架構所不常見到的特色,例如PC-相對定址(的確在ARM上PC為16個暫存器的其中一個)以及 前遞加或後遞加的定址模式。

另外一些注意事項是 ARM 處理器會隨著時間,不斷地增加它的指令集。某些早期的 ARM 處理器(比ARM7TDMI更早),譬如可能並未具備指令可以讀取兩 Bytes 的數量,因此,嚴格來講,對這些處理器產生程式碼時,就不可能處理如 C 語言物件中使用 "volatile short" 的資料型態。

ARM7 和大多數較早的設計具備三階段的流水線化(Pipeline):提取指令、解碼,並執行。較高效能的設計,如 ARM9,則有五階段的流水線化。提高效能的額外方式,包含一顆較快的加法器,和更廣的分支預測邏輯線路。

這個架構使用"協處理器"提供一種非侵入式的方法來延伸指令集,可透過軟體下 MCR、MRC、MRRC和MCRR 等指令來對協處理器定址。協處理器空間邏輯上通常分成16個協處理器,編號分別從 0 至 15 ,而第15號協處理器(CP15)是保留用作某些常用的控制功能,像是使用高速快取和記憶管理單元運算(若包含於處理器時)。

在 ARM 架構的機器中,周邊裝置連線處理器的方式,通常透過將裝置的實體暫存器對應到 ARM 的記憶體空間、協處理器空間,或是連線到另外依序接上處理器的裝置(如匯流排)。協處理器的存取延遲較低,所以有些周邊裝置(例如 XScale 中斷控制器)會設計成可透過不同方式存取(透過記憶體和協處理器)。

Thumb

較新的ARM處理器有一種16-bit指令模式,叫做Thumb,也許跟每個條件式執行指令均耗用4位的情形有關。在Thumb模式下,較小的opcode有更少的功能性。例如,只有分支可以是條件式的,且許多opcode無法存取所有CPU的暫存器。然而,較短的opcode提供整體更佳的編碼密度(注:意指程式碼在記憶體中占的空間),即使有些運算需要更多的指令。特別在記憶體埠或匯流排寬度限制在32 以下的情形時,更短的Thumb opcode能更有效地使用有限的記憶體頻寬,因而提供比32位程式碼更佳的效能。典型的嵌入式硬體僅具有較小的32-bit datapath定址范圍以及其他更窄的16 bits定址(例如Game Boy Advance)。在這種情形下,通常可行的方案是編譯成 Thumb 程式碼,並自行最佳化一些使用(非Thumb)32位指令集的CPU相關程式區,因而能將它們置入受限的32-bit匯流排寬度的記憶體中。

首顆具備 Thumb 技術的處理器是 ARM7TDMI。所有 ARM9 和後來的家族,包括 XScale 都納入了 Thumb 技術。

Jazelle

ARM 還開發出一項技術,Jazelle DBX (Direct Bytecode eXecution),允許它們在某些架構的硬體上加速執行Java bytecode,就如其他執行模式般,當呼叫一些無法支援bytecodes的特殊軟體時,能提供某些bytecodes的加速執行。它能在現存的ARM與Thumb模式之間互相執行。

首顆具備Jazelle技術的處理器是ARM926EJ-S:Jazelle以一個英文字母'J'標示於CPU名稱中。它用來讓手機製造商能夠加速執行Java ME的游戲和套用程式,也因此促使了這項技術不斷地開發。

Thumb-2

Thumb-2 技術首見於 ARM1156 核心 ,並於2003年發表。Thumb-2 擴充了受限的 16-bit Thumb 指令集,以額外的 32-bit 指令讓指令集的使用更廣泛。因此 Thumb-2 的預期目標是要達到近乎 Thumb 的編碼密度,但能表現出近乎 ARM 指令集在 32-bit 記憶體下的效能。

Thumb-2 至今也從 ARM 和 Thumb 指令集中派生出多種指令,包含位欄(bit-field)操作、分支建表(table branches),和條件執行等功能。

ThumbEE

ThumbEE,也就是所謂的Thumb-2EE,業界稱為Jazelle RCT技術,於2005年發表,首見於 Cortex-A8 處理器。ThumbEE 提供從 Thumb-2 而來的一些擴充性,在所處的執行環境(Execution Environment)下,使得指令集能特別適用於執行階段(Runtime)的編碼產生(例如即時編譯)。Thumb-2EE 是專為一些語言如 Limbo、Java、C#、Perl 和 Python,並能讓 即時編譯器 能夠輸出更小的編解碼卻不會影響到效能。

ThumbEE 所提供的新功能,包括在每次存取指令時自動檢查是否有無效指標,以及一種可以執行陣列范圍檢查的指令,並能夠分支到分類器(handlers),其包含一小部份經常呼叫的編碼,通常用於高階語言功能的實作,例如對一個新物件做記憶體配置。

NEON

進階 SIMD 延伸集,業界稱為NEON技術,它是一個結合 64 和 128 bit 的 SIMD(Single Instruction Multiple Data 單指令多重數據)指令集,其針對多媒體和訊號處理程式具備標准化加速的能力。NEON 可以在 10 MHz 的 CPU 上執行 MP3 音效解碼,且可以執行 13 MHz 頻率以下的 GSM AMR (Adaptive Multi-Rate) 語音編碼。NEON具有一組廣泛的指令集、各自的暫存器陣列,以及獨立執行的硬體。NEON 支援 8-, 16-, 32- 和 64-bit 的整數及單精度浮點數據,並以 SIMD 的方式運算,執行圖形和游戲處理中關於語音/視訊的部分。SIMD 在 向量超級處理機 中是個決定性的要素,它具備同時多項處理功能。在 NEON 技術中,SIMD 最高可支援到同時 16 個運算。

VFP

VFP 是在協同處理器針對ARM架構的衍生技術。它提供低成本的單精度和倍精度浮點運算能力,並完全相容於ANSI/IEEE Std 754-1985 二進制浮點算數標准。VFP 提供大多數適用於浮點運算的套用,例如PDA、智慧手機、語音壓縮解壓、3D圖像以及數位音效、印表機、機上盒,和汽車套用等。VFP 架構也支援 SIMD(單指令多重數據)平行化的短向量指令執行。這在圖像和訊號處理等套用上,非常有助於降低編碼大小並增加輸出效率。

在ARM-based處理器中,其他可見的浮點、或 SIMD 的協同處理器還包括了 FPA, FPE, iwMMXt。他們提供類似 VFP 的功能但在opcode層面上來說並不具有相容性。

安全性擴充

TrustZone(TM) 技術出現在 ARMv6KZ 以及較晚期的套用核心架構中。它提供了一種低成本的方案,針對系統單晶片(SoC)內加入專屬的安全核心,由硬體建構的存取控制方式支援兩顆虛擬的處理器。這個方式可使得套用程式核心能夠在兩個狀態之間切換(通常改稱為領域(worlds)以避免和其他功能領域的名稱混淆),在此架構下可以避免資訊從較可信的核心領域泄漏至較不安全的領域。這種核心領域之間的切換通常是與處理器其他功能完全無關聯性(orthogonal),因此各個領域可以各自獨立運作但卻仍能使用同一顆核心。記憶體和周邊裝置也可因此得知目前核心運作的領域為何,並能針對這個方式來提供對裝置的機密和編碼進行存取控制。典型的 TrustZone 技術套用是要能在一個缺乏安全性的環境下完整地執行作業系統,並在可信的環境下能有更少的安全性的編碼。

授權方

ARM 公司本身並不靠自有的設計來製造或出售 CPU ,而是將處理器架構授權給有興趣的廠家。ARM 提供了多樣的授權條款,包括售價與散播性等項目。對於授權方來說,ARM 提供了 ARM 核心的整合硬體敘述,包含完整的軟體開發工具(編譯器、debugger、SDK),以及針對內含 ARM CPU 矽晶片的銷售權。對於無晶圓廠的授權方來說,其希望能將 ARM 核心整合到他們自行研發的晶片設計中,通常就僅針對取得一份生產就緒的智慧財產權核心(IP Core)認證。對這些客戶來說,ARM 會釋出所選的 ARM 核心的版圖,連同抽象模擬模型和測試程式,以協助設計整合和驗證。需求更多的客戶,包括整合元件製造商(IDM)和晶圓廠家,就選擇可合成的RTL(暫存器傳輸級,如 Verilog)形式來取得處理器的智慧財產權(IP)。藉著可整合的 RTL,客戶就有能力能進行架構上的最佳化與加強。這個方式能讓設計者完成額外的設計目標(如高震盪頻率、低能量耗損、指令集延伸等)而不會受限於無法更動的電路圖。雖然 ARM 並不授予授權方再次出售 ARM 架構本身,但授權方可以任意地出售製品(如晶片元件、評估板、完整系統等)。商用晶圓廠是特殊例子,因為他們不僅授予能出售包含 ARM 核心的矽晶成品,對其它客戶來講,他們通常也保留重製 ARM 核心的權利。

就像大多數 IP 出售方,ARM 依照使用價值來決定 IP 的售價。在架構上而言,更低效能的 ARM 核心比更高效能的核心擁有較低的授權費。以矽晶片實作而言,一顆可整合的核心要比一顆硬體宏(黑箱)核心要來得貴。更復雜的價位問題來講,持有 ARM 授權的商用晶圓廠(例如韓國三星和日本富士通)可以提供更低的授權價格給他們的晶圓廠客戶。透過晶圓廠自有的設計技術,客戶可以更低或是免費的ARM預付授權費來取得 ARM 核心。相較於不具備自有設計技術的專門半導體晶圓廠(如台積電和聯電),富士通/三星對每片晶圓多收取了兩至三倍的費用。對中少量的套用而言,具備設計部門的晶圓廠提供較低的整體價格(透過授權費用的補助)。對於量產而言,由於長期的成本縮減可藉由更低的晶圓價格,減少ARM的NRE成本,使得專門的晶圓廠也成了一個更好的選擇。

許多半導體公司持有 ARM 授權:Atmel、Broad、Cirrus Logic、Freescale(於2004從摩托羅拉公司獨立出來)、富士通、英特爾(藉由和Digital的控訴調停)、IBM,英飛凌科技,任天堂,恩智浦半導體(於2006年從飛利浦獨立出來)、OKI電氣工業,三星電子,Sharp,STMicroelectronics,德州儀器 和 VLSI等許多這些公司均擁有各個不同形式的ARM授權。雖然ARM的授權項目由保密契約所涵蓋,在智慧財產權工業,ARM是廣為人知最昂貴的CPU核心之一。單一的客戶產品包含一個基本的 ARM 核心可能就需索取一次高達美金20萬的授權費用。而若是牽涉到大量架構上修改,則費用就可能超過千萬美元

③ 密文是什麼 具體給我講解一下

密文是相對於明文說的,明文其實就是你要傳達的消息,而明文通過加密之後就成了密文,密文其實是信息安全的一個詞彙。幫你介紹一下。

信息安全的發展歷史

通信保密科學的誕生
古羅馬帝國時期的Caesar密碼:能夠將明文信息變換為人們看不懂的字元串,(密文),當密文傳到夥伴手中時,又可方便的還原為原來的明文形式。 Caesar密碼由明文字母循環移3位得到。
1568年,L.Battista發明了多表代替密碼,並在美國南北戰爭期間有聯軍使用。例:Vigenere密碼和Beaufort密碼
1854年,Playfair發明了多字母代替密碼,英國在第一次世界大戰中使用了此密碼。例:Hill密碼,多表、多字母代替密碼成為古典密碼學的主流。
密碼破譯技術(密碼分析)的發展:例:以1918年W.Friedman使用重合指數破譯多表代替密碼技術為里程碑。 1949年C.Shannon的《保密系統的通信理論》文章發表在貝爾系統技術雜志上。這兩個成果為密碼學的科學研究奠定了基礎。從藝術變為科學。實際上,這就是通信保密科學的誕生,其中密碼是核心技術。

公鑰密碼學革命
25年之後,20世紀70年代,IBM公司的DES(美國數據加密標准)和1976年Diffie-Hellman,提出了公開密鑰密碼思想,1977年公鑰密碼演算法RSA的提出為密碼學的發展注入了新的活力。
公鑰密碼掀起了一場革命,對信息安全有三方面的貢獻:首次從計算復雜性上刻畫了密碼演算法的強度,突破了Shannon僅關心理論強度的局限性;他將傳統密碼演算法中兩個密鑰管理中的保密性要求,轉換為保護其中一格的保密性及另一格的完整性的要求;它將傳統密碼演算法中密鑰歸屬從通信兩方變為一個單獨的用戶,從而使密鑰的管理復雜度有了較大下降。
公鑰密碼的提出,注意:一是密碼學的研究逐步超越了數據的通信保密范圍,開展了對數據的完整性、數字簽名等技術的研究;二是隨著計算機和網路的發展,密碼學一逐步成為計算機安全、網路安全的重要支柱,使得數據安全成為信息安全的全新內容,超越了以往物理安全占據計算機安全的主導地位狀態。

訪問控制技術與可信計算機評估准則
1969年,B.Lampson提出了訪問控制模型。
1973年,D.Bell 和L.Lapala,創立了一種模擬軍事安全策略的計算機操作模型,這是最早也是最常用的一種計算機多級安全模型。
1985年,美國國防部在Bell-Lapala模型的基礎上提出了可信計算機評估准則(通常稱為橘皮書)。按照計算機系統的安全防護能力,分成8個等級。
1987年,Clark-Wilson模型針對完整性保護和商業應用提出的。
信息保障
1998年10月,美國國家安全局(NSA)頒布了信息保障技術框架1.1版,2003年2月6日,美國國防部(DOD)頒布了信息保障實施命令8500.2,從而信息保障成為美國國防組織實施信息化作戰的既定指導思想。
信息保障(IA:information assurance):通過確保信息的可用性、完整性、可識別性、保密性和抵賴性來保護信息系統,同時引入保護、檢測及響應能力,為信息系統提供恢復功能。這就是信息保障模型PDRR。
protect保護、detect檢測、react響應、restore 恢復
美國信息保障技術框架的推進使人們意識到對信息安全的認識不要停留在保護的框架之下,同時還需要注意信息系統的檢測和響應能力。
2003年,中國發布了《國家信息領導小組關於信息安全保障工作的意見》,這是國家將信息安全提到戰略高度的指導性文件

信息保密技術的研究成果:
發展各種密碼演算法及其應用:
DES(數據加密標准)、RSA(公開密鑰體制)、ECC(橢圓曲線離散對數密碼體制)等。
計算機信息系統安全模型和安全評價准則:
訪問監視器模型、多級安全模型等;TCSEC(可信計算機系統評價准則)、ITSEC(信息技術安全評價准則)等。

加密(Encryption)
加密是通過對信息的重新組合,使得只有收發雙方才能解碼並還原信息的一種手段。
傳統的加密系統是以密鑰為基礎的,這是一種對稱加密,也就是說,用戶使用同一個密鑰加密和解密。
目前,隨著技術的進步,加密正逐步被集成到系統和網路中,如IETF正在發展的下一代網際協議IPv6。硬體方面,Intel公司也在研製用於PC機和伺服器主板的加密協處理器。

身份認證(Authentication)

防火牆是系統的第一道防線,用以防止非法數據的侵入,而安全檢查的作用則是阻止非法用戶。有多種方法來鑒別一個用戶的合法性,密碼是最常用的,但由於有許多用戶採用了很容易被猜到的單詞或短語作為密碼,使得該方法經常失效。其它方法包括對人體生理特徵(如指紋)的識別,智能IC卡和USB盤。

數字簽名(Digital Signature)
數字簽名可以用來證明消息確實是由發送者簽發的,而且,當數字簽名用於存儲的數據或程序時,可以用來驗證數據或程序的完整性。
美國政府採用的數字簽名標准(Digital Signature Standard,DSS)使用了安全哈希運演算法則。用該演算法對被處理信息進行計算,可得到一個160位(bit)的數字串,把這個數字串與信息的密鑰以某種方式組合起來,從而得到數字簽名。

內容檢查(Content Inspection)
即使有了防火牆、身份認證和加密,人們仍擔心遭到病毒的攻擊。有些病毒通過E-mail或用戶下載的ActiveX和Java小程序(Applet)進行傳播,帶病毒的Applet被激活後,又可能會自動下載別的Applet。現有的反病毒軟體可以清除E-mail病毒,對付新型Java和ActiveX病毒也有一些辦法,如完善防火牆,使之能監控Applet的運行,或者給Applet加上標簽,讓用戶知道他們的來源。

介紹一些加密的知識

密鑰加/解密系統模型
在1976年,Diffie及Hellman發表其論文「New Directions in Cryptography」[9]之前,所謂的密碼學就是指對稱密鑰密碼系統。因為加/解密用的是同一把密鑰,所以也稱為單一密鑰密碼系統。

這類演算法可謂歷史悠久,從最早的凱撒密碼到目前使用最多的DES密碼演算法,都屬於單一密鑰密碼系統。

通常,一個密鑰加密系統包括以下幾個部分:
① 消息空間M(Message)
② 密文空間C(Ciphertext)
③ 密鑰空間K(Key)
④ 加密演算法E(Encryption Algorithm)
⑤ 解密演算法D(Decryption Algorithm)
消息空間中的消息M(稱之為明文)通過由加密密鑰K1控制的加密演算法加密後得到密文C。密文C通過解密密鑰K2控制的解密演算法又可恢復出原始明文M。即:
EK1(M)=C
DK2(C)=M
DK2(EK1(M))=M
概念:
當演算法的加密密鑰能夠從解密密鑰中推算出來,或反之,解密密鑰可以從加密密鑰中推算出來時,稱此演算法為對稱演算法,也稱秘密密鑰演算法或單密鑰演算法;

當加密密鑰和解密密鑰不同並且其中一個密鑰不能通過另一個密鑰推算出來時,稱此演算法為公開密鑰演算法。

1.凱撒密碼變換
更一般化的移位替代密碼變換為
加密:E(m)=(m+k) mod 26
解密:D(c)=(c-k) mod 26

2.置換密碼
在置換密碼中,明文和密文的字母保持相同,但順序被打亂了。在簡單的縱行置換密碼中,明文以固定的寬度水平地寫在一張圖表紙上,密文按垂直方向讀出;解密就是將密文按相同的寬度垂直地寫在圖表紙上,然後水平地讀出明文。例如:
明文:encryption is the transformation of data into some unreadable form
密文:eiffob nsodml ctraee rhmtuf yeaano pttirr trinem iaota onnod nsosa

20世紀40年代,Shannon提出了一個常用的評估概念。特認為一個好的加密演算法應具有模糊性和擴散性。
模糊性:加密演算法應隱藏所有的局部模式,即,語言的任何識別字元都應變得模糊,加密法應將可能導致破解密鑰的提示性語言特徵進行隱藏;
擴散性:要求加密法將密文的不同部分進行混合,是任何字元都不在其原來的位置。

加密演算法易破解的原因是未能滿足這兩個Shannon條件。

數據加密標准(DES)

DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,其功能是把輸入的64位數據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位,經過16次迭代運算後。得到L16、R16,將此作為輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算.

具體方法 需要圖 我放不上去對不起了
可以將DES演算法歸結如下:
子密鑰生成:
C[0]D[0] = PC–1(K)
for 1 <= i <= 16
{C[i] = LS[i](C[i−1])
D[i] = LS[i](D[i−1])
K[i] = PC–2(C[i]D[i])}
加密過程:
L[0]R[0] = IP(x)
for 1 <= i <= 16
{L[i] = R[i−1]
R[i] = L[i−1] XOR f (R[i−1], K[i])}
c= IP−1(R[16]L[16])v
解密過程:
R[16]L[16] = IP(c)
for 1 <= i <= 16
{R[i−1] = L[i]
L[i−1] = R[i] XOR f (L[i], K[i])}
x= IP−1(L[0]R[0])
DES使用56位密鑰對64位的數據塊進行加密,並對64位的數據塊進行16輪編碼。與每輪編碼時,一個48位的「每輪」密鑰值由56位的完整密鑰得出來。DES用軟體進行解碼需要用很長時間,而用硬體解碼速度非常快,但幸運的是當時大多數黑客並沒有足夠的設備製造出這種硬體設備。
在1977年,人們估計要耗資兩千萬美元才能建成一個專門計算機用於DES的解密,而且需要12個小時的破解才能得到結果。所以,當時DES被認為是一種十分強壯的加密方法。 但是,當今的計算機速度越來越快了,製造一台這樣特殊的機器的花費已經降到了十萬美元左右,所以用它來保護十億美元的銀行間線纜時,就會仔細考慮了。另一個方面,如果只用它來保護一台伺服器,那麼DES確實是一種好的辦法,因為黑客絕不會僅僅為入侵一個伺服器而花那麼多的錢破解DES密文。由於現在已經能用二十萬美圓製造一台破譯DES的特殊的計算機,所以現在再對要求「強壯」加密的場合已經不再適用了

DES演算法的應用誤區

DES演算法具有極高安全性,到目前為止,除了用窮舉搜索法對DES演算法進行攻擊外,還沒有發現更有效的辦法。而56位長的密鑰的窮舉空間為256,這意味著如果一台計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這是難以實現的,當然,隨著科學技術的發展,當出現超高速計算機後,我們可考慮把DES密鑰的長度再增長一些,以此來達到更高的保密程度。
由上述DES演算法介紹我們可以看到:DES演算法中只用到64位密鑰中的其中56位,而第8、16、24、......64位8個位並未參與DES運算,這一點,向我們提出了一個應用上的要求,即DES的安全性是基於除了8,16,24,......64位外的其餘56位的組合變化256才得以保證的。因此,在實際應用中,我們應避開使用第8,16,24,......64位作為有效數據位,而使用其它的56位作為有效數據位,才能保證DES演算法安全可靠地發揮作用。如果不了解這一點,把密鑰Key的8,16,24,..... .64位作為有效數據使用,將不能保證DES加密數據的安全性,對運用DES來達到保密作用的系統產生數據被破譯的危險,這正是DES演算法在應用上的誤區,留下了被人攻擊、被人破譯的極大隱患。

A5 算 法

序列密碼簡介
序列密碼又稱流密碼,它將明文劃分成字元(如單個字母)或其編碼的基本單元(如0、1),然後將其與密鑰流作用以加密,解密時以同步產生的相同密鑰流實現。
序列密碼強度完全依賴於密鑰流產生器所產生的序列的隨機性和不可預測性,其核心問題是密鑰流生成器的設計。而保持收發兩端密鑰流的精確同步是實現可靠解密的關鍵技術。

A5演算法
A5演算法是一種序列密碼,它是歐洲GSM標准中規定的加密演算法,用於數字蜂窩行動電話的加密,加密從用戶設備到基站之間的鏈路。A5演算法包括很多種,主要為A5/1和A5/2。其中,A5/1為強加密演算法,適用於歐洲地區;A5/2為弱加密演算法,適用於歐洲以外的地區。這里將詳細討論A5/1演算法。
A5/1演算法的主要組成部分是三個長度不同的線性反饋移位寄存器(LFSR)R1、R2和R3,其長度分別為19、22和23。三個移位寄存器在時鍾的控制下進行左移,每次左移後,寄存器最低位由寄存器中的某些位異或後的位填充。各寄存器的反饋多項式為:
R1:x18+x17+x16+x13
R2:x21+x20
R3:x22+x21+x20+x7
A5演算法的輸入是64位的會話密鑰Kc和22位的隨機數(幀號)。

IDEA
IDEA即國際數據加密演算法,它的原型是PES(Proposed Encryption Standard)。對PES改進後的新演算法稱為IPES,並於1992年改名為IDEA(International Data Encryption Algorithm)。

IDEA是一個分組長度為64位的分組密碼演算法,密鑰長度為128位,同一個演算法即可用於加密,也可用於解密。
IDEA的加密過程包括兩部分:
(1) 輸入的64位明文組分成四個16位子分組:X1、X2、X3和X4。四個子分組作為演算法第一輪的輸入,總共進行八輪的迭代運算,產生64位的密文輸出。
(2) 輸入的128位會話密鑰產生八輪迭代所需的52個子密鑰(八輪運算中每輪需要六個,還有四個用於輸出變換)

子密鑰產生:輸入的128位密鑰分成八個16位子密鑰(作為第一輪運算的六個和第二輪運算的前兩個密鑰);將128位密鑰循環左移25位後再得八個子密鑰(前面四個用於第二輪,後面四個用於第三輪)。這一過程一直重復,直至產生所有密鑰。
IDEA的解密過程和加密過程相同,只是對子密鑰的要求不同。下表給出了加密子密鑰和相應的解密子密鑰。
密鑰間滿足:
Zi(r) ⊙ Zi(r) −1=1 mod (216+1)
−Zi(r)  +  Zi(r) =0 mod (216+1)

Blowfish演算法
Blowfish是Bruce Schneier設計的,可以免費使用。
Blowfish是一個16輪的分組密碼,明文分組長度為64位,使用變長密鑰(從32位到448位)。Blowfish演算法由兩部分組成:密鑰擴展和數據加密。

1. 數據加密
數據加密總共進行16輪的迭代,如圖所示。具體描述為(將明文x分成32位的兩部分:xL, xR)
for i = 1 to 16
{
xL = xL XOR Pi
xR = F(xL) XOR xR
if
{
交換xL和xR

}
}
xR = xR XOR P17
xL = xL XOR P18
合並xL 和xR
其中,P陣為18個32位子密鑰P1,P2,…,P18。
解密過程和加密過程完全一樣,只是密鑰P1,P2,…,P18以逆序使用。
2. 函數F
把xL分成四個8位子分組:a, b, c 和d,分別送入四個S盒,每個S盒為8位輸入,32位輸出。四個S盒的輸出經過一定的運算組合出32位輸出,運算為
F(xL) =((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232
其中,Si,x表示子分組x(x=a、b、c或d)經過Si (i=1、2、3或4)盒的輸出。

沒有太多地方寫了,不把整個過程列上面了,就簡單介紹一下好了。

GOST演算法
GOST是前蘇聯設計的分組密碼演算法,為前蘇聯國家標准局所採用,標准號為:28147–89[5]。
GOST的消息分組為64位,密鑰長度為256位,此外還有一些附加密鑰,採用32輪迭代。

RC5演算法
RC5是一種分組長度、密鑰長度和加密迭代輪數都可變的分組密碼體制。RC5演算法包括三部分:密鑰擴展、加密演算法和解密演算法。

PKZIP演算法
PKZIP加密演算法是一個一次加密一個位元組的、密鑰長度可變的序列密碼演算法,它被嵌入在PKZIP數據壓縮程序中。
該演算法使用了三個32位變數key0、key1、key2和一個從key2派生出來的8位變數key3。由密鑰初始化key0、key1和key2並在加密過程中由明文更新這三個變數。PKZIP序列密碼的主函數為updata_keys()。該函數根據輸入位元組(一般為明文),更新三個32位的變數並獲得key3。

重點:單向散列函數

MD5 算 法

md5的全稱是message-digestalgorithm5(信息-摘要演算法),在90年代初由和rsadatasecurityinc的ronaldl.rivest開發出來,經md2、md3和md4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是md2、md4還是md5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但md2的設計與md4和md5完全不同,那是因為md2是為8位機器做過設計優化的,而md4和md5卻是面向32位的電腦。
rivest在1989年開發出md2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,rogier和chauvaud發現如果忽略了檢驗和將產生md2沖突。md2演算法的加密後結果是唯一的--既沒有重復。 為了加強演算法的安全性,rivest在1990年又開發出md4演算法。md4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod512=448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位damg?rd/merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。denboer和bosselaers以及其他人很快的發現了攻擊md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到md4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,md4就此被淘汰掉了。 盡管md4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了md5以外,其中比較有名的還有sha-1、ripe-md以及haval等。

一年以後,即1991年,rivest開發出技術上更為趨近成熟的md5演算法。它在md4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然md5比md4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和md4設計有少許不同的步驟組成。在md5演算法中,信息-摘要的大小和填充的必要條件與md4完全相同。denboer和bosselaers曾發現md5演算法中的假沖突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。 vanoorschot和wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(brute-forcehashfunction),而且他們猜測一個被設計專門用來搜索md5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代md5演算法的md6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響md5的安全性。上面所有這些都不足以成為md5的在實際應用中的問題。並且,由於md5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,md5也不失為一種非常優秀的中間技術),md5怎麼都應該算得上是非常安全的了。

演算法
MD表示消息摘要(Message Digest)。MD5是MD4的改進版,該演算法對輸入的任意長度消息產生128位散列值(或消息摘要。MD5演算法可用圖4-2表示。
對md5演算法簡要的敘述可以為:md5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。

1) 附加填充位
首先填充消息,使其長度為一個比512的倍數小64位的數。填充方法:在消息後面填充一位1,然後填充所需數量的0。填充位的位數從1~512。
2) 附加長度
將原消息長度的64位表示附加在填充後的消息後面。當原消息長度大於264時,用消息長度mod 264填充。這時,消息長度恰好是512的整數倍。令M[0 1…N−1]為填充後消息的各個字(每字為32位),N是16的倍數。

3) 初始化MD緩沖區
初始化用於計算消息摘要的128位緩沖區。這個緩沖區由四個32位寄存器A、B、C、D表示。寄存器的初始化值為(按低位位元組在前的順序存放):
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10

4) 按512位的分組處理輸入消息
這一步為MD5的主循環,包括四輪,如圖4-3所示。每個循環都以當前的正在處理的512比特分組Yq和128比特緩沖值ABCD為輸入,然後更新緩沖內容。
四輪操作的不同之處在於每輪使用的非線性函數不同,在第一輪操作之前,首先把A、B、C、D復制到另外的變數a、b、c、d中。這四個非線性函數分別為(其輸入/輸出均為32位字):
F(X,Y,Z) = (XY)((~X) Z)
G(X,Y,Z) = (XZ)(Y(~Z))
H(X,Y,Z) = XYZ
I(X,Y,Z) = Y(X(~Z))
其中,表示按位與;表示按位或;~表示按位反;表示按位異或。
此外,由圖4-4可知,這一步中還用到了一個有64個元素的表T[1..64],T[i]=232×abs(sin(i)),i的單位為弧度。
根據以上描述,將這一步驟的處理過程歸納如下:
for i = 0 to N/16−1 do
/* 每次循環處理16個字,即512位元組的消息分組*/
/*把第i個字塊(512位)分成16個32位子分組拷貝到X中*/
for j = 0 to 15 do
Set X[j] to M[i*16+j]
end /*j 循環*/
/*把A存為AA,B存為BB,C存為CC,D存為DD*/
AA = A
BB = B
CC = C
DD = D
/* 第一輪*/
/* 令[abcd k s i]表示操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
其中,Y<<<s表示Y循環左移s位*/
/* 完成下列16個操作*/
[ABCD 0 7 1  ] [DABC 1 12 2  ] [CDAB 2 17 3  ] [BCDA 3 22 4  ]
[ABCD 4 7 5  ] [DABC 5 12 6  ] [CDAB 6 17 7  ] [BCDA 7 22 8  ]
[ABCD 8 7 9  ] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* 第二輪*/
/*令[abcd k s i]表示操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成下列16個操作*/
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/*第三輪*/
/*令[abcd k s t]表示操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成以下16個操作*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/*第四輪*/
/*令[abcd k s t]表示操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) */
/*完成以下16個操作*/
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /*i循環*/
5) 輸出
由A、B、C、D四個寄存器的輸出按低位位元組在前的順序(即以A的低位元組開始、D的高位元組結束)得到128位的消息摘要。
以上就是對MD5演算法的描述。MD5演算法的運算均為基本運算,比較容易實現且速度很快。

安全散列函數(SHA)

演算法
SHA是美國NIST和NSA共同設計的安全散列演算法(Secure Hash Algorithm),用於數字簽名標准DSS(Digital Signature Standard)。SHA的修改版SHA–1於1995年作為美國聯邦信息處理標准公告(FIPS PUB 180–1)發布[2]。

熱點內容
文件夾目錄鏈接 發布:2025-01-31 08:24:22 瀏覽:948
ftpdos命令上傳 發布:2025-01-31 08:14:44 瀏覽:105
intenumjava 發布:2025-01-31 08:14:37 瀏覽:802
android3x 發布:2025-01-31 08:13:03 瀏覽:600
如何購買安卓版live2d 發布:2025-01-31 08:13:01 瀏覽:279
python交互輸入 發布:2025-01-31 08:12:53 瀏覽:427
requestdatapython 發布:2025-01-31 08:02:01 瀏覽:44
javades加密工具 發布:2025-01-31 07:54:04 瀏覽:244
電話如何配置ip 發布:2025-01-31 07:48:48 瀏覽:300
2021賓士e300l哪個配置性價比高 發布:2025-01-31 07:47:14 瀏覽:656