• 沒有找到結果。

第三章 系統設計與實作

3.4 模組設計細節

3.4.3 File encryption manager

此部分與其他模組的主要不同點為:此部分由獨立的行程「FEncMgr.exe」

做處理,且行程之Windows 執行身份為「SecCap_xxxxxxxx」,其中 x 部分即 為 userCode;而其他部分之處理程序名稱為「SecCap.exe」,Windows 執行 身份為當前桌面之使用者。此部分的工作內容如下:

- 使用者私密金鑰、公開金鑰與憑証之產生。 generator, PRNG) 所提供之數值。因此我們使用修改過後的OpenSSL[3]程式 庫:myOpenSSL,做為金鑰產生的模組。下列是我們所有修改、提供之函數 系列:

- myRSA_generate_key 系列

- myRAND_meth 系列

- myBN_rand 系列

- myBN_generate_prime_ex 系列

以上,我們將所有會因外在環境因素 (時間、設備等) 的而變動的敘述刪 除,進而修改為常數版本。針對SecCap 而言,我們只需要某幾項資訊做為產 生亂數之種子參考,再根據這些亂數產生金鑰。因此SecCap 需要直接使用到 myRAND_meth 與 myRSA_generate_key 。 而 其 所 參 考 之 函 數 myBN_rand、myBN_generate_prime_ex 亦一拼做修改。

私密金鑰、公開金鑰與憑証之產生,與將其安裝至系統之流程如Fig. 30。

其中,「myRSA private/public key generating」執行私密金鑰、公開金鑰之 產生,「PKCS #10 request」[22]至「PKCS #12 encapsulated certificate」[23]

執行憑証之產生。「Add to system certificate store」至「Done」將憑証安裝 至作業系統,並且將其設定為SecCap使用者的EFS檔案加密金鑰。

我們使用智慧卡憑証中的「主體名稱」、使用者自訂的「通關密語」、及 SecCap 內定的「秘密字串」,做為亂數產生器的種子,也就是亂數產生的依據。

如此一來,便可在不同電腦上產生相同的亂數序列,進而可產生相同的私密金 鑰、公開金鑰。

金鑰產生完畢後,我們必需產生EFS憑証,才可將其安裝至作業系統。

Windows目前支援X.509[7]之DER (Distinguished encoding rules) [8]格式 憑 証 , 並 且 此 憑 証 之 金 鑰 使 用 功 能 必 需 包 含 Microsoft EFS (1.3.6.1.4.1.311.10.3.4) [18]等等。我們使用OpenSSL的X.509 系列程式庫建 立EFS憑証,並且自行簽名。Fig. 31為我們產生的憑証示例。

取得私密金鑰與EFS 憑証之後,透過 OpenSSL 的 PKCS12 系列程式庫,

將它們封裝為PKCS#12 結構,再交由下一步做處理。

透過Win32 API,我們將此PKCS#12 結構資料 (包含了私密金鑰與EFS 憑 証) 安 裝 至 Windows 憑 証 存 放 區 。 我 們 可 以 使 用 主 控 台 (Microsoft management console, MMC) 瀏覽憑証存放區,查看已安裝的憑証,如Fig.

32。

憑証安裝完成後,將其設定為Windows 使用者之 EFS 加解密金鑰。如此 使用者私密金鑰、公開金鑰與憑証之產生與安裝便完成。

Secret hash value

User defined password

myRSA private/public key generating

Public key Private key

X.509 certificate signing & generating

PKCS #12 generating Smartcard certificate

PKCS #10 request

Certificate request form

PKCS #12 encapsulated certificate Windows user's EFS certificate

Add to system certificate store

Set user's EFS key

Done

System certificate store

Fig. 30 私鑰、公鑰與憑証之產生與安裝流程

Certificate:

Data:

Version: 3 (0x2) Serial Number:

92:9f:e2:ce:a6:0e:c8:32

Signature Algorithm: sha1WithRSAEncryption Issuer: CN=seccap

Validity

Not Before: Jan 1 00:00:00 2000 GMT Not After : Jan 1 00:00:00 2020 GMT Subject: CN=seccap_xxxxxxxx

Subject Public Key Info: Signature Algorithm: sha1WithRSAEncryption

c3:6d:4b:67:ab:27:b9:60:59:09:38:ea:e1:f9:35:b3:61:c6:

...

6e:13

Fig. 31 EFS 憑証

File encryption manager 會透過 IPC 接收來自 SecCap 之資訊:

- 由SecCap 所執行之應用程式的 PID。

Fig. 32 憑証存放區

當應用程式 (當初由SecCap所執行的) 結束後,SecCap會彈出此行程所 存取之檔案列表視窗,如Fig. 33。其中綠色字代表目前此檔案已加密;灰色字 代表此檔案無法被加密 (如系統檔、不存在或無權限的檔案等) ;黑色字代表 可加密。我們可將檔案勾選起來進行加密,或將其除去進行解密。所有的檔案 加解密方式皆使用EFS之API。

當SecCap 使用者進行登出時,此行程 (即 File encryption manager) 便 結束。待下一次登入時,此行程再重新被啟動。

Fig. 33 使用者勾選加解密視窗

相關文件