11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

脆弱なパスワード付きファイルを作成しないためのメモ

Last updated at Posted at 2015-10-05

パスワードの暗号解析の基本

パスワードに使用する文字の種類により、かかる計算量は下表のようになります。
※億未満は切り捨てています。

使用する文字の種類 使用できる文字数 4桁 6桁 8桁 10桁
アラビア数字のみ(0~9) 10 0.0001億 0.01億 1億 100億
英字(大文字、小文字区別しない) 26 0.0045億 3億 2088億 141兆1670億
英字(大小区別せず)+数字 36 0.0167億 21億 2兆8211億 1京3656兆1584億
英字(大文字、小文字区別)+数字 62 0.1477億 568億 218兆3401億 83京9299兆3658億
英字(大小区別)+数字+記号31文字 93 0.7480億 6469億 5595兆8180億 4838京8230兆7179億
英字(大小区別)+数字+記号34文字 96 0.8493億 7827億 7213兆8957億 6648京3263兆5991億

最近のCPU(Intel core i7 3770K)であれば、1秒1億のファイルを計算できるようになるため、総当たり法での処理時間はおよそ下表のようになります。

使用する文字の種類 使用できる文字数 4桁 6桁 8桁 10桁
アラビア数字のみ(0~9) 10 0.0001秒 0.01秒 1秒 1分40秒
英字(大文字、小文字区別しない) 26 0.0045秒 3秒 34分 16日
英字(大小区別せず)+数字 36 0.0167秒 21秒 8時間50分 4.3年
英字(大文字、小文字区別)+数字 62 0.1477秒 9分 25日 270年
英字(大小区別)+数字+記号31文字 93 0.7480秒 1時間50分 1年10ヶ月 15557年
英字(大小区別)+数字+記号34文字 96 0.8493秒 2時間10分 2年4ヶ月 21375年

また、GPGPUを利用すると、この40倍を超える速度で計算できるようになるため、処理時間はより短縮されます。
つまり、英数字であっても大文字や小文字の違いがなければ、専用のソフトで1日かからずに解除することができます。

ただし、実際は、ファイル形式によってパスワードハッシュ化などがなされているため、それぞれのハッシュ形式の違いにより解除時間は上記表よりかかります。

代表的な暗号解読

総当たり方式(Brute-force attack)

可能な組合せを全てのパスワードを試す方法です。パスワードを忘れた場合などはよくこちらの方法を利用して割り出します。

辞書式(Dictionary attack)

辞書の単語組み合わせからパスワード推測をする方法です。総当たりでは対応しきれない長いパスワードに対しての攻撃に対して有効になります。
ただし、どちらかといえば、IDの割り出しやメールアドレスの割り出しといったことの方が得意な暗号方式になります。

パスワードをかけるファイルを間違えないこと※バイナリエディタで解読可能なパスワードもある(ExcelVBAなど)

いくら長いパスワードをつけても、バイナリエディタで解析されるパスワードもあります。
例えば、ExcelVBAなどに限っていえば、google検索で方法を調べればバイナリエディタで簡単にパスワード解除が可能です。
※すべては確認できていませんが、MS系の多くのアプリケーションは(ファイル形式にもよりますが)解析が可能とのことです。
情報をしっかり守るのであれば、パスワード付きZip圧縮をかけるなりの対策をとりましょう

つまり情報を守るためにはパスワードの長さではなく、パスワードをかけるアプリケーションも考える脆弱性対策が必要です。

暗号ライブラリの暗号強度

最後に、暗号化ライブラリについて簡単に触れておきます。
実はOpenなライブラリは、暗号強度の高いファイル(Excelであれば、xls<xlsx形式)は開けないこともあります。
例えば、Oracle が配布しているJDKでは、暗号強度の制約があり、パスワードがわかっていても開けないファイルがあります。

自分で解除ライブラリを作成して、自分のファイルに対して脆弱性がないことを確かめても、暗号強度の制約に引っかかっていて、検証ができていないかもしれません。

JDKであれば、

  • Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files

をインストールすれば、暗号強度の制約を解除することができます。
暗号強度の脆弱性をしっかり調べるときは、自身のJDKにそった実行環境を整えることをお勧めいたします。

をダウンロードして %JAVA_HOME%\jre\lib\seculity に上書き配置することでJDKの暗号強度の制約が解除されます。

脆弱なパスワードファイルを作成しないために

  • 暗号は10文字以上の英数字記号混在を推奨
  • 簡単な単語の組み合わせでパスワードを構成しないこと(辞書式への対応)
  • バイナリ解析で暗号解析できるファイルにしないこと
  • 暗号が他の人にわたらないようなしっかり管理をすること

などを注意して脆弱なパスワードファイルを作成しないよう注意する必要だと思います。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?