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打ち込むの面倒だな~生体認証したいな~と思っていたので指紋認証デバイスを購入した。

実際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:

https://support.1password.com/windows-hello/#manage-your-settings

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/

https://1password.community/discussion/comment/633443/#Comment_633443

引用だと分かりにくいが太字部分がコマンドである。引用の中にコードブロックは作れないらしい。
とはいえ大事なのは後ろ半分の方で、"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.

https://helgeklein.com/blog/checking-windows-hello-for-business-whfb-key-storage-tpm-hardware-or-software/

マジかよ…

記事を読み進めながら確認用のコマンドを実行していく。
そして肝心の鍵の保存場所の結果は以下の通り。

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のセットアップ

結果確認

Windows HelloでTrusted Platform Moduleを使用できた設定画面

晴れてチェックボックスが有効化し、「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をクリアした上で再々削除からの再々々設定を行っている。