DES(Data Encryption Standard)是在 1970 年代中期由美國 IBM 公司 發展出來的,且被美國國家標準公佈為資料加密標準的一種區塊加密 法。直到今日,儘管 DES 已經經歷了 20 個年頭,但在已知的公開文 獻中,還是無法完全、徹底地把DES 給破解掉。換句話說,DES 這套 加密方法至今仍被公認是安全的。
DES 屬於區塊加密法,而區塊加密法就是對一定大小的明文或密 文來做加密或解密動作。而在DES 這個加密系統中,其每次加密或解 密的區塊大小均為 64 位元,所以 DES 沒有密文擴充的問題。就一般 資料而言,無論明文火密文,其資料大小通常都大於64 位元。這時我 們只要將明/密文中美 64 位元當成一個區塊而加以切割,再對每一個區 塊作加密解密即可。但是對明文做區塊切割時,可能最後一個區塊的 大小會小於 64 位元。此時,我們要在此區塊之後附加”0”位元,直到 此區塊大小成為64 位元為止。
另一方面,DES 所用的加密或解密金匙(Key)也是 64 位元大小,但 因其中有 8 個位元是用來做錯誤更正(Error Correction),所以 64 位元中 真正是金匙效用的只有 56 位元。而 DES 加密或解密除了子金匙的順序 不同外,其餘的部分則是完全相同的。
DES 整體流程 ﹕
DES 的整體流程請參考 P.36 的圖 2-1,其為全部 16 個回合(Round) 的加/解密架構圖,其最上方的 64 位元輸入區塊資料,可能是明文,也 可能是密文,端視使用者要做加密或解密而定。而加解密的不同處,
只在於圖2-1 最右邊的 16 個子金匙之使用順序不同,加密之子金匙順 序為k1,k2,…,k16,而解密之子金匙順序正好相反,為 k16,k15,…,k1。
首先,加解密輸入區塊須依照P.39 表 2-1 之重排次序,進行初始 排列(Initial Permutation)動作,擾亂資料之原來順序後,再分為 L0 與 R0 兩個 32 位元的區塊。接著,R0 與第一個子金匙 k1 一同經過 f 函數 計算,而得到的32 位元輸出再與 L0 做位元間的互斥或(XOR)運算。
其結果成為下一個回合的R1,而 R0 則成為下一回合的 L1,如此連續 運作16 回合。
我們以下列兩個式子來表示其運作過程:
Ri = Li-1 XOR f(Ri-1,Ki) , Li = Ri-1,i =1,2,...,16
而最後所得到的R16 與 L16 不需再互換,直接連結成 64 位元的區 塊,在依P.39 表 2-2 之重排次序做一次終結排序動作,得到 64 位元的 輸出。
子金匙的產生 ﹕
子金匙的產生請參考P.37 圖 2-2。子金匙產生過程中的輸入,為使 用者所持有的64 元母金匙。而加密或解密時,使用者先將母金匙輸入 至子金匙產生流程中即可。首先先經過金匙排列 A(如 P.40 表 2-3) , 將母金匙的8 個除錯位元剔除掉,而留下真正的 56 位元母金匙。接著,
兵分兩路為兩個28 位元的區塊 C0 及 D0,再分別經過一個左旋函數(如 P.41 表 2-5) ,得到 C1 與 D1,連結成 56 位元資料,再依金匙排列 B(如 P.40 表 2-4)做重排動作,便可輸出子金匙 k1,而 k2 至 k16 之得法,依 此類推。
F 函數之功能 ﹕
P.38 圖 2-3 是 f 函數的計算過程架構。f 函數有兩個輸入資料:一 為32 位元的中間密文 R,另一部分是 48 位元的子金匙 K。32 位元的 中間密文R 先經過擴增排列 E(如 P.41 表 2-6) ,即擴增至 48 位元。接 著,再與另一輸入資料,即48 位元的子金匙 K 做互斥或(XOR)運算。
所得到的結果再平均分配給8 個替換盒 S1,S2,…,S8。
每個替換盒的輸出與輸入分別為6 位元與 4 位元。所以經過 8 個 替換盒的替換之後,總輸出資料遂成為4*8=32 位元。最後再經過縮減 排列P(如 P.41 表 2-7)縮減成 32 位元的結果,就是 f 函數的輸出。
替換盒的使用 ﹕
替換盒的替換方法是把6 位元輸入的最左與最右 2 個位元取出來 當 P.42 表 2-8 的列數,而中間剩餘的 4 個位元則拿出來當作表 2-8 的 行數。例:假設第一個替換盒S1 的 6 個輸入位元資料為( 011001 ) 2, 其中右邊為低位元。則我們選擇S1 的第( 01 ) 2 = 1 列及第( 1100 ) 2 = 12 行之內容,也就是 9 = ( 1001 ) 2 為輸出資料。
三、 PCI 介紹
PCI BUS 的簡史 ﹕
為了確保市場上不會擠滿了各種只針對特定處理器的區域匯流排 架構(P. 43 圖 3-1),Intel 制訂了 PCI 匯流排,且不再追隨 VESA VL 標準,因其不足已解決當時,和隨後五年的問題,且VL 匯流排對於 burst 傳輸支援很有限,限制了可達成的輸出率。最新的版本為 2.2 版,在1998 年 12 月 18 日完成,並於 1999 年 2 月生效。
PCI BUS 功能:
PCI 為 Peripheral Component Interconnect(週邊裝置元件互連) 的 縮寫。PCI 匯流排安裝於需要在彼此之間,或者(以及)與系統記憶 體間快速地存取,並且可被處理器已接近其內建匯流排之全速來存取 的配接卡。所有PCI 匯流排讀寫的傳輸皆能用 burst 傳輸的方式來執 行。Burst 的長度是由 burst master(匯流排主控器)來決定。在交易開始 之際,target 會被指定起始位址與交易型態,但不會告知 target 其傳輸 長度。當master 準備傳輸資料項的時候,它會通知 target,此資料項是 否為最後一筆。當傳完最後一筆資料項時,交易便告完成。
主要特色:
1. 與處理器無關:
為 PCI 匯流排所設計的元件是 PCI 所特定的,而非處理器特定 的,因此把裝置設計與處理器升級隔離。
2. 每個 PCI 匯流排支援將近 80 個 PCI 功能:
典型的PCI 匯流排實作支援大約十個電負載,而一個裝置對匯 流排來說都是一個負載。每一個裝置最多可以含有八個PCI 功 能。
3. 最多支援 256 個 PCI 匯流排:
規格提供了最多256 個 PCI 匯流排的支援。
4. 低電源消耗:
PCI 規格設計的主要目標之一就是,建立盡可能減少電流外洩 的系統設計。
5. 在所有的讀寫傳輸上都可以執行 burst:
32 位元 PCI 匯流排支援尖峰傳輸率每秒 132Mbytes 的讀寫傳 輸,64 位元 PCI 傳輸的尖峰傳輸率則為每秒 264Mbytes。而 64 位元、66MHz 的 PCI 匯流排傳輸率最大可達每秒
528Mbytes。
6. 匯流排速度:
2.0 修訂版規格支援最高的 PCI 匯流排速度為 33MHz。2.1 修 訂版則增加66MHz 的匯流排操作。
7. 64 位元匯流排寬度 ﹕
64 位元延伸的完整定義。
8. 存取時間:
60ns(當 PCI 匯流排的 initiator 正在寫入 PCI target,且匯流排 速度為33MHz 時)。
9. 並行的匯流排操作:
橋接器支援完整的匯流排並行性,處理器匯流排、PCI 匯流排,
以及擴充匯流排可同時使用。
10. 支援 bus master:
完整的bus master 支援允許對等的(peer-to-peer) PCI 匯流排 存取,以及透過PCI-to-PCI 及擴充匯流排橋接器來存取主記憶 體與擴充匯流排裝置。此外,PCI master 可以存取一在匯流排 階層中,另一個較低層的PCI 匯流排之 target。
11. 隱藏式匯流排仲裁:
當其他的bus master 在 PCI 匯流排上進行傳輸時,就會發生 PCI 匯流排仲裁。
12. 低接腳數:
減少匯流排訊號的使用,功能性的PCI target 只用 47 支腳,
initiator 只用 49 支腳。
13. 交易完整性的檢查:
位址、指令和資料的同位檢查。
14. 三種位址空間:
記憶體、I/O 及組態位址空間。
15. 自動組態:
具有支援自動化裝置偵測與組態的位元級(bit-level)組態暫存 器(Configuration Register)規格。
16. 軟體的通透性:
當軟體驅動程式和PCI 裝置或與其擴充匯流排有關的裝置通 訊時,它可以使用相同的指令集與狀態定義。
17. 附加卡:
規格包括PCI 連接器和附加卡的定義。
18. 附加卡大小:
規格定義了三種界面卡的大小:長、短、及可變高度的短卡。
PCI bus 操作簡介:
1. 基本定義:
burst 傳輸 ﹕
是由一個位址階段以及隨後兩個或更多個資料階段組成( P. 43 圖 3-2 ),且 bus master 只需參與一次匯流排上所有權的仲裁即可。在位 址階段裡,起始位址與交易型態會被生成,所有在匯流排上的裝置都 會閂鎖位址和交易型態,並將之解碼,以決定哪一個是target 裝置。
Target 裝置將起始位址閂鎖在一位址計數器中,並負責每個資料階段 的位址遞增。應用在PCI 時,target(若 bus master 要求執行時)會在第一 個資料階段完成後,強迫終止交易。master 必須重新參與匯流排的仲 裁,並嘗試以下一個資料項來繼續進行burst 模式。Target 會在第一個 資料階段完成後,終止每一次 burst 傳輸的嘗試。當然,在每一次 burst 傳輸都有其基本要素-位址與交易型態為位址階段的輸出。接著,在每 一個後續的資料階段裡,都可傳輸一個資料物件(在32 位元實作裡最 多32 位元,而在 64 位元裡實作最多為 64 位元)。
Initiator(起始者)、Target(標的裝置)或 Agent ﹕
在每一次 PCI burst 傳輸裡都有兩個參與者就是 initiator 和 target。
Initiator 或稱為 bus master 是起始傳輸的裝置,在 PCI 規格中經常被 使用到。Target 是目前的 initiator 為了進行資料傳輸而定址的裝置。
PCI initiator 與 target 裝置在規格裡通常被稱為 PCI-Compliant Agent。
2.PCI 的傳輸:
位址階段 ﹕
在此階段中,initiator 要確認 target 裝置(透過位址), 以及交 易型態(也稱為指令型態)。Target 裝置是以驅動一個在其指派給它 的範圍內之PCI 位址/資料匯流排起始位址來識別。同一時間 Initiator 以驅動一個在4 位元寬 PCI 指令/ 位元組致能匯流排上(Command or Byte Enable Bus)的指令型態來識別交易型態。Initiator 同時驅動 FRAME# 到低態訊號,表示匯流排上有一個有效的起始位址與交易型 態存在。又因initiator 只在一個 PCI 時脈週期內顯示起始位址與指 令,所每一個PCI target 裝置需在時脈的下一個上升邊緣閂鎖位址(位 址匯流排上)及指令(指令/位元組致能匯流排上),以便將來解碼,
且target 裝置可以確認它是否被定址(位址/資料匯流排起始位址)以 及交易的型態(指令/位元組致能匯流排),但 initiator 只提供起始位 址給target (在位址階段中)。在完成位址階段後的交易期間,位址/
資料匯流排變成資料匯流排,且用來在每一個資料階段裡傳輸資料。
而target 負責閂鎖起始位址,並且在後續的每一次資料傳輸期間,自 動遞增此位址,以便指向下一個資料群組的位址。
宣告交易 ﹕
當 PCI target 確定自己是交易的 target 時,它必須將 DEVSEL#
(Device Select,裝置選擇)驅動到低態來宣告交易,假如在預先決定的 一段時間裡,initiator 未取樣到 DEVSEL#被驅動到低態的話,他就會 終止交易。
資料階段 ﹕
交易的資料階段是指某一段時間,在該時段裡,initiator 與 target 之 間有一個資料物件被傳輸。而被傳輸的資料位元組數是由initiator 在
該資料所設定的指令/位元組致能訊號數目來決定的。每一資料階段持 續的時間至少一個PCI 時脈週期,然而 initiator 與 target 都必須表示 他們準備完成該資料階段,或者用一個 PCI 時脈週期的等待狀態來延
該資料所設定的指令/位元組致能訊號數目來決定的。每一資料階段持 續的時間至少一個PCI 時脈週期,然而 initiator 與 target 都必須表示 他們準備完成該資料階段,或者用一個 PCI 時脈週期的等待狀態來延