Password Algorithms: Internet Explorer 10 (Windows Vault)
IE10中的密码算法(Windows Vault)
原文链接:Password Algorithms: Internet Explorer 10 (Windows Vault)一,介绍
微软在Windows7中增加了一个新特性,就是所谓的“Vault”,您可以通过在控制面板中的 凭据管理器 或者在命令行中使用vaultcmd来访问它们。(凭据管理器倒是找到了,至于使用vaultcmd,目前不明白如何使用)。它的工作原理非常类似于Linux里的Gnome Key Ring或者是MacOS上的Apple Keychain。
在IE7、8、9中,(自动登录的)密码和登录的url地址使用DPAPI保护之后再写入注册表中。IE10采用的新算法继续使用了DPAPI,但是凭据加密现在交由Vault Service处理。
二,Vault系统服务
如同大多数的Windows加密方案,Vault数据的保护一般发生在本地系统服务中。vaultsvc.dll包含了这个服务的代码,并且在系统引导启动的时候会被本地安全账户子系统(lsass.exe)加载。
有18到24个函数(取决于操作系统)对本地RPC(远程过程调用协议)端点是可见的。在Windows7,它们附加在KeyRing Credential UI application (VaultSysUI.exe)中,如果需要Vault所有者的信息话,系统会启动Vault Service以便支持它们。
例如,你有对Vault添加密码的能力。
当应用程序试图访问密码元素(应该指使用DPAPI加密的数据),你也可以配置vault去从用户(加密数据的那个人)那里获取权限。
上述两种情况,VaultSysUI会显示一个窗口给用户,然后将用户的响应写到Vault Service可以访问的内存中。
虽然这两个功能很有用,并且用户的的安全证书进一步得到了保护,但是在Windows8中,它们还是被遗弃了。
三,Vault客户端库访问
当访问凭据管理器的时候,浏览器会加载Credui.dll 和 Vault.dll。根据当前用户的会话(指与浏览器之间),一个远程工程调用(RPC)会被激活,它通过调用vaultcli.dll导出的API(来实现对敏感数据的访问,从而实现IE的自动完成表单)
你也可以使用vaultcmd.exe去添加或者删除凭证,但是在IE7、8中它不会显示密码。
在Windows8中,
无论出于什么原因,在Windows7与8之间,对于Vault功能,有一个非常显著的改动。下面的列表展示了那些功能被更改。
- Creation / Deletion of vaults.
- Loading / Unloading external vault files.
- Locking / Unlocking vaults with additional password protection.
即:
- 创建/删除 vaults.
- 加载/卸载vault外部库文件
- 锁定/解锁vault库提供额外的密码保护
四,保护方法
Windows 7有2种方法可用,但Windows 8的只有种1。DPAPI(数据保护API)默认情况下会使用,但在Windows7中,您也可以使用一个密码来保护数据。
用于保护密码算法为RSA PBKDF2。
五,恢复网页证书
至于,Windows7与8之间对于Vault服务有一些改变,在Windows8中,VaultGetItem需要附加参数,并且VAULT_ITEM结构有一个额外的属性。
下面是VAULT_ITEM结构在Windows7中的定义
typedef struct _VAULT_ITEM_W7 {
GUID SchemaId;
LPCWSTR pszCredentialFriendlyName;
PVAULT_ITEM_ELEMENTpResourceElement;
PVAULT_ITEM_ELEMENTpIdentityElement;
PVAULT_ITEM_ELEMENTpAuthenticatorElement;
FILETIME LastModified;
DWORD dwFlags;
DWORD dwPropertiesCount;
PVAULT_ITEM_ELEMENTpPropertyElements;
} VAULT_ITEM_W7, *PVAULT_ITEM_W7;
对于 Windows 8 . . .
typedef struct _VAULT_ITEM_W8 {
GUID SchemaId;
LPCWSTR pszCredentialFriendlyName;
PVAULT_ITEM_ELEMENTpResourceElement;
PVAULT_ITEM_ELEMENTpIdentityElement;
PVAULT_ITEM_ELEMENTpAuthenticatorElement;
PVAULT_ITEM_ELEMENT pPackageSid;
FILETIME LastModified;
DWORD dwFlags;
DWORD dwPropertiesCount;
PVAULT_ITEM_ELEMENTpPropertyElements;
} VAULT_ITEM_W8, *PVAULT_ITEM_W8;
我(指原文作者)已经写了使用Vault API来恢复密码的IE10的工具,这里的输出示例在Windows7机器运行的
。
如果你想了解更多关于这个程序,你可以到这里下载代码。点击下载源代码
由于Windows Vault的服务仍然没有正式文档说明,我不能保证所提供信息的准确性。IE10最新的对网络凭据证书的保护确实比以前的算法强度弱(IE7、8、9使用的),但好处是,你可以在需要的时候可靠备份或者恢复你的密码。
下面是一个API列表,Windows7与8之间对vault的支持如下
Credential Vault Client Library Function | Windows 7 | Windows 8 |
VaultCreateItemType | Yes | Yes |
VaultDeleteItemType | Yes | Yes |
VaultEnumerateItemTypes | Yes | Yes |
VaultAddItem | Yes | Yes |
VaultFindItems | Yes | Yes |
VaultEnumerateItems | Yes | Yes |
VaultGetItem | Yes | Yes |
VaultRemoveItem | Yes | Yes |
VaultGetItemType | Yes | Yes |
VaultOpenVault | Yes | Yes |
VaultCloseVault | Yes | Yes |
VaultGetInformation | Yes | Yes |
VaultEnumerateVaults | Yes | Yes |
VaultSetInformation | Yes | No |
VaultCreateVault | Yes | No |
VaultCopyVault | Yes | No |
VaultDeleteVault | Yes | No |
VaultLoadVaults | Yes | No |
VaultUnloadVaults | Yes | No |
VaultCopyItem | Yes | No |
VaultMoveItem | Yes | No |
VaultLockVault | Yes | No |
VaultUnlockVault | Yes | No |
VaultConfirmVaultAccess | Yes | No |
VaultEnumerateSettingUnits | No | Yes |
VaultGetSettingUnit | No | Yes |
VaultApplySettingUnit | No | Yes |
VaultRemoveSettingUnit | No | Yes |
VaultTriggerSync | No | Yes |