HOME Python download 書き込む

パスワード管理スクリプト


1. 初めに

パスワードを複数のアカウントで使いまわした場合、1つのアカウントでパスワードがもれると、芋づる式に他のサイトにも侵入されるので非常に危険です。 そのため、アカウントごとにパスワードを作成する必要があります。 しかし、アカウントごとにパスワードを分けると、パスワードが多量になり、全部を暗記することはできません。

このような事情から、多くのパスワード管理ソフトが出回っています。しかし、紫藤には使いづらいので、Python で自作しました。 (出回っているパスワード管理ソフトは、アカウント検索に手間がかかるので使い勝手がよくありません。) 自作のパスワード管理スクリプトは、SQL の like 演算子を使って、アカウントをすばやく検索できます。また、以下のような特徴があります。

  1. ユーザ名とサイト名からすばやくパスワードを検索できる '%' を使った検索が可能。
  2. パスワードは、乱数初期化文字列と擬似乱数を使ってそのつど計算する。パスワードそのものはどこにも保存していないので、漏洩の可能性が低い。
  3. パスワードをクリップボードにコピーするので、入力の手間が省ける。
  4. パスワードは自動生成される。パスワードの更新や新しいアカウントの登録が簡単
  5. コンソールベースのシンプルな UI。

2. 使い方

2.1. 起動とパスワードの表示

Python 3.x を使って、コンソールから立ち上げます。
その後、パスフレーズを2回入力します。パスフレーズが間違っていても動作はしますが、 正しいパスワードを計算してくれません。
001:   >python seepass.py
002:   Enter keyword:
003:   Again:
004:   >
プロンプト (>) が表示されたら、ユーザ名とサイト名を ; で区切って入力します。
ユーザ名やサイト名のどちらか一方を省略することができます。また、% を使った、パターンマッチを行うこともできます。
複数の候補があるときは、候補の一覧が表示されるので、番号を入力して選択します。
アカウントが特定されると、パスワードが表示されます。
001:   > foo;    ユーザ名だけを入力
002:   0: foo;gmail   2 つの候補が表示される
003:   1: foo;yahoo
004:   select:0      1つを選択
005:   foo;gmail: ,Ary*tE815  パスワードが表示される
001:   > ;y%               サイト名だけを入力
002:   foo;yahoo: Be=-/+/aL344
q と入力すると終了します。

以下のようなコマンドが使えます。

'e', 'end', 'q', 'quit'
終了
'u', 'update'
パスワードを更新。新しいパスワードが表示されるので、気に入るまで u を押し続ける。
'i', 'insert'
新しいアカウントを登録
'd', 'delete'
選択したアカウントを削除
'a', 'show all', 'all'
全ての アカウント、パスワードを表示
'h', 'help'
ヘルプを表示
'p', 'previous'
直前のクエリーを実行

2.2. パスワードの更新

アカウントとパスワードが表示されている状態で u と入力するとパスワードが更新されます。
気に入ったパスワードになるまで u を押し続けます。
001:   > f%;g%
002:   foo;gmail: TheSThe<w923
003:   > u
004:   foo;gmail: aN>m*aine=b399
005:   > u
006:   foo;gmail: .*@AnOn.p016
007:   > u
008:   foo;gmail: fElAn?-oF178
009:   >

2.3. パスワードの新規登録

i と入力後、; で区切って、ユーザ名とサイト名を入力します。
パスワードは自動で生成されます。好みに応じて、u を押下してパスワードを変更します。
001:   > i
002:   give [user];[site]: foo2;facebook
003:   foo2;facebook: sHe,-Sou017
>

2.4. パスワードの削除

アカウントとパスワードが表示されている状態で d と入力すると、そのアカウントが削除されます。
001:   foo2;facebook: sHe,-Sou017
002:   > d
003:   Record of foo2@facebook has been deleted.
004:   >

3. 動作環境

3.1. OS

Win 32 で動作します。

他の OS に移植する際には 文字列をクリップボードにコピーするpythonスクリプト(Win, Mac, Linux) などを参考にして、seepass.py の copy2clipboard を書き換えてください。

3.2. Python の version

Python 3.x で動作します。

3.3. 必要なライブラリ

クリップボードへの書き込みを行うために、 Python for Windows extensions が必要です。

4. インストール

  1. 必要に応じて Python 3.x をインストールします。Python Programming Language - Official Websiteから インストーラーをダウンロードして、実行します。また、Path を通しておくと便利です。
  2. 必要に応じて Python for Windows extensions をインストールします。インストーラーをダウンロードして実行するだけで、インストールされます。
  3. このスクリプトと関連ファイルを圧縮したものを解凍します。

5. 簡単な説明

5.1. スクリプトと関連ファイル

以下のような構成になっています。
ファイル名 説明
seepass.py コマンドラインから呼び出すスクリプト
make_pw.py スペル頻度と擬似乱数からパスワードを計算するモジュール
spell_statistics.py ある文字の次に来る文字の頻度のハッシュ表
passwd.txt アカウントとパスワード生成時刻の一覧

5.2. パスワード計算方法の簡単な説明

  1. ユーザ名 (user)、サイト名 (site)、生成時刻 (create_dt)、キーフレーズ (key) の連結文字列を乱数の種にします。
    random.seed( user+site+create_dt+key ) パスワード生成時刻を変えることで、同じアカウント、キーフレーズから異なるパスワードを計算することができます。
  2. スペル頻度と擬似乱数を用いて部分的にありうる綴りのパスワードを生成します。
    スペル頻度と部分的にありうる綴りのパスワードについては拙著 はじめてのPython または、はじめてのPython3 を見てください。