TPM 所有者密码和锁定密码 Windows 10 & linux
TPM Owner password and lockout password with Windows 10 & linux
我设置了双启动,所以我有 windows 10 和 ubuntu。
按照 this page 上的步骤,我能够在 windows 10 注册表中检索我的 TPM 的锁定密码和所有者密码。结果如下所示:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TPM\WMI\Admin
OwnerAuthStatus REG_DWORD 0x1
LastAuthLevel REG_DWORD 0x4
OwnerAuthFull REG_SZ iTcW8t1B+tIKmP/uxXPL94QF2Jw=
LockoutHash REG_SZ Ki1RiIu8d+eqeDoEFYcAqIoi1n4=
SRKPub REG_BINARY A3FEFDE6DBAA425D24717422C46C7E9C85C433CB
StorageOwnerAuth REG_SZ
TPMCleared REG_DWORD 0x0
OwnerAuthFull 和 LockoutHash 都是 base64 编码的,所以我可以使用 this link for instance 对它们进行解码(所有者密码为 893716F2DD41FAD20A98FFEEC573CBF78405D89C)。
在 ubuntu 上启动后,我尝试使用这些密码与 TPM 进行交互。我正在使用 tpm2-tools 与 ubuntu 下的 TPM 交互。
当 linux 控制 TPM 并设置这些密码时,Tpm2-tools 工作得很好。但在这里我试图让 Windows 控制 TPM,并且仍然能够在 Ubuntu 下与它通信。例如,当我 运行 这些命令时(当 ubuntu 控制 TPM 时有效)。
$ tpm2_createprimary --hierarchy e -g sha256 -G rsa -C primary.ctx
attributes:
value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|restricted|decrypt
raw: 0x30072
$ tpm2_create -g sha256 -G rsa -u key.pub -r key.priv -c primary.ctx
algorithm:
value: sha256
raw: 0xb
attributes:
value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|decrypt|sign
raw: 0x60072
type:
value: rsa
raw: 0x1
rsa: d14e5b7473972e4430b780dff0ec31a3a021fa0049ea1bafc17e2de4e232cba3afcdd8504c9f7dc2fa57df04ec1f64759f6bb0d8563c1ac53a7ce8d563ab7437f1f4b760960acfde7c414355c371ac8c94bba0e004bb08b499f115ba5e8efd655174c87309d64a23e198f6fce8e5451a851b7e96f7c172ba3d4be8e339176d136752e5d038ad9979585008e35bdedfdabe3236b92c60d5c4eabcafaabc8c65401aab5b479d8471d20ca18631c31404b38f3d373b5612ca906599914865cf281e550a748685fed4d60a7aa9c955d374c1d0852bb36ce9d39209e66fada20e4c473765160988470e93b63d81361613e3f5b918da167048ff8afe5e74768544fe03
$ tpm2_load -c primary.ctx -u key.pub -r key.priv -n key.name -C key.ctx
Load succ.
LoadedHandle: 0x80000100
$ tpm2_evictcontrol --auth o -c key.ctx --persistent 0x81010003 -P hex:893716F2DD41FAD20A98FFEEC573CBF78405D89C
persistentHandle: 0x81010003
ERROR: Tss2_Sys_EvictControl(0x9A2) - tpm:session(1):authorization failure without DA implications
我得到
ERROR: Tss2_Sys_EvictControl(0x9A2) - tpm:session(1):authorization failure without DA implications
。
有人知道我为什么会收到这个错误/为什么这个密码不起作用吗?我在哪里可以获得正确的密码?那么任何关于如何解决这个问题的指示都将受到赞赏!
谢谢!
我想我得到了答案,实际上 Windows 对密码进行 sha1 哈希,然后将其转换为 base64,然后将其存储在注册表中(如果 gpedit 是这样配置的):
https://msdn.microsoft.com/en-us/library/windows/desktop/aa376421(v=vs.85).aspx
b3nj1 的回答不正确。使用 tpm2_evictcontrol
的 --auth o
选项意味着您正在选择 TPM 的所有者控制域(请注意,在 2018 年 2 月发布问题时是这样,--auth
现在意味着其他东西)这需要所有者授权。 OwnerAuthFull
和 LockoutHash
确实按照 b3nj1 的回答中的描述生成,但是 OwnerAuthFull
存储了 TPM 的 lockout 授权,而 LockoutHash
的目的未知。
OwnerAuthFull
的 base64 解码值是 锁定授权值。这可以使用 tpm2-tools' tpm2_changeauth
进行验证 - base64 解码值使人们能够成功更改锁定授权。您可以使用以下 powershell 命令对十六进制字符串进行 base64 解码:
([System.BitConverter]::ToString([System.Convert]::FromBase64String('stringToConvert'))).Replace('-','')
那么Windows中的所有者授权值是多少?根据此页面:https://docs.microsoft.com/en-us/windows/security/information-protection/tpm/trusted-platform-module-services-group-policy-settings,b3nj1 为 StorageOwnerAuth
。从问题中引用的结果来看,它只是一个空字符串,这意味着所有者授权值只是一个 0 字节的缓冲区。这是默认值。同样,您可以使用 tpm2_changeauth
.
验证这一点
请注意 link 声称 TPM 2.0 的锁定授权存储在 LockoutAuth
中。这是不正确的。如上面 b3nj1 的结果(以及我的计算机中)所示,有 StorageOwnerAuth
,因此它必须是 TPM 2.0,但没有 LockoutAuth
。取而代之的是 LockoutHash
,但是这篇文章没有提到这个值。尝试使用 tpm2_changeauth
和 LockoutHash
修改任何所有者、背书和锁定授权失败,因此不清楚此值的用途。
wang对b3nj1的回答的评论中的link是不正确的。可以用tpm2_changeauth
验证Windows中的所有者和背书授权值都是空字符串,锁定授权存储在OwnerAuthFull
中。这意味着 Windows 控制的授权值中 none 是未知的 and/or 已丢弃。
我已经在 GitHub 上的文档中提出了这些问题,如果有任何进展,我会进行更新。
我设置了双启动,所以我有 windows 10 和 ubuntu。
按照 this page 上的步骤,我能够在 windows 10 注册表中检索我的 TPM 的锁定密码和所有者密码。结果如下所示:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TPM\WMI\Admin
OwnerAuthStatus REG_DWORD 0x1
LastAuthLevel REG_DWORD 0x4
OwnerAuthFull REG_SZ iTcW8t1B+tIKmP/uxXPL94QF2Jw=
LockoutHash REG_SZ Ki1RiIu8d+eqeDoEFYcAqIoi1n4=
SRKPub REG_BINARY A3FEFDE6DBAA425D24717422C46C7E9C85C433CB
StorageOwnerAuth REG_SZ
TPMCleared REG_DWORD 0x0
OwnerAuthFull 和 LockoutHash 都是 base64 编码的,所以我可以使用 this link for instance 对它们进行解码(所有者密码为 893716F2DD41FAD20A98FFEEC573CBF78405D89C)。
在 ubuntu 上启动后,我尝试使用这些密码与 TPM 进行交互。我正在使用 tpm2-tools 与 ubuntu 下的 TPM 交互。 当 linux 控制 TPM 并设置这些密码时,Tpm2-tools 工作得很好。但在这里我试图让 Windows 控制 TPM,并且仍然能够在 Ubuntu 下与它通信。例如,当我 运行 这些命令时(当 ubuntu 控制 TPM 时有效)。
$ tpm2_createprimary --hierarchy e -g sha256 -G rsa -C primary.ctx attributes: value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|restricted|decrypt raw: 0x30072 $ tpm2_create -g sha256 -G rsa -u key.pub -r key.priv -c primary.ctx algorithm: value: sha256 raw: 0xb attributes: value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|decrypt|sign raw: 0x60072 type: value: rsa raw: 0x1 rsa: d14e5b7473972e4430b780dff0ec31a3a021fa0049ea1bafc17e2de4e232cba3afcdd8504c9f7dc2fa57df04ec1f64759f6bb0d8563c1ac53a7ce8d563ab7437f1f4b760960acfde7c414355c371ac8c94bba0e004bb08b499f115ba5e8efd655174c87309d64a23e198f6fce8e5451a851b7e96f7c172ba3d4be8e339176d136752e5d038ad9979585008e35bdedfdabe3236b92c60d5c4eabcafaabc8c65401aab5b479d8471d20ca18631c31404b38f3d373b5612ca906599914865cf281e550a748685fed4d60a7aa9c955d374c1d0852bb36ce9d39209e66fada20e4c473765160988470e93b63d81361613e3f5b918da167048ff8afe5e74768544fe03 $ tpm2_load -c primary.ctx -u key.pub -r key.priv -n key.name -C key.ctx Load succ. LoadedHandle: 0x80000100 $ tpm2_evictcontrol --auth o -c key.ctx --persistent 0x81010003 -P hex:893716F2DD41FAD20A98FFEEC573CBF78405D89C persistentHandle: 0x81010003 ERROR: Tss2_Sys_EvictControl(0x9A2) - tpm:session(1):authorization failure without DA implications
我得到
ERROR: Tss2_Sys_EvictControl(0x9A2) - tpm:session(1):authorization failure without DA implications。
有人知道我为什么会收到这个错误/为什么这个密码不起作用吗?我在哪里可以获得正确的密码?那么任何关于如何解决这个问题的指示都将受到赞赏! 谢谢!
我想我得到了答案,实际上 Windows 对密码进行 sha1 哈希,然后将其转换为 base64,然后将其存储在注册表中(如果 gpedit 是这样配置的): https://msdn.microsoft.com/en-us/library/windows/desktop/aa376421(v=vs.85).aspx
b3nj1 的回答不正确。使用 tpm2_evictcontrol
的 --auth o
选项意味着您正在选择 TPM 的所有者控制域(请注意,在 2018 年 2 月发布问题时是这样,--auth
现在意味着其他东西)这需要所有者授权。 OwnerAuthFull
和 LockoutHash
确实按照 b3nj1 的回答中的描述生成,但是 OwnerAuthFull
存储了 TPM 的 lockout 授权,而 LockoutHash
的目的未知。
OwnerAuthFull
的 base64 解码值是 锁定授权值。这可以使用 tpm2-tools' tpm2_changeauth
进行验证 - base64 解码值使人们能够成功更改锁定授权。您可以使用以下 powershell 命令对十六进制字符串进行 base64 解码:
([System.BitConverter]::ToString([System.Convert]::FromBase64String('stringToConvert'))).Replace('-','')
那么Windows中的所有者授权值是多少?根据此页面:https://docs.microsoft.com/en-us/windows/security/information-protection/tpm/trusted-platform-module-services-group-policy-settings,b3nj1 为 StorageOwnerAuth
。从问题中引用的结果来看,它只是一个空字符串,这意味着所有者授权值只是一个 0 字节的缓冲区。这是默认值。同样,您可以使用 tpm2_changeauth
.
请注意 link 声称 TPM 2.0 的锁定授权存储在 LockoutAuth
中。这是不正确的。如上面 b3nj1 的结果(以及我的计算机中)所示,有 StorageOwnerAuth
,因此它必须是 TPM 2.0,但没有 LockoutAuth
。取而代之的是 LockoutHash
,但是这篇文章没有提到这个值。尝试使用 tpm2_changeauth
和 LockoutHash
修改任何所有者、背书和锁定授权失败,因此不清楚此值的用途。
wang对b3nj1的回答的评论中的link是不正确的。可以用tpm2_changeauth
验证Windows中的所有者和背书授权值都是空字符串,锁定授权存储在OwnerAuthFull
中。这意味着 Windows 控制的授权值中 none 是未知的 and/or 已丢弃。
我已经在 GitHub 上的文档中提出了这些问题,如果有任何进展,我会进行更新。