2007.11月號-166期 程式開發安全自我評量解答 解答名師/王寧疆、楊志強
◎科目:程式開發安全
在上一期的程式開發安全IT基測題目中,我們設計了幾個和機密文件加密與簽章有關的基礎概念題目,本文將針對確保機密資料安全的加密與簽章的做法設計了幾個稍微進階一點的題目,有興趣的讀者可以試試看可以答對幾題。
正確答案:B
說明:
為文件加上簽章處理主要的目的就是要確保文件中的內容不被竄改,簽章過的文件只要被惡意竄改,就可以利用簽章驗証技術得知文件並非是文件的原始編輯者當初編輯好的內容。基本上對稱式加密法的運算效率遠優於非對稱式加密法,所以很適合用來對大量的資料進行加密的作業,而非對稱式加密法的運算效率要比對稱式加密法慢很多,所以比較適合用來對少量的資料進行加密,例如用來加密對機密資料進行對稱式加密的金鑰,就是一個很常見的應用。雜湊加密是一種不可還原的作業,也就是說,經過雜湊加密處理的資料沒有辦法再還原成加密前的樣子,所以又稱為單向(One-Way)加密法。雜湊加密法適合用來將使用者的密碼加密後再存入資料庫或檔案,因為經過雜湊加密後的密碼無法被還原成加密前的內容,所以經過雜湊加密處理過的密碼可以得到很好的安全保障。
正確答案:B
說明:
利用成熟的模型開發程式與解決方案一直是程式開發團隊追求的目標,使用成熟、而且廣為程式設計師採用的模型設計程式的功能,可以提升所開發的程式的品質,縮短應用程式開發的時程,增進應用程式的穩定度,同時也可以讓程式具一致的程式寫法,間接提高程式的維護性,是面對程式開發時遇到難解的問題的超強利器。Microsoft提供的Enterprise
Library 3.1是一個開發Microsoft .NET 2.0和Microsoft .NET Framework 3.0解決方案的超級套件,可以協助應用程式或網頁處理資料加密/解密、快取控制、資料庫存取、事件記錄、權限管制、策略式的例外處理、資料驗証、以及植入執行策略到類別和方法等等常用的功能,是開發Microsoft
.NET 2.0和Microsoft .NET Framework 3.0解決方案不可或缺的良方,其中負責提供資料加密/解密功能的Cryptography Application
Block目前只內建支援對稱式加密演算法和雜加密湊演算法兩種演算法,包括提供建立加密用金鑰的功能,但是並未支援非對稱式加密演算法。
雖然Cryptography
Application Block目前並不支援非對稱式加密法,但是我們還是能夠利用Cryptography Application Block提供的載入組件功能載入負責執行加密/解密的組件,再利用組件中的類別對機密資料進行加密和解密的工作。
需注意當我們需要對機密資料進行加密和簽章的時候,有一個基本原則要切記,那就是不要自行發明,但是使用未經數學理論驗証過的加密演算法,例如將字串中的字元前後調換,或是將數值資料中的每一個阿拉伯數字都加上一個特定的數值,做為加密後的結果。這種常見的自訂加密做法通常都會有很高的機會被有心人士輕易的破解,所以對機密資料進行加密/解密的時候一定要使用有堅強理論基礎,而且經過驗証沒有問題的演算法,才能夠確保加密後資料的安全性。
正確答案:D
說明:
對公開金鑰加密標準(PKCS)的加密和解密支援是從.NET Framework 2.0版開始才支援的功能,無法在.NET Framework 1.1版的環境下使用。Microsoft
.NET Framework 2.0版提供的EnvelopedCms類別實作PKCS公開金鑰加密標準的演算法,程式設計師可以利用EnvelopedCms類別搭配X509Certificate2類別管理的X509憑証對機密資料進行加密和解密的動作。例如以下就是使用EnvelopedCms類別將byte陣列的資料加密的範例:
以下是使用EnvelopedCms類別搭配X509Certificate2類別管理的憑証對加密過的資料進行解密的範例:
正確答案:A
說明:
.NET Framework 2.0版提供的SignedCms類別負責實作公開金鑰加密標準(PKCS)定義的簽章和驗証功能,可以用來確保資料的完整性,不會被有心人士竄改。請注意SignedCms類別是.NET
Framework 2.0版新提供的功能,無法在.NET Framework 1.1版的環境下使用。 以下的範例會使用.NET Framework 2.0版提供的SignedCms類別對資料進行簽章的動作:
正確答案:D
說明:
Microsoft .NET Framework 2.0支援的SecureString類別適合用來存放機密資料,例如用來儲存使用者輸入的密碼。存放到SecureString中的資料會自動經過加密處理,而且當物件不再使用,物件所佔用的記憶體被回收時,物件所佔用的記憶體的內容會全部被清除,可以有效防止有心人士檢視SecureString類別的物件所佔用的記憶體的尚未被清除的內容,因此使用SecureString類別的物件來存放需要確保高度私密性的資料,例如使用者的密碼,要比使用String類別的物件來存放資料具有更佳的安全性。存放在SecureString類別的物件中的字串無法使用偵錯工具檢視內容,無法對其內容進行比較,也無法將內容轉型後再使用,例如利用ToString方法轉型態String類別的物件再行使用。存放在SecureString類別的物件中的密碼可以直接交給
X509Certificate2類別,或是ProcessStartInfo類別使用,以保護使用者的密碼的私密性。
以下的範例會將使用者輸入到名稱為txtPassword的TextBox控制項的密碼存放到SecureString類別型態的變數中。請注意存入到SecureString類別型態的變數的字元會自動被加密:
存放到SecureString類別型態的變數中加密後的內容還是可以利用Marshal類別的SecureStringToGlobalAllocUnicode方法與PtrToStringUni方法,還原成普通的字串,再被應用程式使用,做法如下:

◎科目:資料庫
說明:
其中發行者是資料來源,散發者功能是將發行項傳送給訂閱者。
說明:
複寫的過程必須要啟動SQL Server Agent執行排程作業,此外SQL Server的複寫支援IBM的DB2與Oracle等資料庫的整合。
說明:
SQL Server 2005可支援四種發行集的類型。
說明:
任何版本Windows、Unix、Linux等的Oracle資料庫,版本可以為8、8i、9i與10g。
說明:
交易式複寫主要是使用發行項的資料表的主索引鍵,進行資料的識別。
|