- PR -

パスワードの暗号化

1
投稿者投稿内容
まさあき
会議室デビュー日: 2004/05/07
投稿数: 8
投稿日時: 2004-06-02 16:15
VB.NETでWindowsフォームベースのアプリケーションを開発しています。
DB接続時のパスワードをINIファイル等にもたせることを考えていますが、パスワードが
そのまま表示されるのは好ましくないので暗号化させたいと思っています。
.NETライブラリを参照したところ、SHA1クラスが適当かと思いましたが復号化する手順が
よくわかりません。ご教授お願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-02 16:57
 ハッシュ値を出すものです。復号できません。そこまで調べているなら、トピックの「SymmetricAlgorithm クラス」を調べましょう。

 あと、私の過去ログを探せば、DESアルゴリズムでの方法を書いたような…?
↑↑
探索キーも示さずに「探せ」は酷なので、探しました。このスレッドの、一番最後を参照してください。
 なお、ここにあげたものは「暗号化キー」をハードコーディングしていますが、ファイルに出しておく方が安全でしょう。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-06-02 17:05 ]
まさあき
会議室デビュー日: 2004/05/07
投稿数: 8
投稿日時: 2004-06-03 10:25
Jittaさん、返信ありがとうございます。
過去ログ見させていただきました。
ひとつ質問なのですが「暗号化キー」はファイルに出しておくほうが
安全というのはどういう理由からなのでしょうか?。
暗号化キーも公開しないほうがいいのでは?と考えてしまうのですが。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-03 12:19
引用:

まさあきさんの書き込み (2004-06-03 10:25) より:

ひとつ質問なのですが「暗号化キー」はファイルに出しておくほうが
安全というのはどういう理由からなのでしょうか?。
暗号化キーも公開しないほうがいいのでは?と考えてしまうのですが。


 復号する為に必要です。それをハードコーディングすると、DLLがダウンロードされたりしたときに、簡単に覗かれてしまいます。ファイルに出して、Windowsのアクセス権などで保護して、簡単にバレないようにする工夫が必要、と思います。「公開する」という意味ではありません。
#物理的にアクセスされたら、逆に弱いけどね。
まさあき
会議室デビュー日: 2004/05/07
投稿数: 8
投稿日時: 2004-06-03 13:24
なるほど、DLLダウンロードされると簡単に中身が見れてしまうのですね・・・。
となるとやはりJittaさんが言うようにキーをファイルに外だし&アクセス権で保護する方法が
最適なように思います。
私が考えたのは、「exe起動時にログインフォームに対し暗号化(復号化)キーを
ユーザー自身に入力させて、exe起動の間はレジストリにキーを保持しておく」です。
が、結局DLLの中身見られたらどんなことやってるかバレバレですね。
いろいろとご教授ありがとうございました(_ _)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-04 09:48
引用:

まさあきさんの書き込み (2004-06-03 13:24) より:

私が考えたのは、「exe起動時にログインフォームに対し暗号化(復号化)キーを
ユーザー自身に入力させて、exe起動の間はレジストリにキーを保持しておく」です。
が、結局DLLの中身見られたらどんなことやってるかバレバレですね。


 すみません!自分がWebアプリだったので、Webアプリのつもりで書いてました!!

 まず、DLLなりEXEなりは、ilasm.exeで逆アセンブルすることで、簡単に中をのぞけてしまいます。dotfuscatorという、2003に付属のツールの上位バージョンで、簡単には見えないようにすることができます。


 それで、Windowsアプリケーションで、ログイン名などをユーザが入力するなら、外に書き出さずに内部で保持していればいいですよね?
 コンピュータ上に置けば、それだけ危険がまします。しかし、メモリ上に保持しているだけなら、そのアプリケーションが実行中に、アプリケーションが使用しているメモリを覗かないと、アクセスできません。レジストリやファイルに書き出すと、例えば私はSymantecのUnEraseをインストールしていますが、そういうもので旧ファイルを復元し(レジストリも、ファイル化されていることに注意)、後から読み出すことも可能です。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2004-06-04 13:07
引用:

.NETライブラリを参照したところ、SHA1クラスが適当かと思いましたが復号化する手順が
よくわかりません。ご教授お願いします。


それは片方向ハッシュと呼ばれるものです。SHA1で変換した内容から、元のパスワードを類推することが不可能なのが売りです。SHA1で変換して保存しておけば、システム管理者でも元のパスワードを調べることは出来なくなります。
これを認証で使う場合には、ユーザーの入力したパスワードを同じようにSHA1で変換して、以前パスワード設定時にSHA1で変換して保持していた内容と一致するか否かを判定することで、認証します。
欠点はユーザーが以前パスワードとして何を設定したのか、システム自身もシステム管理者も解らないってことです。だから「パスワード忘れましたー」と言われても元のパスワードを調べてあげることは出来ません。もう一度登録しなおしです。
APOPのようなCHAP認証も出来ません。CHAP認証を行うためには、サーバー側で元のパスワードを知っている必要があるからです。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
1

スキルアップ/キャリアアップ(JOB@IT)