- PR -

javaで暗号化/複合化

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/04/15
投稿数: 13
投稿日時: 2006-04-20 17:20
Webアプリ(Tomcat)で、テキストエリアから取得した文字列を暗号化し、ファイルに保存あるいは、DBに挿入しておきます。その後、ある画面からボタンが押下されたとき暗号化された文字列をDBあるいはファイルから取り出し、複合化しようとしています。
が、Tomcatを起動したままですと、暗号化/複合化できるのですが、
暗号化し、Tomcatの再起動を行うと複合化できません。
使用しているAPIはCipherを使用して暗号化しています。

コンストラクタで、SecretKey skey、 IvParameterSpec ivpを設定し、暗号化/複合化時に
Cipher cp = Cipher.getInstance("DESede/CBC/PKCS5Padding");
cp.init(Cipher.ENCRYPT_MODE,skey,ivp);
しています。
考えれば、暗号化後のTomcat再起動で、コンストラクタを通るので、複合化できないのは当たり前のような気がします。
ほかによい方法など、または、別の方法等の情報があればお願いします。
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-04-20 17:37
初期化に必要な鍵とか、ファイルに書き出しておいて、
再起同時にはそれを放り込めば済む話じゃないの。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-04-20 23:48
引用:

さいくろうさんの書き込み (2006-04-20 17:37) より:
初期化に必要な鍵とか、ファイルに書き出しておいて、
再起同時にはそれを放り込めば済む話じゃないの。



で、もっと脆弱性を作る、と。(苦笑)

その「初期化に必要な鍵」は、どうやって作るつもりなのだろう。
もちろん作るのは難しくないけど、作った後、どこに置くんだ?
誰でも読めたりして。

きっと「鍵」は「ふわっあっ」とどっかから湧き出すんだ。
と思ってる人が多くて困ってるのだが。。。。

もちろん、んなわけはありませんが。

あ、ちなみにServletだったら、WEB-INF下に置きます。簡単だから。

ただし、ぜーんぜん意味がないと思うけど。DBに暗号化させればいいのに。。
なんでわざわざアプリケーションで?とは思う。

DBが信用できないシステムは、そもそもそのシステム自体を信用できないと思うけど。

もちろん、アプリケーションで暗号は可能だけど、かなり特殊な用件が必要だと思います。
DBの「暗号化」をアプリケーション側でやる要件は、よほどの例以外は
見たことありません。

たいていは「無知」の産物だと思い込んでます。遅くなるだけで役に立たない。
セキュリティをどちらかというと低めている。(可用性を低下させてるだけ。
機密性を高めてない。)
この元記事の人は、そもそも復号してないことを分かってないし。

、、、しかもDESかよっ。って感じですが。いまどきDESなんて暗号化の意味ないって。
せめてAESぐらいにしようよ。。
ゴングラッチェ
常連さん
会議室デビュー日: 2006/03/03
投稿数: 36
投稿日時: 2006-04-21 15:31
さいくろうさんの書き込みの実装方法が「やるとしたら」第1候補でしょう。Webアプリの起動時に読み込みますと。
加納さんの書き込みは私も同意です。

加納さんは『DBの「暗号化」をアプリケーション側でやる要件は、よほどの例以外は 』と書かれています。
スレ主さんが構築しようとしているシステムを想像するに、『Tomcatが稼動しているAPサーバと、DBが稼動しているDBサーバ(もしくはファイルを保存する先のサーバ)が別々の拠点にあり、APサーバとDBサーバを結ぶネットワークがインターネットである』という構成になっているのではないでしょうか。
暗号化の動機も推測してみると、APサーバとDBサーバの間のデータがインターネットを流れる。データは重要なもの(例えば個人情報)が含まれている。インターネットを流れるデータは保護しなければならない。ということでデータを暗号化が必要。といった感じでしょうか。

さて、他に良い方法はないか。先の想像が当たりなら、VPNを構築することをお勧めします。インターネット上に仮想的な専用回線を構築でき、伝送されるデータを暗号化することも可能です。レンタルサーバを提供する会社には、VPNサービスを提供する会社もあります。もし、想像がはずれなら今の発想に意味はありません。DBに暗号化を任せましょう。DBMSが提供するJDBCドライバについても調べてみると良いでしょう。DBMSが提供する暗号化機能を活用できるかもしれません。活用できるのならば、DBについてはVPNを使用する必要はなくなるでしょう。

加納さんは『この元記事の人は、そもそも復号してないことを分かってないし。 』とおっしゃています。これについてスレ主さんは「復号化をWebアプリがやるから問題ない」と思われていないでしょうか。だとしたら、加納さんの指摘はビンゴです。
この認識を持っていると、システムの運営ができなくなります。障害が発生した時、データが全て暗号化されている状況で、復号化する手段がWebアプリで見るだけなんて状況になったら影響調査にえらい思いをすることになります。さらにWebアプリにバグがあったなんて時にはそれこそ救いようがなくなります。システムを運営するには、生データを見れるかいなかは天と地のさがあります。障害の再現ができなければ、Webアプリのバグの原因を特定することすら確実性を欠く結果を招きます。
(「復号化をWebアプリがやるから問題ない」と思っていなければWebアプリ上で暗号化しようなどとは、ユーザーパスワードを暗号化する以外にはそうそうないものです。ユーザーパスワード→運用方にも知られてはならない情報だから)

色々書きましたが、二言で表現できます。
一ぉつ『悪いことはいわねぇ。その方法はやめとけ。』
二ぁつ『ここには金をかけろ。金をかける価値があるってことは知っているじゃねぇか。』
と。
1

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