2022年2月1日火曜日

YubiKeyと2要素認証

しばらく前に、YubiKeyを購入して、いくつかの重要なアカウントでYubiKeyによる2要素認証を設定した。

きっかけは、Amazon.{com|co.jp}でSMS認証をたびたび要求され、日米を往復する生活だと不便を感じたためだ。結果的にはAmazonはYubiKeyには対応していなかったが、いろいろとセキュリティを改善することができた。

 



本来であれば技術ブログの方に書くべきネタなのだが、あまり技術的な内容が無いので、ユーザ視点でこちらに。一般ブログとして理解できるように書いてみたつもりだ。

 

 

セキュリティは非常に専門的な技術だ。素人が考えた「僕が考えた最強のセキュリティ」は侵入者にとっては、簡単に出し抜かれる。これまでも、当代最高の専門家が考えたセキュリティが何度も破られている。

自分はそんなに目立ってないから大丈夫、というリスク回避策は、コンピュータの総当りに対しては無力。大口アカウントでも弱小アカウントでも乱れ打ちで狙われる。

セキュリティ対策の基本は、自分で考えずに本物のプロが保証した方法を使うこと。 

ただし、どれを守るか、破られた時にどれだけ深刻か、は自分で考えなければならない。破られたくないものを守る方法を専門家のアドバイスに従う、ということ。

例えていうなら、鍵・錠前を自分で作ってはならない。鍵・錠は買ってくる。素人が考えた錠前は縄文時代レベルで、プロには簡単に破られる。しかし、どこに鍵・錠前を付けて守るかはユーザが考えなければならない。

しかし、この、素人の考えた「僕が考えた最強のセキュリティ」は、ソフトウエアの現場で度々みられる現象だ。ホント関わりたくない。

 

代表的な「やらないほうがいい」方法。

素人が考えたが、専門家にとっては意味がない、と判明している方法。

XXヶ月おきにパスワードを変更させる

パスワードを定期的に変更させると、ユーザは覚えきれないので、より単純なパスワードを選ぶ。セキュリティ的には、定期変更させるほうが弱くなる。

遅くとも2016年には共通認識となっていただろう。 もし、いまだにパスワードを定期的に変更させているとしたら、やばいシステムだ。

メールでファイルを送る時に暗号化ZIP(暗号化PDFも同様)て、パスワードを別メールで送る

PPAP 「Password付きZIPファイルを送ります、Passwordを送ります、Aん号化(暗号化)Protocol(プロトコル)」とも言われている。メールなどで添付ファイルを送る時に昭和な企業で使われていた方法。

添付ファイルが漏れた時にパスワードが無いと解凍できないので安全、と信じられていた。少し考えるとわかるが、添付ファイルが漏れる時点で、その直後に送られるパスワードも漏れるので無意味。FAXなど全く別の手段で送るのであれば多少の意味はあるが、無駄に手を掛けるほど良い、という謎な風土が生み出した技。相手先にも「私はバカですよ」とPRできる。

2020年、政府でさえ、使用禁止の方向である。 

 

パスワードは危険か?

パスワードは危険か?

通常使われるユーザIDとパスワードは危険か?

じつは、正しくパスワードが運用されていれば、ある程度の安全は担保される。つまり、ユーザが、サイトごとに異なる、十分に複雑な(辞書にのっていない、大文字数字記号を混ぜた、十分な長さの)パスワードを使えば。サイト側はリスク回避のため、パスワード漏洩はユーザ責と利用契約する。

しかし、ユーザはそんなに覚えきれず、殆どの場合、どこのサイトでも同じ、長くて8文字、といったパスワードを設定する。そういうパスワードはツールで一撃で破れるし、パスワードが流出したら他の(より大事な)アカウントに被害が及ぶ。

 

比較的おすすめできる方法


ランダムパスワードを生成し、ブラウザ・パスワード管理ツールに覚えさせる

最近のほとんどのウェブブラウザでは、ユーザ登録時に、パスワードを自動生成してくれる。それは十分な強度があるので、そのまま使うことは理にかなっている。また、サイトごとに異なっているので流出しても他に危険が及ばない。複雑なパスワードは人間には覚えられないがブラウザが覚えている。その端末を使う限りは、次から人間が入力する必要もない。たいていのブラウザはクラウド同期できるので、ブラウザにログインすれば、別の端末でもパスワード自動入力は使える。エクスポートして別管理することも可能。

これは、上記の「パスワードは危険か?」節で述べたことをコンピュータの力で実現すると言う方法だ。

ただし、パスワードフィールドが8文字とか、昭和な制限がかかっているウェブアプリには使えない。


2要素認証

よく2段階認証と誤解されているが2要素認証が正しい。知識(パスワードなど)、所有(携帯電話やトークンなど)、生体(指紋や虹彩)のうちの2つの要素を確認するのが2要素認証。よくある「秘密の質問」は、パスワードと秘密の質問の両方が「知識」なので2要素認証ではない。

セキュリティを担保するためには、パスワードだけでなく2要素認証が望ましい。

面倒なもの、簡単なもの、サイト・サービスによっていろいろあるが、可能な限り設定しておくことをおすすめする。

次に説明するSMS, ワンタイムパスワード、セキュリティキーはどれも、2要素認証の実現方法の一つ。

いったん、このような2要素認証を行った端末・ブラウザでは、以後、パスワードや第2認証を要求されない。これはブラウザが認証状態を記憶しているから、つまり、所有によって認証しているから。そして、所有デバイス(スマホやPC)はパスワードや生体認証などによって守られていることを仮定しているから。

余談だが、iPhoneの指紋認証、FaceIDなどは2要素認証ではない。それらはパスコードを呼び出すためのショートカットにすぎない。FaceIDが認証できなくても、いつでもパスコードでオーバーライドできる。

SMSで認証コードを送る

近年は、携帯電話の普及率がとても高いのでSMS認証が使われることが多い。しかし、日米を往復していると、非常に使いづらい。

いちおう、スマホの電源をOFF→SIMを挿し替える→起動→国際ローミングでSMSを受信する、という手順で対応可能。

しかし、SMSは盗聴される可能性があるため、現代では安全とはいえない。

Amazon.{com|co.jp}は、ログイン場所が大きく移動したとき、普段使っていないブラウザを使ったなど、すぐにSMSによる再認証を求めてくるので困ったものだ。そういった時は、全端末でブラウザに記憶されている認証情報がリセットされる。物販で金銭がからむので、安全性を高めたいのはわかるが、他の方法も用意して欲しい。

似ているのだがGoogleの場合は、PCでログインしようとするとスマホに通知が送られてくる。それを承認すればPCでのログインが許可される。通知はワールドワイドなのでSMSよりも優れている。


ワンタイムパスワードツールを使う

いくつかのサイトでは認証アプリが利用可能だ。ログインしようとすると認証コードの入力が求められる。スマホのアプリを立ち上げて、そこに表示される認証コードを入力する。認証コードの有効期限は90秒ほど。複数台のスマホを持っていても、それらは時刻同期されているので、どれでも、世界中から利用可能。

代表的にはGoogle Authenticator。

回復パスワードとは違うので注意しよう。回復パスワードはパスワードを忘れた時の認証コード。2要素認証ではないが、設定できるところでは設定して、プリントアウトしておくことが望ましい。

 

OTAドングル

コストがかかりすぎるため、金融機関でしか見たことがない。ボタンを押すと6〜8桁の数字が表示されるデバイス。これも時刻同期をもとにした(端末に時計が入っている)認証デバイス。これをアプリでやっているのが上の認証アプリ。

 

セキュリティキーを使う

ようやく本題。

SMS認証を回避したい、アカウントを守りたい、の理由で、対応しているサービスはYubiKeyに移行した。 購入したものはYubiKey 5Ci。USB-CとLightningのコネクタが付いていて、iPhone、Andorid、PCで使える。USB-Aしか付いていない社用PCには、闇の変換コネクタ(USB-A plug ⇔ USB-C receptacle)を使う。

なぜ 「闇」かというと、USB-A plug ⇔ USB-C receptacleの変換は、USB-Cの仕様書で明確に禁止されているから。たとえば、ACアダプタの出力がUSB-C plugで、それに、この(USB-A plug ⇔ USB-C receptacle)変換アダプタを接続して、パソコンのUSB-A receptacleに挿入したらどのような悲劇が起きるだろうか。

 

でも売っているので、リスクを理解して使う。

Plug=オス、Male、凸、Receptacle=メス、Female、凹。近年のPolitically Correctnessを配慮してこのように呼称することが一般的。

ログインしようとして、IDとパスワードを入力したら、さらにセキュリティキーの挿入を求められるので、デバイスを挿して電極をタッチする。USB HIDデバイスとして認識されるのでデバイスドライバや特別なアプリのインストールは不要。

YubiKeyはFIDO2(上で示した手順)以外にもOAuthやOpenPGPの機能も持っているらしいが未検証。 

キーをなくしたらオシマイ(回復パスワード頼み)、いちいちキーを挿すのが面倒、というのはあるが、物理キーさえあれば大丈夫、というのは、脳の認知負荷をだいぶ軽減してくれる。

これ以上の、SSHの公開鍵登録などは、たぶん、一般ユーザには理解されない方法だろう。

 

0 件のコメント:

コメントを投稿