debiruはてなメモ

はてなブログの HTML が Invalid なの、わたし、気になります

【12日目】セキュリティが杜撰な事業者の話

まえがき

11日目では認証の話を書いた。続けてパスワードの話をしていく。

好ましいパスワードとは

Webサービス等でアカウントを作成する際、ユーザ名とパスワードを設定することがある。そういう場面であなたはどのようなパスワードを設定するだろうか。

暗証番号
123456 とか 1173149 とか
単語
hirakegoma とか himitsu とか password とか
それっぽいパスワード
fxxk1paf0rm とか hykKUKISTkdsi とか
記憶しづらいパスワード
!E39a&$wP とか
パスフレーズ
1pa-webform-koukaishitekudasai-mattemasu! とか
すごいパスワード
p&th*}Mf{*6MCY'%{R39u^~+Ln)e5zTl$uEUf28_Evl:|3=g (48文字)とか

この分類は適当だけれど、パスワードというものは他人が想像して当てられるようなものであってはならない。「複雑なパスワードを設定して」と言われることがあるが、これは「推測困難である」という特性を意味する。

しかし「複雑なパスワードを設定して」というばかりで、どのような文字列だったら複雑(つまり推測が困難である)と言えるのかについての説明がなされることは少ないように思われる。

最低でも8文字以上にするだとか、大文字小文字・数字や記号を含めるだとか言われることがあるがよく分からない。簡単すぎるパスワードを使っている人に助言するとしたらどのように説明すべきだろうか。

暗証番号は複雑じゃない?

暗証番号とは認証のための番号であり、数字のみで構成されたパスワードと同義と考えてよいだろう。ところで、銀行などでは「4桁程度の暗証番号」を使う機会があるが、これはパスワードの複雑さという面で問題にはならないのだろうか。

これは「なぜパスワードには推測困難性が必要なのか」を考えるとよい。推測困難性は「他人(攻撃者)に不正アクセスされないため」に必要であると考えられる。言い換えれば、現実的に攻撃(不正アクセス)が成功できてしまうかどうかが、そのパスワード強度あるいは認証方法そのものに問題があるかどうかの判断材料となる。

銀行の場合、まず「識別」をするのにキャッシュカード(または通帳)が必要であり、この時点で「所持」の要素が必要となる。また、「記憶」による暗証番号は4桁数字(高々10000通り)であるものの、攻撃を試みようとしても試行回数制限(暗証番号の入力を3回間違えると口座がロックされる)という仕組みがあるため、現実的に攻撃することはできないと考えることができる。

銀行を例にしたが、4桁程度の暗証番号でも問題がないのは、数回の試行回数でアカウントロックされる仕組みや、識別操作のために所持要素が必要であるという条件が組み合わさっているためであると考えられる。

逆に言えば、(そのような条件を持たない)一般的なWebサービスにおいて ID/PW 認証が用いられているとき、そのパスワードの複雑度が暗証番号レベルでは問題があるということになる。

実際にサービス事業者側がそのような問題のあるパスワード認証を提供していた事案としては「JALとANAのセキュリティの杜撰さに高木浩光先生が憤怒の狼煙を上げる(山本一郎)」が記憶に新しい。

セキュリティが杜撰な事業者の話

安全なパスワードを使っていくためには我々、サービスの利用者側が意識を高めなければならないが、サービス事業者側が杜撰であるせいで安全なパスワードを使えないケースが存在する。

  • パスワードはできるだけ複雑にしろ、と言う
  • パスワードは8文字以上・12文字以下にしろ、と言う
  • パスワードを定期的に変更しろ、と言う
  • パスワードには小文字・大文字・数字・記号を全て含めろ、と言う

パスワードの定期的変更の話はこの記事では触れない。IPA でさえ無責任に「ID・パスワードは定期的に変更すべき」という主張を2014年まで続けていたが、この件を境に IPA はそれを主張しなくなったと認識している。定期的変更の話題はこの記事では扱いきれないので触れてはいけない。

「小文字・大文字・数字・記号を含めろ」という制約は複雑性を増す意味では有効ではあるが、それをサービス事業者が強制するのは如何なものかという議論がある。3種類以下の文字種だけであっても十分に複雑なパスワードを作ることはできる。一方で4種類の文字種を含むが複雑でないパスワードを作ることもできる。

実際に某携帯電話サービスでは「記号を含み、8文字以下」というパスワードしか作れないものがある。8文字以下である。どう複雑にしろというのか。

パスワードを複雑にしろ、というのであればパスワードに「文字数上限」を設けるべきではない。設定できる文字数に上限があると、パスフレーズ形式の長い文字列を設定する自由が奪われてしまう。推測困難性および利便性の面でパスフレーズ形式は優れたパスワードの一種であるにも関わらずだ。

こんな事業者は嫌だ

私はパスワードの定期的変更の是非について5年くらい前から議論しており、定期的変更をすべきだと主張する組織にコンタクトを取ったりしてきたが、次のような事業者ばかりであった。

  • 「パスワードの定期的変更がなぜ必要なのか」という質問に対するまともな返答ができない
  • 「パスワードの定期的変更というが、定期的というのはどのくらいの期間なのか」という質問に、「お客様判断だが1ヶ月程度」などという根拠のない返答しかできない
  • 「パスワード文字長の上限が、12文字、16文字などに制限されているのは何故か。長いパスワードが設定できなくて不便なのでどうにかしろ」という問い合わせに、「システムの都合なのでご了承願いたい」という答えになっていない返答しかできない

どこもかしこもこんな返答しかして来ない。うんざりしている。セキュリティを真面目に考えられる人材はいないのか。いや、真面目にセキュリティを考察している事業者は最初から問題がないだけかもしれない。杜撰な事業者には指摘をしたところで改善される期待などできないのだ。

ちょっとこの記事の終着点が見えないが、とっとと12日目の記事を終わらせたいのでこの辺にしておこう。次の記事ではより具体的な事案について紹介したい。

今日のステータス

https://www.ipa.go.jp/security/vuln/report/index.html

改修中

アドベントカレンダーを毎日書くことの面倒さが分かってきた。

これはウェブ届出フォーム Advent Calendar 2017 の記事です。

Next debiru's HINT 「ホームページいうな