2014年08月06日

「パスワードの管理を避ける」という考え方

はてなブックマークに登録

手持ちのアカウントが増えてくるとパスワードの管理方法が考えどころとなります。このところメジャーなネットサービスへの不正ログインやアカウントの悪用が相次いで報じられていることもあり パスワード管理の重要性は「古くて新しい問題」としてあらためて広い層に浸透しつつあります。

その一方でパスワードをきっちり管理することは必ずしも簡単ではありません。平易な内容だと第三者によって類推・導出されるリスクが大きいものの複雑にすると覚えにくい。だからと言って複数のサービスで同じものを使いまわすとそれが漏洩した場合に一斉に攻撃を受ける危険がある。結局、安全度の高いパスワードをサービスごとに使い分けることは人間の記憶だけでは困難なので何らかの外部記憶を利用することになります。ただし、それが何らかのデバイスであれコンピュータデータの形式であれ、情報としてそこへ保存した時点で盗難・流出の可能性はゼロではなくなります。多くの場合、そういった諸々の事情を含んだ上で手元の実用上の便宜とのバランスを判断して管理方法を決めることになりますね。

社内でそういう話をしていた時にふと思いました。一般に秘密文字列の内容は文字の並びとして意味をなさないものであるほど効果的なわけで、そのような情報はあまり「人間向き」とは言えないでしょう。もともと人間向きではない上に内緒にしておきたい情報を人間が丸ごと管理しようとすること自体に無理があるのではないか?その情報を直接管理せずに済ませることはできないか?生々しいパスワードをどこにも保管せずにすむのならそれにこしたことはありません。

ソースコードと実行形式の関係を連想しました。プログラムのソースコードとそれをビルドする環境があればビルドずみの実行形式そのものを保持し続けることは必須ではありません。そのことと同様に所定の情報もまた必要な時に正しく用いることができれば十分であり、それを再現可能とする材料をあらかじめ揃えておけば情報そのものを恒常的に保持することを免れるはずです。
その切り口で方法のひとつを考えてみました。一方向関数の応用です。

  • 利用者が任意のフレーズ (A) を灰色の変換器へ投入すると文字列 (D) が出力される
  • 処理 (B) の変換規則は決め打ちではなく、ランダムな内容で生成ずみの所定のフィルタ (C) を参照して決定される
  • (C) には (D) へ含める文字のバリエーションと (D) の文字列長を定義可能
  • 処理に際し利用者は任意の (C) を指定する
  • 固有の (A) (B) (C) の組合せは固有の (D) を生成する
  • (A) から (D) への変換は不可逆
出力文字列 (D) は意味を持つ内容ではないためパスワード等の秘密文字列として使うことができます。一般的なパスワード生成器等で生成したパスワードは同じものを再発行できないためそれ自体を慎重に保管しておかなければなりませんが、この変換器では固有の (A) (B) (C) が揃っていれば常に固有の (D) を得ることが可能であるためその必要はありません。また、(C) のデータが単体で漏れたとしても正しい (A) (B) がなければ (D) を再現することはできません。さらに、この変換器は機能の性質上基本的に個人用であるため、処理 (B) の内容へ利用者が本人固有の要素を加味することを可能とするといった工夫も考えられそうです。

このようにいたってシンプルな内容ですが、同様のアイディアが形になったものを今のところ知らずこうした話題には興味を感じます。前述のようにパスワードの管理に外部記憶を使わざるを得ない最大の理由は「それがパスワードとして適切な内容であればあるほど人の記憶に馴染まないから」という皮肉な事情にありますが、たとえばこういった方法なら人間の記憶というとても貴重なリソースを最大限に活かせるのではないか?という気がします。

実装例

試みに上のアイディアを Mac OS X 用 / Android 用アプリとして実装してみました。より便利に使うための機能を付加する余地が随所にあるものの この内容でも相応の実用性はありそうです。

2018年6月追記:DropBox API の仕様変更に伴い Android 版アプリは一旦公開停止としています。現時点では改訂の目処が立っておらず、本アプリを利用して下さった皆様には大変ご迷惑をおかけしますが宜しくご了承下さい。

  • Mac OS X 版: NoPass100.dmg
    (535,655 bytes md5sum: 95bf7543509f4752b2da204fc545106b)
  • Android 版: NoPass - Google Play ストア
  • ソースコード: NoPass - GitHub

  • アプリでは前述 (C) のフィルタデータを「マップデータ」の呼称で統一しています
  • Max OS X 版は "~/Library/Application Support/NoPass/NoPass.dat" へマップデータを出力します
  • Dropbox 経由で複数の環境から同じマップデータを利用できます
  • Mac OS X 版はマップデータの 使用/ 作成/ 編集/ 削除/ アップロード/ ダウンロード/ 同期 が可能です
  • Android 版はマップデータの 使用/ ダウンロード のみが可能であり Mac OS X 版の併用と Dropbox アカウントが必要です

  • 動作の様子(動画 1分19秒 無音)
  • アプリ画面

(tanabe)
klab_gijutsu2 at 18:01│Comments(0)mac | Android

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント