絶対に安全なパスワードを生成したい


副題: 128 bit 乱数は意外に短いし扱いやすい

TL;DR

絶対に安全なパスワードを生成するワンライナー

$ ruby -r securerandom -e "puts SecureRandom.urlsafe_base64"

安全なパスワード長

総当たり攻撃に対しては、128 bit あれば 2030 年ごろまでは安全だと言われているようです。

鍵長・アルゴリズムと耐用年数がひと目で分かる便利サイト: http://www.keylength.com/en/

128 bit 乱数

Ruby には暗号論的に大丈夫な乱数を作る SecureRandom モジュールがあります。

出力は base64 でも hex でも binary string でも、デフォルトで 128 bit 乱数を生成してくれるので安心です。

pry > require 'securerandom'

pry > SecureRandom.urlsafe_base64
=> "V0Tthv9uo_KK-4rHvcmeoA"

pry > SecureRandom.hex  
=> "6e02f273b7954e8fe00741ca8d50234a"

pry > SecureRandom.random_bytes
=> "\xEE\vk#\xB9\x04\x9D\xCC\xA7\xB4%\xC7\xAFt\xB6\\"

意外に短くて扱いやすい

128 bit って聞くと長いイメージがあるけど、base64 エンコードなら たった 22 文字 です。

中途半端に 8 文字の乱数で記号混ぜたりするよりもよっぽど扱いやすくて、安心です。