パスワード管理スクリプト
1. 初めに
パスワードを複数のアカウントで使いまわした場合、1つのアカウントでパスワードがもれると、芋づる式に他のサイトにも侵入されるので非常に危険です。
そのため、アカウントごとにパスワードを作成する必要があります。
しかし、アカウントごとにパスワードを分けると、パスワードが多量になり、全部を暗記することはできません。
このような事情から、多くのパスワード管理ソフトが出回っています。しかし、紫藤には使いづらいので、Python で自作しました。
(出回っているパスワード管理ソフトは、アカウント検索に手間がかかるので使い勝手がよくありません。)
自作のパスワード管理スクリプトは、SQL の like 演算子を使って、アカウントをすばやく検索できます。また、以下のような特徴があります。
- ユーザ名とサイト名からすばやくパスワードを検索できる '%' を使った検索が可能。
- パスワードは、乱数初期化文字列と擬似乱数を使ってそのつど計算する。パスワードそのものはどこにも保存していないので、漏洩の可能性が低い。
- パスワードをクリップボードにコピーするので、入力の手間が省ける。
- パスワードは自動生成される。パスワードの更新や新しいアカウントの登録が簡単
- コンソールベースのシンプルな UI。
2. 使い方
2.1. 起動とパスワードの表示
Python 3.x を使って、コンソールから立ち上げます。
その後、パスフレーズを2回入力します。パスフレーズが間違っていても動作はしますが、
正しいパスワードを計算してくれません。
001: >python seepass.py
002: Enter keyword:
003: Again:
004: >
プロンプト (>) が表示されたら、ユーザ名とサイト名を ; で区切って入力します。
ユーザ名やサイト名のどちらか一方を省略することができます。また、% を使った、パターンマッチを行うこともできます。
複数の候補があるときは、候補の一覧が表示されるので、番号を入力して選択します。
アカウントが特定されると、パスワードが表示されます。
001: > foo;
002: 0: foo;gmail
003: 1: foo;yahoo
004: select:0
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. インストール
- 必要に応じて Python 3.x をインストールします。Python Programming Language - Official Websiteから
インストーラーをダウンロードして、実行します。また、Path を通しておくと便利です。
- 必要に応じて Python for Windows extensions をインストールします。インストーラーをダウンロードして実行するだけで、インストールされます。
- このスクリプトと関連ファイルを圧縮したものを解凍します。
5. 簡単な説明
5.1. スクリプトと関連ファイル
以下のような構成になっています。
ファイル名 |
説明 |
seepass.py |
コマンドラインから呼び出すスクリプト |
make_pw.py |
スペル頻度と擬似乱数からパスワードを計算するモジュール |
spell_statistics.py |
ある文字の次に来る文字の頻度のハッシュ表 |
passwd.txt |
アカウントとパスワード生成時刻の一覧 |
5.2. パスワード計算方法の簡単な説明
- ユーザ名 (user)、サイト名 (site)、生成時刻 (create_dt)、キーフレーズ (key) の連結文字列を乱数の種にします。
random.seed( user+site+create_dt+key )
パスワード生成時刻を変えることで、同じアカウント、キーフレーズから異なるパスワードを計算することができます。
- スペル頻度と擬似乱数を用いて部分的にありうる綴りのパスワードを生成します。
スペル頻度と部分的にありうる綴りのパスワードについては拙著 はじめてのPython
または、はじめてのPython3 を見てください。