• 沒有找到結果。

D ATABASE 加密/解密流程

在文檔中 個人密碼管理系統 (頁 36-40)

Database 的加密過程使用了多種 Cipher,此節說明如使用 Key-File 對於 Database 加密/解密的流程。

4.5.1 Key-Object 設置

在對資料做加密前首先釐清 Key-Object 各 Field 如何產生,並且在加密時 是如何作用。

圖 4 - 12 Startup dialog

系統初在次執行時 (新增 Database),會要求使用者設定 Default Cipher 與 User Password,並且呼叫 KeyObject 的 Constructor 將使用者設定作為參數傳入 建構 KeyObject,分別把值存入 mainAlgorithm Field 與 mainKey64 Field,同時 生成只有空殼的 Default Database。KeyObject 只在首次產生 Database 時做建構,

此後都僅對其做修改的動作。

圖 4 - 12是開啟Database的Startup Dialog畫面,若是新增Database的情況,使用 者僅需對Password與Cipher欄位做設定,Database與Key-File欄位將會為空,在 儲存之後才會將儲存路徑寫入pwManager.property (3.3.1小節) 檔案,往後每次 執行時會讀取pwManager.property最後一次的設定當作Default的開啟路徑。

KeyObject在尚未對資料做任何更新情況下,decryptPair Field內容為空,而 keyPairVec僅存在Default Key Label對應至mainKey64 Field值的一筆資料,此 Default值是由User Password進行MD5 或是SHA-256 Hashing後,再將得到的 byte[]做Base64 轉換為String型別而得。對於各Cipher新增Key Label,系統會對 於此Key Label Generate對應的Secret Key,並且以HashMap型別加入keyPairVec 中。Key Label的修改/刪除則比較麻煩,除了更改HashMap內容外,我們需要對 樹狀的使用者資料TreeUtil (4.1.2小節) 做Depth First Search (DFS),將使用此 Key Label的資料重新設定為Default值。

decryptPair Field僅會在資料儲存時做更新,對TreeUtil做DFS且進行資料的 逐筆儲存,成為3.3.2小節設定的檔案格式。其過程中依序將每一資料欄位的加 密設定以Cipher-SecretKey pair的形式加入decryptPair Field;若不是資料欄位而 是TreeNode,我們則以defaultKey64 作為其Secret Key的值。

圖 4 - 13對KeyObject的設置作整體的View:

圖 4 - 13 KeyObject 設置

4.5.2 Database 加密

加密存檔可細拆為幾個子步驟,如圖 4 - 14所示:首先對於資料做Base64 轉換以3.3.2小節的形式做欄位切割;接下來以行為單位依照使用者設定做欄位 加密輸出至.tmp中間檔,同時將加密資訊存入KeyObject的decryptPair Field;最 後一個步驟則是將中間檔以使用者設定的Default Cipher與Default Key (也就是 mainAlgorithm Field與mainKey64 Field) 加密為Database存入磁碟中,並刪除前 一步驟產生的.tmp中間檔。

圖 4 - 14 Database 加密

Key-File 在 每 次 Database 存 檔 都 會 做 同 步 更 新 , KeyObject 以 Object Serialization的方式輸出至磁碟中存為中間檔,皆者與Database加密的最後一步 相同使用Default Cipher與Default Key對中間檔加密成為Key-File (圖 4 - 15)。這 裡有一點要加以說明的是,Key Expotr的動作雖然也是將KeyObject以相同的方 法加密為Key-File,然而其decryptPair Field的欄位資訊會依照金鑰匯出時的設定 以Null值填入相對應的設定欄位。

圖 4 - 15 Key-File 加密

4.5.3 Database 解密

將Database解密的步驟就是依照加密的步驟以反方向操作。如圖 4 - 16所 示,使用者開啟圖 4 - 12的Startup Dialog後輸入正確的密碼,並且選擇Database 與Key-File使用的Default Cipher,系統依照輸入設定將Database解密為.tmp中間 檔,同時把解開的Key-File讀入成為KeyObject。此時如果發生錯誤會發出警示 訊息通知使用者確認輸入是否正確;否則系統以行為單位,依照Key-Object的 decryptPair Field資訊解密讀入行。解密的行是Base64 的形式且以3.3.2小節設定 的形式切割欄位,在藉由欄位分析恢復為原始資料,以Tree與Table的形式呈現。

圖 4 - 16 Database 解密

使用選擇性 Export 的金鑰解密檔案則為特例,在擷取 decryptPair Field 時 被保護的欄位資訊將會是 Null 值,因此系統在判別讀入的 decryptPair Field 相 對欄位為 Null 時,此筆資料欄位將予以隱藏。

在文檔中 個人密碼管理系統 (頁 36-40)

相關文件