ピクチャ パスワードのセキュリティを最適化する

いただいたいくつかのコメントを受けて、ピクチャ パスワードのセキュリティについてもう少しお話ししたいと思います。ピクチャ パスワードのセキュリティを最適化する方法を扱ったこの記事は、User Experience (ユーザー エクスペリエンス) チー ムの開発ディレクターであり、この機能の数学的な面とセキュリティ面に特に関心を持っている Jeff Johnson が執筆しました。この機能はログオンの新しい形であり、必然的にセキュリティについての懸念 (特にモバイル デバイスの場合) や、新しい認証技術に 対する懸念 (顔認証技術の不安的さ、生体認証技術に見られる課題など) を伴うため、アプローチとして潜在的な欠点があるのではないかと心配される方がいらっしゃるのは無理もないことだと思います。私たちが目指したのは、テキスト パスワードに劣らない安全性 を明確に確保しつつ (これを数学的に裏付ける役割を果たしたのが Jeff です)、優れた利便性を併せ持ったメカニズムです。以下の記事では、このアプローチが総合的に見て堅牢なソリューションと呼べる理由について論じています。この記事を読まれる際は、パス ワード入力の歴史を通じて、さまざまな "ベスト プラクティス" (数字と文字の組み合わせや大文字/小文字の併用、長さ、パスワード再利用の禁止、辞書に載っている語句の回避といったポリシー) や、注意すべき重要なポイント (頭上のカメラやキー ロガーが 仕掛けられている可能性のある公衆インターネット端末は避ける、など) が確立されてきていることを念頭に置いてください。ご想像いただけるかと思いますが、ピクチャ パスワードにもこれに類するさまざまなポイントがあります。今回の記事では、その一部を大まかに紹介 すると共に、このモデルの背景にあるセキュリティ面のロジックを説明しています。 --Steven


私たちが形は変われど何度かにわたって受けている質問として、「マシンのセキュリティ確保に関心があるのだが、最も安全性の高いログイン ジェスチャを作成するためのベスト プラクティスはどのようなものか?」というものがあります。これを出発点として展開できる分 析は (少なくとも数学屋の私にとっては) 興味深いものです。これにはゲーム理論が関連するのですが、まずは次のベスト プラクティスにまとめてご紹介します。

  • 興味を引く点が 10 か所以上ある写真を選びます。興味を引く点とは、ジェスチャの基準となる領域のことで、具体的にはジェスチャの中でタッチする点、線でつなぐ箇所、円で囲む部分などを指します。
  • ジェスチャの種類やシーケンスはランダムに織り交ぜます。最も多くの順列ができるジェスチャは線ですが、ユーザーがいつも 3 本の線を使っていると、攻撃者は他の種類のジェスチャを含むシーケンスを除外することができるため、実際には推測の難易度が下が ってしまいます。
  • タップと線と円を 1 つずつ使用する場合、各ジェスチャの順序はランダムに決めます。これによって、予測可能な順序を使用した場合と比べて、6 倍の数の組み合わせができます。
  • 円のジェスチャの場合、時計回りに描くか反時計回りに描くかはランダムに決めます。また、円のサイズを普通予想するよりも大きく、あるいは小さくすることも有効です。
  • 線のジェスチャの場合、無意識に左から右に線を引きがちかもしれませんが、2 点間をつなぐ方向をランダムに選べば安全性は向上します。
  • 他のすべての認証方式と同様に、ピクチャ パスワードでも、入力する際は他人に見せないようにします。
  • コンピューターは、権限のない人は物理的にアクセスできないような、安全な場所に置きます。他の方式でのパスワード入力と同様に、画面が見える角度を意識し、画面を操作するようすを録画するデバイスがないか注意します。
  • 画面に残る操作痕 (指紋) によってジェスチャが特定される可能性がある点に注意します。定期的に画面をきれいにしましょう。画面をきれいにしてからサインインし、その後何もしないでおくとリスクが増すことになりますが、一般に、繰り返し使用して指紋が たくさん残っている状態の方が攻撃者はパターンを読み取りやすくなります (それにもちろん、デバイスは指紋だらけでない方が気持ちがいいものです)。数字の PIN を入力する際にこれはさらに問題となります。デバイスを頻繁にオン/オフし、一日に何十回も同じシー ケンスを入力していると、その位置に指紋がたくさん残ってしまうことがあります。定期的に、ピクチャ パスワードによるログオンの画面を表示した状態で画面を斜めに傾け、ジェスチャのシーケンスを示唆するような痕跡がないか確認します。そのような痕跡がある場合は、画 面をきれいにするか、ピクチャ パスワードの入力領域にいくつか指紋を付けます (これには後述の POI を増やす効果があります)。

これらのヒントに従えば、コンピューターの安全性を大幅に高めることができます。

コメントのいくつかでご提案いただいたように、画像サイズを小さくしてランダムな位置に表示したり、少し回転させて表示する方法についても検討しました。ユーザービリティに関するフィードバックから、画像を小さくすると、ジェスチャを正しく入力するための難易度が上 がり、ログオンのエクスペリエンスの没入性が低下することはわかっていたのですが、それによってセキュリティが大幅に向上するのであれば、コストとメリットを検討したかったためです。結果としてわかったのは、画像の位置をずらすことによって、特定の箇所への操作痕の蓄積 は軽減することができるものの、同じパターンのタップ、線、円が複数の "かたまり" となって、さらにはっきりと表れてしまうということです。この情報があると、攻撃者は各ジェスチャの相互の位置関係を容易に割り出すことができます。こうして得られたパターンを画像上で動 かして、写真の中の特徴のある箇所と一致する位置を割り出すのは簡単なことです。結果、安全性については目立った向上がないものの、すばやく滑らかなエクスペリエンスという観点ではかなりの悪影響があることがわかりました。現実問題としては、操作痕を使ったジェ スチャの割り出しは非常に困難です。ユーザーが何日か使ったタブレットで検証したところ、多くの場合、操作痕が多すぎて、ジェスチャのセットを割り出すための解析を始めることすら困難でした。ユーザーのログオン シーケンスをあらかじめ知らされ、何を探すべきかがわかっ ている状態でもなお、成功の度合は限られたものでした。この分析を含めたのは、革新的な新しいテクノロジを導入する際は、潜在的に存在する攻撃ルートを開示し、脅威の度合や考えられる軽減策について、技術コミュニティが全体的な合意を形成できるようにするこ とが重要だと考えるためです。もちろんその一方で、画面のテクノロジも引き続き改良が進み、やがては操作痕の問題も過去のものとなると確信しています。

解析

各シナリオにおいて、攻撃が成功する可能性を計算するのも興味深いものです。前回の記事 (英語) でお話ししたとおり、ジェスチャは 100 x 100 のグリッドを基準としているため、最も単純なジェスチャ (タップ) でも 10,000 とおりの値が存在します (近接性の照合を加味すると、実効的には 270 とおりまで絞り込まれます)。現実的には、興 味を引く点 (POI) の数はこれよりずっと小さくなります。写真の中で記憶の基準にできるような箇所の数は限られるためです。

解析の方法はこれ以外にも考えられますが、今回は議論の趣旨を考慮し、POI の数はかなり限られ、ジェスチャにはこれらの点のみが使用されるという仮定で進めます。タップは POI に対して直接行われ、円には 2 種類の大きさ (ある点を囲む小さな円と 大きな円) と 2 種類の方向 (時計回りと反時計回り) があり、線は必ず 2 つの POI 間を結ぶものとします。これは厳密には正確でないため、実際の順列の数はこれよりもさらに大きくなります。

Windows では、ピクチャ パスワード (および PIN) に対する追加の保護措置として、入力に 5 回失敗するとログオン メカニズムが無効化されるようになっています (この場合、従来型のパスワードでログオンする必要があります)。これを前提として、任 意のシナリオについて、それぞれ 2 種類の方法で相対的な安全性を検証すると、興味深い考察ができます。

まず、ユーザーのジェスチャ選択方法について完全に把握している攻撃者が、ロックアウトが起こる前にマシンにサインインできる確率について検証します (これをオッズ 1 と呼ぶことにします)。同様に確からしいジェスチャ シーケンスが x 個ある場合 、ロックアウト発生までの 5 回以内の試行で割り出しに成功する確率は 5/x です。

2 つ目の興味深い観点は、シナリオのルールに従ってランダムに選択したパスワードを設定されたマシンが 100 台与えられた場合について検証するというものです (これをオッズ 100 と呼ぶことにします)。これらのマシンのうち 1 台以上でログオンに成功する 確率はどれくらいになるでしょうか。これらはそれぞれ独立した事象なので、確率は次のようになります。
  1)/x)^100

基本シナリオ

ひどく安全性が低いシナリオを想定してみましょう。使用する "写真" は、全体が真っ黒で、中央に白い点が 1 つだけあるというものです。POI は 1 つしかないため、使用できるジェスチャはタップと円だけです (線を引く先が存在しないため、線は使用でき ません)。タップのみを使用した場合、白い点の上で 3 回タップする以外に有効なシーケンスはないため、攻撃が成功する可能性は当然ながら 100% となります。タップを使用せず、円のみを使った場合について考えてみましょう。各ジェスチャについてランダムに使用 できる円は 4 パターンあります。これによって、可能なジェスチャ シーケンスの数は 43 、つまり合計 64 とおりとなります。このシナリオでは、オッズ 1 は 7.81%、オッズ 100 は 99.97% となります。意外なことに、マシンが 1 台の場合 は、このピクチャ パスワードでサインインに成功する確率は 8% 未満です (直感ではもっと高い値になりそうに思えます)。一方で、マシン 100 台の場合は、最低でも 1 台が侵入を許してしまうことは、事実上避けがたいということがわかります。これで問題ないと 感じるユーザーもいらっしゃるかもしれませんが、セキュリティ意識の高いユーザーや、ある程度の数のマシンを管理する IT 管理者のほとんどにとっては、この確率は許容できるものではないでしょう。

ではこのシナリオを少し発展させてみましょう。各ジェスチャについて、タップを使用するか円を使用するかは、ランダムに決めることにします。これによって各ジェスチャの複雑さは倍になる、と言いたくなりますが、そうではありません。円は 4 パターン、タップは 1 パターン 存在するため、一意なジェスチャは 5 パターンあることになり、シーケンスの数は 125 とおりになります。

先ほど追加した "ランダム" 方式は、具体的には次のような方法で適用することにしましょう。コインをトスして、タップを使用するか円を使用するかを決めます。円に決まった場合は、4 パターンの円の中からランダムに選択します。問題なくランダムなように思えま すが、実際には円のみを使用するよりも安全性が低くなっていることに注意しましょう。2 回に 1 回は、パターンが 1 つしかないジェスチャ (タップ) を使用することになるためです。攻撃者はこの場合、タップを 2 回または 3 回含むシーケンスに攻撃 を集中することで、成功率を高めることができます。ロックアウト発動までの 5 回の試行で可能な、理想的な攻撃戦略の例としては (同じ勝率を得られる戦略はほかにもあります)、まずタップ 3 回というシーケンスを試し、次にタップ 2 回の後に 4 パターンの円 をそれぞれ当てはめるというものが考えられます。単純計算ならオッズ 1 は 4% (先ほどの 7.81% よりも安全性が高い値) になりますが、攻撃者がこの戦略を使用すれば、オッズ 1 は 25% と、円だけを使用した場合よりも悪い値になります。統 計とは油断ならないものです。

さいわい、このシナリオは簡単に改善することができます。各ジェスチャを決める際に、1 ~ 5 のランダムな数字を選ぶのです。1 ならタップを使います。それ以外の場合は、4 パターンある円の中から数字に応じて 1 つを選びます。これによってオッズ 1 は 4% (最初のシナリオの 2 倍近く良い値) になりますが、オッズ 100 はまだまだ 98.31% というひどいレベルです。

若干の改善

方法論を少しだけ改良してみましょう。このシナリオでは、POI が 2 つだけあるものとします (実際の写真がこれほどシンプルであることは想像しにくいため、真っ黒なキャンパスに白い点が 2 つあるようすをイメージしましょう)。これによって線のジェスチャも選択 肢に入りますが、使用できるのは、点 1 から点 2 への線と、点 2 から点 1 への線という 2 パターンだけです。

前の例の教訓を活かし、ジェスチャの種類をランダムに選んでからジェスチャを決めるという方法はとりません。使用できるジェスチャのパターンをすべて数え上げて、各パターンに数字を対応させ、ランダムに数字を選ぶことで、各パターンが同じ確率で使用されるようにし ます。使用できるパターンには、タップが 2 とおり、円が 8 とおり、線が 2 とおりあります。ジェスチャ シーケンスの総数は 123 、つまり合計 1,728 とおりとなります。これによってオッズ 1 は 0.29%、オッズ 100 は 25.2% となりま す。POI が 2 つしかない単純な写真で、攻撃成功の確率をこれだけ下げられるというのは、特筆に値するかもしれません。侵入を試みることができるマシンが 100 台あっても、1 台以上のマシンに侵入が成功するのは 4 回中 1 回だけなのです。

さらなる向上

次に POI が 5 つある写真を想定しましょう。これなら、非常にシンプルではありますが、実際の写真をイメージできそうです。使用できるパターンは、タップが 5 とおり、円が 20 とおり、線が 20 とおりになります。これによって、可能なシーケンスの数は 453 = 91,125 とおりとなります。オッズ 1 は 0.0055% と無視できるほど小さく、オッズ 100 も 0.55% と非常に低い値になります。多くのユーザ ーにとって、データを保護するために十分な値と言えるでしょう。

最大限の安全性

さらに安全性を高めるため、POI が 10 個ある写真を選んだ場合について考えてみましょう。ある写真に POI がいくつ含まれるかは、人によって意見が分かれる点です。しかし、ジェスチャの基準に使用できる箇所をユーザー自身が 10 個特定できさえすれ ば、明確に POI と呼べるものがいくつあるかは問題になりません。POI として明確でない (にもかかわらずユーザーは安定して基準に使用できる) 点が含まれていれば、セキュリティ面ではむしろプラスになります。

使用できるパターンは、タップが 10 とおり、円が 40 とおり、線が 90 とおりになります。これでシーケンス数は、きわめて堅牢な 1403 = 2,744,000 とおりです。オッズ 1 は 0.0002% と無視できるほど小さな値になります。実 際、POI が 10 個ある写真でマシンに侵入できる確率は、なんとワシントン州営の Select 4 型の宝くじで 1 ドルのチケットを買い、10,000 ドルが当たる確率の 50 分の 1 未満です。オッズ 100 は 0.018% まで下がり、オッズ 1,000 で さえわずか 0.18% となります。

ソーシャル エンジニアリング

パスワード、PIN、ピクチャ パスワードなど、すべてのサインイン方式に対して最も大きな脅威となるのが、ソーシャル エンジニアリングです。シーケンス作成の際にランダム化処理を施せば、いずれのサインイン方式についても効果的です。

上のような処理は、技術的な知識のある上級者なら、最低限のプログラミングや Excel の使用で実現できます。しかし、もっと幅広いユーザー層が活用できるような、高度な技術を必要としないジェスチャ シーケンスの作成方法があれば便利でしょう。もちろん 、こういったツールや手順を、多くのユーザーが進んで採用してくれるというような幻想は持つべきではありません。サイト管理者が要求しなくても自主的に強力なパスワードを選ぶユーザーと同じ程度の数にとどまるでしょう。

サイコロの目は時の運

軽い遊びのつもりで、ランダムなジェスチャ シーケンスを生成するアナログな方法を考えてみました。一般的な 6 面体のサイコロ (ハードコアなゲーマーが言うところの "D6") を使って、POI 6 つの場合のジェスチャ シーケンスを生成します。POI が 6 つ の写真は、サイコロでのマッピングにぴったりというだけでなく、使用できる線のパターン数 (30 とおり) がタップ (6 とおり) と円 (24 とおり) の合計に一致するという便利な特性があり、ジェスチャの種類を 2 つに切り分ける際にも便利です。

3 つのジェスチャのそれぞれについて、次の手順を繰り返します。

  1. サイコロを振ります。
    サイコロの目に応じて、6 つの POI のうちどれをジェスチャに使用するか決めます (線の場合は開始点に使用します)。
  2. もう一度サイコロを振ります。
    • 偶数の目が出た場合: 線のジェスチャ
      もう一度サイコロを振ります。
      最初の POI と同じ目が出た場合は、別の目が出るまでやり直します。
      出た目に対応する POI を線の終点に使用します。
    • 奇数の目が出た場合: タップまたは円のジェスチャ
      もう一度サイコロを振ります。
      次のリストに従ってジェスチャを決めます。
      1 - タップ
      2 - 時計回りの小さな円
      3 - 反時計回りの小さな円
      4 - 時計回りの大きな円
      5 - 反時計回りの大きな円
      6 - もう一度サイコロを振る

予想されるとおり、POI が 6 つの場合の複雑さは、POI 5 個の場合と POI 10 個の場合の間になります。オッズ 1 は 0.0023%、オッズ 100 は 0.23% です。

新しいピクチャ パスワード サインインを、私たちが作る際に楽しんだのと同じくらい、楽しんでお使いいただければさいわいです!

--Jeff Johnson