암호로 보호된 마스터 키로 생성된 TPM2.0 봉인된 개체를 암호 없이 다른 곳에서 로드하고 사용할 수 있는 이유는 무엇입니까?

암호로 보호된 마스터 키로 생성된 TPM2.0 봉인된 개체를 암호 없이 다른 곳에서 로드하고 사용할 수 있는 이유는 무엇입니까?

나는 비밀을 안전하게 유지하기 위해 TPM2.0을 사용하려고 노력해 왔습니다.tpm2 도구. 이 문제에 대한 해결책이 물체 밀봉인 것 같습니다.

여기서 누군가 봉인된 개체가 이를 생성하고 로드하는 상위 "주 개체"와 어떻게 관련되는지 더 잘 설명할 수 있기를 바랍니다. 특히 비밀번호 인증 값이 관련된 경우 더욱 그렇습니다. 나는 필요하다고 생각되는 암호를 제공하지 않고도 다양한 작업을 허용하는 몇 가지 예(아래)에 대해 약간 혼란스러워합니다.


(참고: 실제로 아래의 많은 예에서는 tpm2_flushcontext -t중간 개체 로드를 위한 공간을 정리하기 위한 호출이 필요하지만 간결성을 위해 제외했습니다.)

평가의 일환으로 봉인된 객체는 항상 먼저 생성되어야 하는 다른 "주 객체"/기본 키 아래에 생성되어야 한다는 것을 배웠습니다.

# make a new primary key
$ tpm2_createprimary -C o -c testprim.ctx
# make a new sealing object under this primary key
$ tpm2_create -u testseal.pub -r testseal.priv -i hunter2.txt -C testprim.ctx

이러한 기본 객체는 선택적으로 비밀번호 인증 값을 사용하여 생성될 수 있습니다. 예상한 대로 암호를 제공하지 않고 암호로 보호된 기본 개체에서 봉인된 개체를 만들려고 하면 작동하지 않습니다.

$ tpm2_createprimary -C o -p str:testpwd -c testprim-wauth.ctx
$ tpm2_create -u testseal-wpauth.pub -r testseal-wpauth.priv -i hunter2.txt -C testprim-wauth.ctx
WARNING:esys:src/tss2-esys/api/Esys_Create.c:398:Esys_Create_Finish() Received TPM Error
ERROR:esys:src/tss2-esys/api/Esys_Create.c:134:Esys_Create() Esys Finish ErrorCode (0x0000098e)
ERROR: Esys_Create(0x98E) - tpm:session(1):the authorization HMAC check failed and DA counter incremented
ERROR: Unable to run tpm2_create
$ tpm2_create -u testseal-wpauth.pub -r testseal-wpauth.priv -i hunter2.txt -C testprim-wauth.ctx -P str:testpwd
# OK

조금 혼란스러운 점은 인증으로 보호된 기본 키로 생성된 이러한 객체 중 하나를 로드하고 래핑 해제하는 것이 다른 환경에서 로드가 수행되는 경우 제대로 작동한다는 것입니다.허가받지 않은첫 번째 키:

# no password required here
$ tpm2_load -C testprim.ctx -u testseal-wpauth.pub -r testseal-wpauth.priv -n testseal-loadedwnopauth.name -c testseal-loadedwnopauth.ctx
$ tpm2_unseal -c testseal-loadedwnopauth.ctx
hunter2

그러나 인증 값으로 보호되는 기본 키로 로드하는 경우 로드 시 비밀번호가 필요합니다...

# Try load without password
$ tpm2_load -C testprim-wauth.ctx -u testseal-wpauth.pub -r testseal-wpauth.priv -n testseal-loadedwpauth.name -c testseal-loadedwpauth.ctx
WARNING:esys:src/tss2-esys/api/Esys_Load.c:324:Esys_Load_Finish() Received TPM Error
ERROR:esys:src/tss2-esys/api/Esys_Load.c:112:Esys_Load() Esys Finish ErrorCode (0x0000098e)
ERROR: Eys_Load(0x98E) - tpm:session(1):the authorization HMAC check failed and DA counter incremented
ERROR: Unable to run tpm2_load
# with password:
$ tpm2_load -C testprim-wauth.ctx -u testseal-wpauth.pub -r testseal-wpauth.priv -n testseal-loadedwpauth.name -c testseal-loadedwpauth.ctx -P str:testpwd
# OK

...하지만 비밀번호 없이 차단을 해제할 수 있습니다.

$ tpm2_unseal -c testseal-loadedwpauth.ctx
hunter2

하지만 이는 봉인된 개체 자체에 비밀번호가 없기 때문이라고 추측하고 있습니다. 봉인된 개체 자체에 암호 인증 값( -p플래그 in tpm2_create)이 제공되면 해당 암호 없이는 봉인을 해제할 수 없습니다. 이는 예상되는 동작이므로 최소한 이 방법은 작동합니다.

암호로 보호된 기본 키로 생성된 항목이 나중에 해당 암호를 요구하지 않고도 여전히 사용할 수 있는 것처럼 보이는 이유가 혼란스럽습니다.

암호는 순전히 기본 키 아래에 후속 하위 개체를 생성할 수 있도록 하는 것입니까?

여기서 뭔가 빠졌나요?

관련 정보