Windows HelloがTPMを使っていなくて1Passwordに毎日パスワードを打ち込んでいた話
結論
TPM有効化前からWindows Helloを使っていると、有効化後もTPMを使わずに認証用データが管理される
1PasswordはWindows HelloがTPMを使っていないとパスワードレスのアンロックができない
Windows Hello認証用のデータを一度削除して作り直すことで、TPMを使った認証用データの管理を行うことができる
1Password
僕は1Passwordというパスワードマネージャーを使っている。
SSHキーの管理やCLIとの連携もできてオススメ、という友人の勧めで使い始め、今ではすっかり沼にハマって年額プランで契約してしまった。
1Passwordのアンロックは基本的にパスワードを打ち込むのだが、OSに備わった他の認証方法を選ぶこともできる。例えば僕のiPhoneではTouch IDで認証されるようにしている。
そのうちの1つにWindows Helloがあり、デスクトップはこれを使ってアンロックできるようにしている。
今まで生体認証やセキュリティキーの対応デバイスがなかったのでPINコードでアンロックをしていたのだが、起動してすぐは1Passwordのパスワードを打ち込む必要がある。
そのため、一定時間放置した後の再ロックを解除するだけにしか使えなかった。
指紋認証の導入
1Passwordのアンロックはもちろん、毎日のログインにしてもPIN打ち込むの面倒だな~生体認証したいな~と思っていたので指紋認証デバイスを購入した。
my new gear...
— コーヤ・ロードアゲイン (@ringoh72) February 6, 2024
デスクトップでWindows Helloを使いたかったんだけど、対応カメラは高かったから指紋認証デバイスを買った
これでpinを打ち込む必要がなくなって楽になるはず#コーヤの写真日記 pic.twitter.com/ZiEq7ssbaO
実際Windowsへのログインは楽になったが、1Passwordについてはあんまり変わらない。初回のパスワード打ち込みのほうが面倒だし…
Trusted Platform Moduleを使ったアンロック
すでにiPhoneでTouch IDを使ったアンロックを設定していたので、Windowsでも同様の設定がないか探したところ発見した。
全部英語なのが悲しいところだが、翻訳も使いながら頑張って読む。
To unlock with Windows Hello without entering your password after you quit 1Password or restart your PC, you can use the Trusted Platform Module with Windows Hello:
Trusted Platform Moduleとやらを使えばパスワードを打ち込まずにアンロックできるらしい。Win11にするとき有効化したやつだったので、今から再起動してBIOSを開く必要もない。すぐさま設定画面を開く。

赤枠で囲った部分がその設定…なのだが、グレーになっていてクリックしても反応がない。なんで?
原因や解決策について調べる
とりあえずググる
流石におかしいと思って"1password windows hello tpm"でググったらそれっぽいフォーラムが見つかった。
今のバージョンが8.10.24なのでそう遠くなくて、何かしらヒントがあるかもしれない。日本語に翻訳しながら読んでいくと以下のようなコメントがあった。
i fix this with this command in a PS shell:
certutil -DeleteHelloContainer
logoff
after that i reboot and i have to reactivate windows hello again (pin + fingerprint)
found this solution here (where you can find the instruction to check if your TPM is used or not):
https://helgeklein.com/blog/checking-windows-hello-for-business-whfb-key-storage-tpm-hardware-or-software/
引用だと分かりにくいが太字部分がコマンドである。引用の中にコードブロックは作れないらしい。
とはいえ大事なのは後ろ半分の方で、"where you can find the instruction to check if your TPM is used or not"とある。ウソだろTPM有効化されて使ってないとかあるのか!?
Windows HelloがTPMを使っているか確認
そして書かれていたリンクに飛ぶ。
However, if a TPM is not available, the key may be stored in the filesystem instead.
マジかよ…
記事を読み進めながら確認用のコマンドを実行していく。
そして肝心の鍵の保存場所の結果は以下の通り。
C:\>certutil -csp "Microsoft Passport Key Storage Provider" -key -v
~~~ 省略 ~~~
NgcKeyImplType: 2 (0x2)
(NCRYPT_IMPL_HARDWARE_FLAG -- 1)
NCRYPT_IMPL_SOFTWARE_FLAG -- 2
(NCRYPT_IMPL_REMOVABLE_FLAG -- 8)
(NCRYPT_IMPL_HARDWARE_RNG_FLAG -- 10 (16))
~~~ 省略 ~~~
NCRYPT_IMPL_SOFTWARE_FLAGがON、つまりファイルシステムに保存されている。TPMならNCRYPT_IMPL_HARDWARE_FLAGが正しいはずなのに。ダメじゃん!
Windows Helloの認証情報削除と再設定
というわけで、記事に従って一旦Windows Helloの認証情報を消して再設定することにした。
ちなみに削除コマンドを入力後サインアウトする必要があり、次のログインはMicrosoftアカウントのパスワードを打ち込む必要がある。
僕のように読みながら作業するタイプの人は、まずアカウントにログインできることを確認しよう。
⚠️認証情報の削除コマンドは一切の警告がない。
繰り返す。
⚠️認証情報の削除コマンドは一切の警告がない。
もしかしたら管理者アカウントだからかもしれないけど、コマンドプロンプトから普通に実行できてしまう。
記事を書くにあたって警告の有無が気になって実行したら、普通に完了してWindows Helloの設定を再々設定するハメになった。気をつけよう。
C:\>certutil -DeleteHelloContainer
このタスクを完了するには、今すぐサインアウトしてください。
CertUtil: -DeleteHelloContainer コマンドは正常に完了しました。
この後はサインアウトからの再ログインをして、Windows Helloの再設定をしていけばOK。

結果確認

晴れてチェックボックスが有効化し、「Windows HelloでTrusted Platform Moduleを使用」を設定することができた。
1Passwordを再起動するとパスワードの入力なく指紋認証だけで通過する。
成功だ!!
もう1回結論
TPM有効化前からWindows Helloを使っていると、有効化後もTPMを使わずに認証用データが管理される
1PasswordはWindows HelloがTPMを使っていないとパスワードレスのアンロックができない
Windows Hello認証用のデータを一度削除して作り直すことで、TPMを使った認証用データの管理を行うことができる
おまけ: もしかしたらやらないといけないかもしれないこと
あれこれ試行錯誤をしていたので、もしかしたらやらないといけなかったかもしれないことがある。
TPMのクリアだ。

TPMのクリアによってWindowsに所有権を取り直させ、Windows Helloの認証情報を入れられるようにする必要があるかもしれない。
確認のためにWindows Helloの削除コマンドを再実行してしまった際はWindows Helloの再々設定がソフトウェアによる鍵管理になってしまっていて、TPMをクリアした上で再々削除からの再々々設定を行っている。