保護記憶體中的敏感資料

2022-01-17 08:30:17 字數 1527 閱讀 9667

感覺安全方面很重要啊.看到好文章,大家分享一下了.

某些時候,我們需要在記憶體中儲存一些非常敏感的資料,比如信用卡賬號密碼、軟體註冊碼等等。那麼危險隨之而來,使用一些高階軟體除錯工具檢視程序的記憶體資料,居心不良的人就會有機會拿到這些本該嚴格保密的資料。

microsoft windows 2000 sp4 以上版本的作業系統提供了用於資料保護的 api —— dpapi,我們可以使用 .net framework 2.0 提供的相關型別來保護我們的資料。

下面,我們使用乙個簡單的例子來說明其使用方法。personal 類的 creditpassword 屬性用來模擬儲存使用者信用卡密碼,對於下面這樣的例子危險可想而知。

public class personal

set }}

好了,我們用 dpapi 改寫這個例子。.net framework 2.0 提供了 protectedmemory 和 protecteddata 兩個靜態類來進行這個操作。使用前我們需要新增 system.security.dll 的引用,預設的 system.security.cryptography 名字空間並不包含這兩個類。

using system.security.cryptography;

public class personal

set }}

protectedmemory 提供了兩個靜態方法,protected 用來加密資料,unprotected 解密還原資料。在改寫的例子中我們使用 byte 來儲存加密後的信用卡密碼,而且使用 memoryprotectionscope 引數指定只有當前程序才能解密,安全性自然高出很多。

我們另外寫乙個例子,看看 memoryprotected.protect 加密後的資料是什麼樣子。

using system.security.cryptography;

static void main(string args)

輸出:??亭??氶?埠?剡??????錟????

credit card password

加密後的資料由亂碼組成,且能正確被還原。(多次執行或不同的機器,加密結果有所不同。)

protecteddata 同樣提供 protect 和 unprotect 兩個方法,但在使用上和 protectedmemory 還是有所差別的。

1. protecteddata 的兩個方法都多了乙個引數 optionalentropy,這個 byte 類似我們平常加密時所使用的 key,從而提供更強的安全性。

2. protecteddata 不會改寫要操作的位元組陣列,而是建立副本來儲存加密或解密結果。

3. dataprotectionscope 列舉提供 currentuser、localmachine 兩種限制選擇,和 memoryprotectionscope 不同。

基於這些差異,我們使用 protectedmemory 保護記憶體中的資料,而使用 protecteddata 保護寫到硬碟等儲存器上的資料。

using system.security.cryptography;

static void main(string args)

保護記憶體中的敏感資料

某些時候,我們需要在記憶體中儲存一些非常敏感的資料,比如信用卡賬號密碼 軟體註冊碼等等。那麼危險隨之而來,使用一些高階軟體除錯工具檢視程序的記憶體資料,居心不良的人就會有機會拿到這些本該嚴格保密的資料。microsoft windows 2000 sp4 以上版本的作業系統提供了用於資料保護的 ap...

暴露敏感資料

威脅載體 可以獲得你的敏感資料和任何資料備份訪問許可權的人。包括靜止資料,在傳輸過程中,甚至在你的自定義瀏覽器中,包括內部和外部欺騙。攻擊媒介 攻擊者通常不直接破壞加密。他們破壞其他的東西,例如偷取秘鑰,做中間人攻擊,或者從伺服器,在傳輸當中或者從使用者的瀏覽器中,偷取明文資料。安全弱點 最普通的漏...

使用RSA證書加密敏感資料

x.509證書標準支援三種不對稱加密演算法 rsa,dsa,diffie hellman algorithms。最常用的是rsa演算法。所以本文就以前面章節使用makecert工具生成的生成的mytestcert證書進行加密解密,這個證書具有rsa演算法1024位的金鑰對。figure 12.rsa...