私は秘密を安全に保つために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
少し混乱しているのは、認証で保護された主キーで生成されたこれらのオブジェクトの1つをロードしてアンラップすることが、他の環境でロードが実行された場合に正しく機能することです。許可されていない最初のキー:
# 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
)が指定されている場合、そのパスワードがないと封印を解除することはできません。これは予想される動作であるため、少なくともこの方法は機能します。
パスワードで保護された主キーで生成されたエントリが、後でそのパスワードを必要とせずにまだ使用できるように見える理由は混乱しています。
パスワードは、純粋に主キーの下に後続の子オブジェクトを生成できるようにするのですか?
ここで何か抜けましたか?