VBScriptを使って簡単に最強のパスワードを生成

投稿者: | 2016-10-21

パスワードを考える際の悩み

パスワードは次のようなことが求められます。
・より複雑なこと
・他で同じパスワードを使用しないこと
細かいことにこだわれば、他にもきりがないほど挙げられるかもしれませんが、この二つだけは是非とも満たしておきたい所です。

そこで問題になるのは、
・パスワードがパターン化していまうこと
・何よりも覚えきれないこと
です。

それなりに長い文章を用意して、頭文字を抽出して、それを一定の法則にしたがって文字変換して使用する方法がよく紹介されていたりしますが、意外と面倒です。
しかも、いろんな項目毎にパスワードを用意するのも面倒です。

もちろん、最大の問題点は、私には覚えきれないことです。

そこで、専門家が聞いたら呆れてしまうような方法を考えてみました。

HMACの目的外使用です。

HMACとは

HMACとは、メッセージ認証符号の一つで、秘密鍵(メッセージ認証符号)とデータ(メッセージ)と、ハッシュ関数を元に計算されたハッシュ値を持ちます。

まあ、なんというか、あれですよ、あれ。

私の理解の範囲で言ってしまうと、受け渡されるデータが第三者によって改ざんされていないかどうかを調べるために使われるものです。
これはまず、データと秘密のパスワードからハッシュ値なるものを計算します。
このハッシュ値とはデータから得られる値ですが、ハッシュ値から元データは復元できない代物です。

そしてデータとハッシュ値を送られた相手は、秘密のパスワードとデータからハッシュ値を計算し、そのハッシュ値が送られてきたハッシュ値と同じであればデータの改ざんは行われていないと判断するわけです。

HMACを使った目的別パスワード生成

ここでの目的は、上のHMACを使って、共通の秘密のパスワードを使って、項目ごと(目的ごと)にそれなりのパスワードを生成してしまおうというものです。

まず、共通に使う秘密のパスワードを決めます。
たとえば「共通の秘密パスワード」としておきます。

次にサイトのパスワードであれば、サイトごとに識別する語を決めます。
たとえばツイッターだったら「ツイッター」、フェイスブックだったら「フェイスブック」としておきましょう。

HMACの計算は次のようにします。とりあえず、HMAC-SHA1を使っておきます。

srcText = "ツイッター"
strPass = "共通の秘密パスワード"

data = String2Bytes(srcText)
Set hmac = CreateObject("System.Security.Cryptography.HMACSHA1")
hmac.Key = String2Bytes(strPass)
hByte = hmac.ComputeHash_2((data))
hmac.Clear()
result = InputBox(srcText & "からのパスワード","パスワード生成", Left(Bytes2Base64(hByte),16))

Function String2Bytes(strText)
  Set Encoder = CreateObject("System.Text.UTF8Encoding")
  bytes = Encoder.GetBytes_4(strText)
  String2Bytes = bytes
  Set Encoder = Nothing
End Function

Function Bytes2Base64(Bytes)
  Set objElement = CreateObject("Msxml2.DOMDocument").createElement("base64")
  objElement.dataType = "bin.base64"
  objElement.nodeTypedValue = Bytes
  Bytes2Base64 = objElement.text
  Set objElement = Nothing
End Function

これをコピーして、「パスワード生成.vbs」などの拡張子.vbsの名前で保存します。
そうして実行すると、「ツイッター」なら「AOWUsUwvanZ9Q8Yu」
「フェイスブック」なら「VdH6+S9R5yjVMmcl」という文字列が得られます。
これをパスワードに使っちゃおうというわけです。

使用上の注意

秘密のパスワードや識別子は日本語でもかまいませんが、秘密のパスワードは、他人には絶対わからないようなものにします。

また、お好きな人はHMACSHA1のところをHMACSHA256にしたりHMACSHA512にしたりすると、また違った結果が得られます。

16の所を20とかにすればパスワードの文字数を指定できます。(長いパスワードにしたい場合はHMACSHA256などをどうぞ)

出先等でパスワードがわからなくなったら、メモ帳にこのページのスクリプトをコピーして生成用のファイルを作り、必要事項を書き換えてパスワードが生成できるという仕組みです。

人によっては、こういうのは簡単と言わないかもしれませんが、割りと面白いやり方だと思いませんか。
でも、あくまでも使用は自己責任で。