【気持ち悪い】 .bashrc だけでできるパスワードマネージャー
by haturatu
3 min read
こんにちは、無能です。
気持ち悪いパスワードマネージャーを紹介します。
.bashrc
私の.bashrc
に以下を記載しています。
ちなみに、base91
でエンコードしているのでbase91
をインストール必須です。
pp2091g() {
local dir="$HOME/.$FUNCNAME"
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $FUNCNAME <string> <filename>"
return 1
fi
if [[ ! -d $dir ]]; then
mkdir -p $dir
fi
if [[ -f $dir/$2 ]]; then
cat $dir/$2 | base91 | cut -c -20 | tr -d "\n" ; echo
return 0
fi
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p > $dir/$2
echo "Generated and saved to $dir/$2"
}
つまりはどういうことなのかというと生成部分に関しては以下を参照してください。
base91で安全なパスワードがほしい。 - SOULMINIGRIG
本当に簡易的なパスワードマネージャーです。
しかし、SSH
先が多い場合このような簡易的に記号文字までいれるのは難しいため、このようにしてます。
ウェブサイト自体で使うパスワード、短い文字列なら覚えられるけど長い文字列は無理、なんてことありませんか?
なのでこれを使っていれば短い文字列で比較的強固なパスワード生成ができることと16進数から完全バイナリ化されているファイルをエンコードしているのでパスワード自体が平文で保存されることもありません。
こんな感じになる
こんな感じになります。
$ pp2091g string file
Generated and saved to /home/haturatu/.pp2091g/file
$ pp2091g string file
_+f2t2X9JyLf?S(GplK~
記号文字が対応していない場合
記号文字がbase91
のエンコードで対応していない場合、長い文字列でbase64
エンコードされたものを使います。
日本のサイトでは全ての記号に文字対応できていないサイトは多いため必要です。
pp6464g() {
local dir="$HOME/.$FUNCNAME"
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $FUNCNAME <string> <filename>"
return 1
fi
if [[ ! -d $dir ]]; then
mkdir -p $dir
fi
if [[ -f $dir/$2 ]]; then
cat $dir/$2 | base64 | tr -d "\n" ; echo
return 0
fi
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p > $dir/$2
echo "Generated and saved to $dir/$2"
}
難点
一度保存されたファイルはどんなstrings
でも表示ができます。
$ pp2091g string file
_+f2t2X9JyLf?S(GplK~
$ pp2091g stringa file
_+f2t2X9JyLf?S(GplK~
なぜなら
if [[ -f $dir/$2 ]]; then
cat $dir/$2 | base64 | tr -d "\n" ; echo
return 0
fi
ここでシンプルにバイナリをcat
してそのままエンコードしているだけだからです。
また、同じstrings
なら同じパスワードになります。
いいところ
管理はしやすいです。ファイルベースなので必要なら別のサーバでそのまま使えます。
生成もしやすいです。ファイルを紛失してもファイル名とstrings
を覚えていればそのまま復活ができます。
このパスワードマネージャーの目的は外部にできる限り依存せず、短いパスワードしか覚えられないけど比較的セキュアにしたいという気持ちだけです。
ブルートフォースには強いかもしれませんが、シェルが取られてしまったら危ういです。しかし基本メールアドレス/電話番号が分からずどこで使っているかもわからないパスワードだけ取れてもあんまり意味は無いです。
また、カスタマイズ性も簡単なシェルスクリプトなので変更もしやすいです。sha384sum
ではなくてsha256sum
でも良いかもしれないし、文字エンコードも自分の好きなものにできるに、文字列長も自分の好きなようにはしやすいです。
それではまた。よろしくお願いします。