2013-10-03 27 views
2

我們有一個加密/解密的數據爲DataProtectionScope.LocalMachine的應用程序。我們現在不得不將範圍更改爲DataProtectionScope.CurrentUser數據保護API範圍:LOCALMACHINE&CurrentUser

當範圍更改爲CurrentUser時,假設當然用戶登錄到同一臺計算機上,那麼在LocalMachine作用域下加密的現有字符串是否仍然可讀?

編輯:我已經寫了一個非常快的&骯髒的測試應用程序。奇怪的是,在同一臺計算機上,我可以通過LocalMachine & CurrentUser作用域來解密在LocalMachine或CurrentUser作用域下加密的字符串。這聽起來不像正確的行爲,幫助!

private void btnUserEncrypt_Click(object sender, EventArgs e) 
    { 
     //encrypt data 
     var data = Encoding.Unicode.GetBytes(txtUserEncrypt.Text); 
     byte[] encrypted = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser); 

     txtUserEncrypt.Text = Convert.ToBase64String(encrypted); 
    } 

    private void btnUserDecrypt_Click(object sender, EventArgs e) 
    { 
     byte[] data = Convert.FromBase64String(txtUserDecrypt.Text); 

     //decrypt data 
     byte[] decrypted = ProtectedData.Unprotect(data, null, DataProtectionScope.CurrentUser); 
     txtUserDecrypt.Text = Encoding.Unicode.GetString(decrypted); 
    } 

    private void btnMachineEncrypt_Click(object sender, EventArgs e) 
    { 
     //encrypt data 
     var data = Encoding.Unicode.GetBytes(txtMachineEncrypt.Text); 
     byte[] encrypted = ProtectedData.Protect(data, null, DataProtectionScope.LocalMachine); 

     txtMachineEncrypt.Text = Convert.ToBase64String(encrypted); 
    } 

    private void btnMachineDecrypt_Click(object sender, EventArgs e) 
    { 
     byte[] data = Convert.FromBase64String(txtMachineDecrypt.Text); 

     //decrypt data 
     byte[] decrypted = ProtectedData.Unprotect(data, null, DataProtectionScope.LocalMachine); 
     txtMachineDecrypt.Text = Encoding.Unicode.GetString(decrypted); 
    } 

回答

5

當您解密DPAPI加密的數據時,數據保護範圍將被忽略。

DPAPI解密在加密BLOB例行檢查元數據,以查看使用了哪個範圍進行加密,並使用相同範圍進行解密而不管指定的範圍。因此,如果您使用機器範圍對數據進行加密,然後「使用」用戶範圍(在同一臺機器上)對其進行解密,則它將起作用,因爲它仍將使用機器範圍進行解密。如果要驗證,請嘗試將使用機器範圍加密的數據移動到不同的系統,並使用相同的用戶帳戶對其解密。你會看到這會失敗。或者你可以嘗試解密這些數據,同時在不同的賬戶下登錄(在這種情況下,它也會起作用)。

因此,你的問題的答案是:是的,如果你用機器範圍使用DPAPI加密數據,並試圖解密它通過用戶範圍(在同一臺機器上),它會工作,但只是因爲它會忽略解密期間的用戶範圍。

+0

@Alex戴維斯什麼參數涉及加密在本地機器範圍的數據?密碼不參與?使用反向工具破解局部機器人斑點有多容易?請諮詢 – techno

+0

@techno:參數在CryptProtectData和CryptUnprotectData的API定義中描述。請參閱http://www.obviex.com/samples/dpapi.aspx上的示例。我不確定哪個密碼(密碼)用於密鑰,可能是由LSA保護的一些值。通過在機器上運行惡意程序,本地機器選項比逆向工程更容易中斷(我在這裏推測)。一般來說,我不推薦使用機器範圍。 –

+0

感謝您reply.Im不找failproof mechanism.I想就算我使用本機的範圍,它會採取的技術技能,良好的金額獲得的secret.Plus添加額外的熵我會用已知的祕密只有應用程序。你覺得怎麼樣? – techno