初めて投稿します。

いつもぷっぷさんのサイトを見て、自分も出来るだけセキュリティを高められるよう心がけています。

今回、パスワードにマルチバイト文字を使いセキュリティを高める方法を思いついたので、皆様の参考になることがあればと思い、共有することにしました。以下、長文失礼します。

マルチバイト文字のパスワードを使うメリットとしては、パスワードの複雑さが上がり、ブルートフォースアタックによるクラックの危険性が下がることがあります。

まず、圧縮ソフトやパスワード管理ソフトのうち、unicodeのマルチバイト文字に対応しているものを使います。圧縮ソフトの例としては、7zやRAR、パスワード管理ソフトはbitwarden,1passwordなどが対応していました。

そして、マルチバイト文字をパスワードからランダムな文字列を生成してパスワードにします。JIS第一から第四水準の漢字などで約10000個の候補のリストを作っておいてそこからランダムに128文字などを抜き出しパスワードにします。この場合、パスワードは10000^128乗通り=10^512通りになり、例え秒間に無量大数(10^68)回のブルートフォースアタックを受けても、1.14*10^440年程度かかり、理論上宇宙が8.14*10^428回滅ぶ程度の時間(宇宙の寿命を1400億年とすれば)がかかることになり、セキュリティホールが存在しない限りは、ほぼクラックされなくなりそうです。

 

但し、運用のための注意点があります。

第一に、パスワード管理ソフトに複雑で長いパスワードをかけると覚えられないので、そこだけは漢字や英数記号交じりの複雑で長く覚えやすいものにする、または後述のパスワード付きUSBメモリに、更にパスワードをかけた圧縮ファイルを入れておくなど対策が必要になります。

第二に、毎回マルチバイト文字の変換をしているとIMEがパスワードを記憶するため、その対策も必要です。

これらの対策の手順としては、まずパスワード管理ソフトのパスワードをテキストファイルに保存し、圧縮ソフトで、英数記号だけで作った出来る限り長く覚えやすいパスワードをかけます。

これだけではセキュリティを低下させるだけなので、圧縮後のファイルを、パスワード付きUSBメモリ(iStorage社のdatashurシリーズなど、一定回数パスを間違えるとデータを消去するもの)に保存し、圧縮前のファイルをグートマン方式(35回上書きしてファイルを完全削除)で削除するか、元よりRAMディスクにしかファイルを置かないなど、ストレージにデータが残らないようにしておきます。

第三に、パスワード管理ソフトにパスワードを入力する際にテキストファイルを開いてしまうと、パスワードを覗き見されるリスクがあります。なので対策として、コマンドプロンプトを使い、clipコマンドを使って、テキストファイルの中身を直接クリップボードに送る必要があります。但し、日本語版windows10のコマンドプロンプトは文字コードがShift-JISになっており文字化けしてしまうので、まずchcpコマンドで文字コードをUTF-8にする必要があります。

そのため、実際のコマンドは、

chcp 65001

clip < example.txt

などとすることになります。

第四に、クリップボードに必然的にパスワードが記憶されているので、うっかり関係無い場所にパスワードを誤爆してしまうリスクが生じます。そこで対策として、指定時間毎にクリップボードの内容を消去するツールを併用します。

 

---------------

以下追記です。

パスワードは可能ならばバイナリデータを使うと、更なるセキュリティ上昇が見込めそうです。

試してみたところ、bitwarden、7zip、WinRAR、MEGA limitedなどパスワードにunicodeを使えるソフト/サイトは、パスワードがそもそも文字列ですらないバイナリデータを、テキストエディタで読み込み文字化けさせたものでも、問題なく動作しました。

手順としては、バイナリエディタで特定のバイナリファイルを開き(ありふれたファイルでは、そのデータを辞書として攻撃される恐れがあるため、自作してバイナリデータで保存した秘密鍵など)、適当な値だけ抜き出して保存し、それをメモ帳で開くか、テキストエディタでバイナリファイルを開いて適当にコピーしてくるかして、パスワード欄にペーストします。ただ、文字列として読み込んだ際の「文字列」は200文字程度に収めておかないとbitwardenの文字数制限のエラーが起きます。

これを利用すれば、ブルートフォースアタックがパスワードとして文字列を前提とする限り、正攻法では永遠にクラックされそうにありません。

副次的効果として、例え画面を見られて写真を撮られたとしても、そもそも表示が�などに文字化けしている以上、パスワードの実態であるバイナリデータを知ることはできないため、覗き見対策も兼ねることができそうです。