もらったセキュリティキーは絶対に危険だから使うなという話ではないです。
なんの話か
- 先日の FIDO セミナー で Yubico のセキュリティキーを配ってたんですが、いざこのキーを使おうとしたときに「本当に信用していいんだっけ」と思った
- 個人的には「Yubico のブースにいた、Yubico の服をきた人が配っていた」で信じていいんじゃないかと思っている
- もらったセキュリティキーは検証してから使うべき、という話ではない(信用できる文脈でもらったかどうかのが大事だと思う)(この文章は、それはそうとして本当に検証しきれるのか?という話)
- もう少し信用が落ちる場合はどうか
- 大規模カンファレンスで「セキュリティキー・ガイ」を名乗るおじさんが、めちゃくちゃ配りまくってるセキュリティキーだったら?
- セキュリティキーの文脈じゃなくてもわけわからんやつが配ってる謎の USB デバイスを使うな、という話ではあると思う
Yubikey Verification
というのがあって、あなたが持ってるそれ、本当に YubiKey なの?を検証できる。 具体的にこのサイトが何をしてるかわかってないけど、安直に考えるとアテステーションを使って署名の検証をしている(= YubiKey にしか入っていない秘密鍵を持っていることの検証をしている)と思う。(違ったら教えてほしい)
これは YubiKey でなくても、FIDO certified なセキュリティキーやベンダーが公開鍵を公開していれば検証できる。(カジュアルにできるサイトがあるかどうかはわからん)(アテステーションの検証をしているサービスで使ってみれば良いはず)
本当の YubiKey を改造した悪意のあるセキュリティキーだったらどうか
こういうのを作れるんじゃないか?と思っている。
このハンドラーは、例えばリクエストの origin が「www.yubico.com」の場合リクエストを本物の YubiKey に送信し、レスポンスをそのまま返し、そうではない場合悪意のあるモジュール(秘密鍵を攻撃者が知っている、とか)にリクエストが送信されるようになっている。
そうすると、おそらく Yubikey Verification では Yubikey と判定される、悪意のあるセキュリティキーが存在できてしまうのでは?と思っている。
もうすこし詳しいユーザーはアテステーションを検証しているサービスでこのキーを利用して、本当に信用できるかどうかチェックするかもしれない。
その場合、 attestation=required なリクエストに対してだけ Yubikey のレスポンスが返せば、ユーザーはこのセキュリティキーが危険なものであることに気づけ無いので attestation=required でないサービス(= iOS16 に対応しているサービス)に対してだけ攻撃が成功する。
繰り返し
もらったセキュリティキーは絶対に危険だから使うなという話ではないです。