パスワードを作成するRubyスクリプト

  • パスワードを作成するRubyスクリプト makepass.rb を作りました。無保証ですので、使いたい方は自己責任で。
# makepass.rb
require 'io/console'
require 'digest/sha2'
require 'base64'
require 'win32/clipboard'

Win32::Clipboard.set_data('')
STDIN.noecho do |io|
  puts "Hit many keys randomly."
  s = io.gets
  while s.length < 100
    puts "I need more random keys."
    s += io.gets
  end
  d = Digest::SHA512.digest(s)
  e = Base64.encode64(d)
  e.gsub!(/[\+\/=\n]/, '')
  puts "Thanks.  I've saved a password-like string in your clipboard."
  Win32::Clipboard.set_data(e)
end
  • 使っている様子
C:\> ruby -v
ruby 1.9.3p374 (2013-01-15) [i386-mingw32]

C:\> gem install win32-clipboard
Fetching: win32-api-1.4.8-x86-mingw32.gem (100%)
Fetching: windows-api-0.4.2.gem (100%)
Fetching: windows-pr-1.2.2.gem (100%)
Fetching: win32-clipboard-0.5.2.gem (100%)
Successfully installed win32-api-1.4.8-x86-mingw32
Successfully installed windows-api-0.4.2
Successfully installed windows-pr-1.2.2
Successfully installed win32-clipboard-0.5.2
4 gems installed
Installing ri documentation for win32-api-1.4.8-x86-mingw32...
Installing ri documentation for windows-api-0.4.2...
Installing ri documentation for windows-pr-1.2.2...
Installing ri documentation for win32-clipboard-0.5.2...
Installing RDoc documentation for win32-api-1.4.8-x86-mingw32...
Installing RDoc documentation for windows-api-0.4.2...
Installing RDoc documentation for windows-pr-1.2.2...
Installing RDoc documentation for win32-clipboard-0.5.2...

C:\> ruby makepass.rb
Hit many keys randomly.     ←ここでキーボードを乱打し、最後にENTERキーを打つ。
I need more random keys.    ←キー不足のときにはこういう表示になる。
Thanks.  I've saved a password-like string in your clipboard.

この時点でクリップボードに、
4GXt2VP9lpievshQmAVYFOJtXqQ26YadHFei1HYRyYTnNH8EPvIETEg6rjTr6DssOrPSArECcCCqrqfBsqA
のようなパスワードっぽい文字列が入っているので適当に使う。
  • 解説
    • ユーザがキーボードを乱打した文字列を予測困難な文字列として用いる。
    • ある程度の長さがあったほうがいいので100文字くらいにしている(適当)。
    • その文字列を暗号学的に強いメッセージダイジェスト関数SHA-256を用いてハッシュ値を求める。
    • ハッシュ値Base64エンコードする。
    • 改行と記号(+, /, =)を取り除く(入れたい方は好きに)。
    • できた文字列をクリップボードにセットする。
  • 注意