読者です 読者をやめる 読者になる 読者になる

TimeCapsule💊

やったこと,やること,やってみたいこと

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に関する記事もいつか書こうと思っています。