それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

パスワード記憶しないサイトが多すぎる!それでも記憶させたいから

パスワードを学習しないサイト多すぎませんか?

パスワード学習をいつもと違うブラウザ(chrome/safari)にしたくて、パスワード入れてみたが学習しないサイトが多い。

いくつかよく使うサイトにログインしました。しかしパスワードを覚えない。普段使わないブラウザだから駄目かと思っけど、どうも違うらしい。

サイト側の設定でパスワード記憶をオフにしている

autocomplete=off をつけていることが多いようです

(autocomplete=off)

これがセキュリティ上の配慮なんだたとしたら、こまります。ゆるふわセキュリティとでも呼びましょう。

サイト側の都合で・・・・

記憶させるかさせないか、これはユーザが決めること。


だと思いませんか。

サイト側にまかせていると「記憶させないほうが安全そうだから」という「ゆるふあセキュリティ」がまかり通ってしまう気がする。

ブラウザ記憶が無いと、ユーザーが同一のパスワードを使い回す

ブラウザが覚えてくれない、そう気づいたユーザーは「記憶できるパスワード」を入れてしまいます。「記憶できる」パスワードです。つまり、他サイトと共通のものを入れますよね?

他サイトと同じパスワードをユーザーに使わせるのが一番まずいんです。

設計者がセキュリティ対策としてパスワード保存を無効化したら、これが反って脆弱なパスワードを誘発する、あべこべな結果が引き起こされてしまいます。

SE職業界にはautocomplete=offのテンプレがあるようです。

現状、私が知る範囲で記憶できないサイト。ぱっとイメージしただけですぐにいくつも出てくる。


などなど、いくつか思いつきます。情シス屋がサイト作ってる感じの企業サイトに多く見られます。WEB屋と情シス屋の常識の違いでしょうか。パスワードへのポリシーでお互いの常識の鬩ぎ合いを感じます

個人的見解ですが、郷に入れば郷に従え。で、WEBではWEBの常識*1に従って欲しいと思います。

パスワード記憶、無理矢理やっちゃえ

ブラウザにパスワード記憶できて当たり前ですよね。

企業にパスワード記憶をさせろとクレームしても、取り合ってくれないだろうから、ユーザー自らパスワードを覚えて管理したいですよね。同一パスの使い回しよりマシですよね。

そういうプラグインもあるし、アドオンもあるし、もっとお手軽にブックマークレットで出来ます。(後述

私達ユーザーが取りうる安全なパスワード記憶

ブラウザに記憶させられたとして、安全なパスワード記憶とはどんなものだろうか。

私たちは、安全なパスワード記憶のためにいくつかの対策をすることができます。

  • サイトごとにパスワードを変える⇛非現実的
  • サイトごとにパスワードの生成ルールを決める⇛現実的
  • セキュリティレベルごとにパスワードを使い分ける⇛現実的
  • ブラウザに記憶させ、鍵の保管庫に鍵をかける⇛現実的

サイトごとにパスワードを変える

非現実的です。

よく銀行などのメールで「パスワードはほかのサイトと違うものを使いましょう」とメールが来ますがそんなものは非現実的です。

その銀行だけを使っていればそうでしょうが、非現実的です。

また、「パスワードは定期的に変えましょう」とも案内されますが、定期的にパスワードを変えるように強制は逆に怖いです。パスワードを連続変更して元のパスワードに戻してしまい、いつも同じパスワードにして使うユーザーが多発します。ユーザは使いまわしてるのに管理者側では毎回変わってると誤認識します。*2

サイトごとにパスワードの生成ルールを決める

現実的です。

パスワードに生成ルールを作りましょう。

たとえば三菱UFJにログインするパスワードと三井住友銀行にログインするパスワードを次のようにする

Passw0rd+mtu
Passw0rd+smbc
123+mufg@mypassword

メインのパスワード+サイト略称を使います。記号も数字も併せて含めることが出来て安全です。

記号のなかでも@と+は覚えやすく便利ですね。結構使えそうです。

  • 企業名のアルファベットから一文字とって3つ進める
  • ドメインから3つ取る
  • パスワードの前後をドメインのアルファベットで挟む
  • パスワードの前につける

などパスワードの生成ルールを自分的に決めるのがマシだと思います。
こうすれば、パスワードを1つくらい盗まれたとしても、そのパスワードで連鎖的にとられることはないでしょう。


パスワードをセキュリティレベルで使い分ける

  1. 捨て垢用パスワード
  2. よく使うサイト用パスワード
  3. 銀行など個人情報にアクセスするパスワード
  4. 決済用パスワード

などレベルでパスワードを使い分けるのも。まぁセカンドベストです。

わたしは先の生成ルールと併せて、セキュリティレベルごとに生成ルールを変えるようにしています。


このエントリのを読んでいる方がWEBサイトの設計者側であれば、レベルに応じた使い分けを自然とユーザーに促せるパスワード要求を構築すると良いと思います。

具体的には2段階パスワードです

  1. ログイン時のパスワード要求(ブラウザ記憶が可能)
  2. 振込や契約変更前のパスワード要求(ブラウザ記憶利用が不可能)

こうしておけば、ユーザーが自然と使い分けしてくれます。UXの向上にお役立ちです。*3


パスワード記憶データに鍵をかける。マスターパスワード


Operaがいち早く採用していて特にオススメだったのがマスターパスワード。
ブラウザが記憶したパスワードを取り出すためのパスワードを設定する。

これによりパスワードデータを読み取られたり乱用されることが少なくなります。
OSXにはキーチェインと素晴らしい機能が付いていて、パスワード読み取りアクセス時に必ず聞いてきます。

Operaのマスターパスワードや Mac OSX のキーチェインはパスワードを保存したものにカギをかけることができるので比較的安全です。iPhoneAndroidも使用前にパスコードロックがかかるのでマダマシだとおもいます。IEはちょっと・・あれです。プラグイン使いましょうか。

記憶させても大丈夫なら、パスワードを記憶させたい

パスワードに鍵をかける、生成ルールを決めて使い回さ無いなど、十分な対策をしたらパスワードをガンガン記憶しておきましょう。
ブックマークレットを使ってパスワード記憶を有効にして入力すればちゃんと覚えてくれます。

if(typeof(jQuery)=="undefined"){
document.body.appendChild(function(){
src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js";
sc=document.createElement("script");
sc.type="text/javascript";
sc.src=src;
sc.onload=function(){
jQuery("[autocomplete]").attr("autocomplete","on")
};
return sc;
}());
}else{
jQuery("[autocomplete]").attr("autocomplete","on")
};void(0);

パスワード有効化ブックマークレット

保存しないフォームを保存するようにする。(2014/11/17追記)

パスワードのフォームを保存するタイミングは、Form.submit() されたときです。

なので、学習しないフォームを学習するには、form.submitをCallすることです。

javascript:document.qeuerySelector("form").submit

をすればOK

なんなら、form.action を無理やり変更したり、 form.onsubmit = false にして、フォームをいじって無理やり無理やり学習させることも出来たよ。

個人的感想

autocomplete=offを明示的に「パスワード」で使うべきなのは「パスワード変更フォーム」くらいじゃないのかと思ってる。*4


"戻るボタン禁止"や"ゆるふわセキュリティ"とかそういうの我慢できない面倒な性格で自己嫌悪します。*5


*1:パスワードを保存することが正しいかどうかというより、普通のフォームであるべきだという意味です

*2:過去N回までのパスワードに利用制限かけたとしても連続N回変更されたらアウト。厳しすぎると他にもパスワード+N回数字という杜撰なパスワードだらけになります。

*3:2段階パスワードであってもパスワードが1つの運用できるので、パスワードを2つ作れという意味ではない。セキュリティレベルに応じた設計が必要という意味。

*4:autocomplete=offを付けるとどうなるのか、メリットと弊害は?など考えずに、つければ安心というテンプレお仕事で羨ましいですよ本当に。

*5:「パスワードを使い回しを辞めましょう」「パスワードを定期的に変えましょう」と、メールだすのではなく、こうすれば現実的なパスワードを使えますよ。このようなパスワードは危険です。簡単でも安全なパスワードの例示、パスワードの作り方を案内する。ここまでして初めてメールを送る意味があるユーザ教育だと思います。