• 沒有找到結果。

DiskOnKey 使用者程式碼研究

第三章 系統架構與流程

第三節 程式碼撰寫流程與研究

3.3 DiskOnKey 使用者程式碼研究

本程式目的要產生 DiskOnKey 使用者憑證,由上一段程式產生的 CA 憑證

簽發,公鑰憑證以檔案方式(.cer)儲存在 CA 電腦裡,私鑰以使用者輸入的密碼 得到的對稱金鑰加密後儲存在 DiskOnKey Hidden Area 裡。待使用者回到自己的 電腦上,即可以 DiskOnKey 裡的私鑰配上先前產生的公鑰憑證匯入使用者電腦 裡,匯入後私鑰無法以 PKCS#12 格式匯出。私鑰只存在 DiskOnKey 裡。分成兩 個部分,1. 產生憑證並將私鑰匯入 DiskOnKey。2. 從 DiskOnKey 匯入私鑰到 使用者電腦。以下分說明:

(1)產生憑證並將私鑰匯入 DiskOnKey

產生使用者憑證的部分和上一節產生 CA 憑證部分大致相同,以下僅列和上 節不同的程式流程:

1.因為此憑證由上一節產生的 CA 憑證簽發,故需先找出 CA 憑證的主體金 鑰識別元、CA 憑證私鑰的 CSP,接著才能簽發其他憑證,實做

FindCertificate()函式,用來取得 CA 憑證的相關資訊,FindCertificate()流 程如下:

Ⅰ.開啟中繼跟憑證授權憑證庫(Root Store)。

Ⅱ.以 CA 憑證的 X.509 名稱(CN=…)在 Root Store 搜尋 CA 憑證本體。

Ⅲ.憑證找到後再找尋提供 CA 憑證相對應私鑰的 CSP。

Ⅳ.取得 CA 憑證的主體金鑰識別元(KeyID)。

Ⅴ.解碼主體金鑰識別元為 Byte 資料型態。

圖 3-9 FindCertificate 函式流程

2.使用者憑證的發行者欄填入 CA 憑證內使用者欄位的內容。

3.憑證擴充部分:

Ⅰ.因為憑證用來加解密電子郵件及簽章,所以金鑰使用方式設為支援數位 簽章、支援明文加密、支援加密對稱金鑰、支援不同機器上共用對稱金 鑰四個旗標寫入此欄位。

Ⅱ.因為憑證用來加解密電子郵件及簽章,所以增加一憑證擴充欄位-增強 金鑰使用方法,填入安全的電子郵件旗標。

Ⅲ.基本限制欄內是否為 CA 憑證填入 FALSE。

Ⅳ.授權金鑰識別元改成由 FindCertificate()函式取得的 CA 憑證主體金 鑰識別元。

4.以 FindCertificate()函式取得的 CA 私鑰 CSP 搭配 CA 憑證簽章演算法欄

位內指定的方法簽發此憑證,寫入簽章欄裡。

圖 3-10 DiskOnKey 使用者憑證產生流程 5.將使用者憑證編碼成.cer 檔,存在 CA 電腦裡。

6.格式化 DiskOnKey。

7.利用使用者輸入的密碼得到對稱金鑰,以此對稱金鑰加密使用者憑證的私 鑰並寫入 DiskOnKey 的 Hidden Area 裡,要注意的是 DiskOnKey 只接受字 串寫入 Hidden Area,但加密後的私鑰為長度 508 位元組的連續 Byte Data

且有多個 0(16 進位)存在,0 轉成字串為 NULL,故寫入 DiskOnKey Hidden Area 時,無法完整寫入加密後私鑰,學生使用的方法為:

Ⅰ.分割 508 個位元組為 254+254 個位元組,前 254 個位元組為 A,後 254 個位元組為 B。

Ⅱ.在 A 的前面加入一個 byte 資料,在此稱為 Difference,加了 Difference 的 A 長度為 255 個 byte,計算 Difference 的值使得 A 內所有的值加上 Differe -nce 後不為 0(16 進位),根據鴿籠原理,此 Difference 的值 必存在。

Ⅲ.將 Difference+A 轉換為字串值寫入 DiskOnKey Hidden Area 裡,

Difference+B 部分,同理。

圖 3-11 寫入 DiskOnKey Hidden Area 的方法

8.將使用者輸入的密碼以 MD5 執行雜湊運算,寫入 DiskOnKey Hidden Area 裡。

(2) 從 DiskOnKey 匯入私鑰到使用者電腦 程式流程如下:

1.計算使用輸入的密碼 MD5 雜湊值,驗證此雜湊值和存在 Hidden Area 內

值是否相同?若是,繼續步驟 2,若否,顯示輸入錯誤密碼訊息,密碼輸

1.透過 TCP 連線(未加密)取得 CA 的公鑰憑證 SelfSignedEX.cer,此憑證主 要用來建立安全的連線,不能簽發憑證。

6.CA 收到後,使用 SelfSignedEX.cer 憑證的私鑰解密得對稱金鑰值 S,以 對金鑰值解密得使用者資訊,依照使用者資訊的內容,產生憑證由 CA 憑 證 SelfSignedSIG.cer 的私鑰簽發此憑證,簽發後的憑證,可以選擇以對 稱金鑰 S 加密簽發後的憑證或不加密(因為傳送內容為公鑰憑證),回傳給 使用者。

相關文件