rpwgのアルゴリズムを改善した話
今年もあと数時間で終わってしまいますね。
そんな中いつも通りRustを書いている僕でして、rpwgのアルゴリズムを良い感じに改善出来たので、2016年最後になるであろう記事を書こうと思います。
改善前
まず改善前のアルゴリズムから書いておきますか。
デフォルト(rpwg
)で実行するとa-z, A-Z, 0-9の中からランダムに8文字取り出し、文字列に変えて出力するって仕組みでした。
ですがこれだと色々と問題があって、a-z, A-Zだったり、a-z, 0-9だったり、最悪の場合0-9のみで構成されたパスワードになってしまうんですよね。
それにrpwg -S
で特殊記号を含める-Sオプションを付けても、生成されたパスワードに特殊記号が含まれていないなんてことにも。
それだと安全性の保証がないので改善することにしました。
改善後
次に改善後のアルゴリズムで、こちらもrpwg
で実行した場合で話を進めていきます。
①a-zから1文字、A-Zから1文字、0-9から1文字をランダムに取り出しVec
②a-z, A-Z, 0-9から5文字(指定の長さ:8 - ①での文字数:3)をランダムに取り出し①のVec
③配列の中身をシャッフルし、文字列に変えて出力する。
これにより少なくとも1文字以上はアルファベット小文字、大文字、数字をパスワードに含めることができました。
rpwg -S
で特殊記号を含める-Sオプションを付けた場合でも、アルファベット小文字、大文字、数字、特殊記号のから最低1文字ずつをパスワードの中に含めることができます。
これがベストプラクティスかどうかは分かりませんが、改善前より確実に安全性を上げることができました。
終わりに
年明けからはまた少しずつrpwgの改善をしながら、いろいろと学んでいこうかなと。
あとClapに関する記事もいつか書こうと思っています。