当我知道纯文本和加密文本时,我可以导出DPAPI加密中使用的密钥吗?

时间:2014-03-20 10:03:50

标签: c# dpapi

所以我有一个用DPAPI和一个未知密钥加密的文本,我有加密文本代表的明文。我可以从中获得使用的密钥,以及如何使用?

2 个答案:

答案 0 :(得分:0)

DPAPI非常隐秘,因此文档记录很少,甚至WINE也缺乏对此API的适当支持,无法完全支持Internet Explorer等应用程序。

你必须知道钥匙。 DPAPI为每个用户生成一个唯一的MASTERKEY,然后使用用户的当前密码进行检索。此密钥通常存储在%APPDATA%\ Microsoft \ Protect ** SID **

主密钥由512个随机位组成。 DPAPI从CREDHIST文件中检索当前的MASTERKEY。您可以找到足够的信息here:和here

答案 1 :(得分:0)

您可以从明文和加密文本示例中获取密钥吗?仅当您在具有已知漏洞的非常旧且过时的Windows版本上执行此加密时。

否则,不......这不可能。

假设您有一个纯文本示例和生成的密文(加密文本),您可以尝试强力攻击并尝试密钥的每个排列,直到获得预期的密文。

用于加密数据的可能密钥数量取决于所用算法的密钥长度...因此,如果使用足够弱的密钥加密数据,则可以进行强力攻击。

但是,Microsoft已定期更新DPAPI使用的基础算法和密钥长度,因此除非数据在Windows Server 2000上加密,否则使用密钥的长度会使暴力攻击变得不切实际。

接下来的问题是,是否还有另一种方法可以使用明文和密文来执行更有效的攻击而不是简单地尝试每个可能的密钥直到找到匹配?这种方法可以称为“已知的明文攻击”。

已知的明文攻击是Differential cryptanalysis的一种形式......一组技术试图发现和利用密码中的非随机行为,以帮助确定密钥。

根据您的Windows版本,DPAPI使用Triple-DES或AES加密。 Both algorithms are designed to be resistant to differential cryptanalysis ......并且即使是非常大量的明文/密文对,这种方法只比蛮力攻击略快,因此仍然不实用。

其他信息:

Windows Data Protection

DPAPI Secrets