• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パスワードの暗号化について)

パスワードの暗号化について

このQ&Aのポイント
  • 現在、Javaを使ってWeb取引を作っており、お客さまからパスワードの暗号化を要望されました。一般的な暗号化方法や解読について教えていただきたいです。
  • 暗号化された文字列をDBに保存する方法について教えてください。
  • DBの桁数が既に決まっているため、桁数の増減がない暗号化方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yuji
  • ベストアンサー率37% (64/169)
回答No.8

Javaで作っているのなら MD5 が簡単でしょう。 java.security.*パッケージを使えば簡単です。 ちなみに復号化する必要はないと思います。 ・DBにはMD5で暗号化した文字列を格納しておきます。 ・画面から入力された文字列をMD5で暗号化 ・その暗号化文字列とDB内の暗号化文字列が一致していればパスワード認証OK これだけです。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • madman
  • ベストアンサー率24% (612/2465)
回答No.7

パスワードの復号化を行う意図がいまいちわかりません。 UNIX等のOSでは、パスワードはcryptを利用します。セキュリティ上は若干弱いです。 cryptであれば、Cでの関数も要されていると思います。 もしほかのを方式を利用するにしても、基本的には暗号化したファイルを保持し、次に入力されたパスワードと比較する場合は、入力のたびに認証のプロセスで暗号化し、保持されている情報と比較します。 もし、簡単にパスワード情報が複号化できるのであれば、パスワードロックをかける必要がありません。 ひょっとして、パスワード忘れた時のための対応なのでしょうか??? せれではセキュリティの意味がありません。... 使用OSがわかりませんが、参考になりそうなのをいくつかあげてみます。 http://www.lares.dti.ne.jp/~seiki/des.html http://info.pos.to/member/domain/cgi/crypt.html

すると、全ての回答が全文表示されます。
  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.6

3台のDBサーバで同一のIDとパスワードの管理との事ですが、私の様なところではどれか1台にIDとパスワードの管理を任せ、認証専用のデーモンを走らせソケット也でセッションを張るなどして、個々に持たさない様に設計します。 これらはサードパーティ製品のパッケージでも古くから多々ありますし、実現手段としては極めて簡単で有る為に自身で設計してしまっても良いかと思いますよ。

nsakurako
質問者

お礼

またも、ご回答ありがとーございます。 なるほど、色々な方法があるのですね。 それは知りませんでした。。。。。。。。。。。。。 でも、もー、1次はリリースしてしまったんですよね。。。。 あっはっは!(^c^;) だって、だって、ID・パスワードを一括管理するなんて言ってなかったのに。。。。 ばらばらでよいって言ってたのに。。。。。 くっすん。(T。T;) なので、持たせている表の項目等に相当の違いがありますです。はい。。。 しかも、各サイトは、別々のチームが設計&製造しているため、Weblogic.Propatiesだって違います。  あっはっは! (TcT;)お笑いです。はい。 どうか、見捨てずに宜しくお願い致しまする。 新しい情報、どしどし、募集中です!!!!!!!!!!!!!!!!!!!!

すると、全ての回答が全文表示されます。
  • akino4
  • ベストアンサー率18% (35/185)
回答No.5

ちなみに、複数サイトでの同一パスワードの使用はzodiaxのような セッションゲートウェイをつかってやるってのもてかも・・・・ まぁzodiaxにかぎらず、そのようなソフトはいっぱい売ってありますよ。

nsakurako
質問者

お礼

なるほど、なるほど、色々な情報をありがとございます。 やはり、通常ならば、パスワードの復号化なんてしませんよね! やはり、MD5では復号化が無理ならばパスワードの参照機能は、お客さまに再度ご検討頂く必要がありそうですね。。。。 しかし、何故良く調べもせずに、パスワードの暗号化&復号化OKなんて言うのでしょうか??> MY 上司 そして、暗号化はMD5が一般的なんですかね。 ふむふむ。 そして、やはり製品を購入でしょうか。。。。。。。。。 上司は、他のソフトの使用を考えていません。はい。 MD5の何か技術的なことを公開しているHPをご存知でしたら教えて下さい!!! また、Javaで作成しているのですが、Javaさんは暗号化&復号化なんて機能を提供していないのでしょうか。。。。 甘い?? あぁ~! やはり。。。。 宜しくお願い致しまする。。。。。 (>。<;) どうぞ愛の手を!!!!!!!

すると、全ての回答が全文表示されます。
  • akino4
  • ベストアンサー率18% (35/185)
回答No.4

一般的に複合化できる暗号はパスワードには用いません。 理由についてはcryptか、単方向ハッシュで検索をかければいくらでも 出てくるのでおいといて。 通常よくやられる方法としてはMD5という単方向ハッシュのアルゴリズムを 用いて(多くの言語ではライブラリで出回っている)乱数でシードを選び クライアントがわでそのシードを用いてハッシュをかけ、サーバがわで 保存されている元パスワードに同じシードをかけて同じになれば  パスワードが一致してるといえます。これは、通信回線が盗聴されることを 考えての行為です。 また、元パスワードの方はシステムで不変のシードをつかってパスワードを 暗号化します。これにより、万が一そのパスワードDBが盗まれても そのパスワードを使って他のサイトなんかでも同じパスワードをつかってる ことを期待してのクラックという2次災害をふせげます。 これは、パスワードの元を盗まれたときの対策です。

すると、全ての回答が全文表示されます。
  • madman
  • ベストアンサー率24% (612/2465)
回答No.3

サーバーとの通信上は暗号化されているのでしょうか? そこのところを言われているのかもしれません。 暗号化するための簡単な方法はHTTPS(SSL通信)を行えば問題ありませんが、認証局に登録する必要があり、費用がかかります。 下記URLは、Verisign社のものです。 別にバイト数を変えずに暗号化する方法ですが、A-Z、0-9などのパスワードに利用できる文字をランダムにテーブルに並べます。それと、ユーザデータテーブルの登録日などを利用し、パスワードをパスワードテーブルを用いて指定バイトずつずらします。 例) テーブル[zxcv5bnm3lkj4hgf2dsa0qw8e9rt7yu1i6op] 登録日[20010323] パスワードが[nsakura01] だった場合に 登録日のyy[01]mm[03]dd[23]を取り出し、順番に「n」に対応するテーブルを探し、 そのテーブルのyyバイト分後ろにあるデータ(m)をパスワード保存ファイルとする。 「s」に対してはmmバイト後ろ(q) 「a」に対してはddバイト後ろ(n) 「k」に対してはyyバイト後ろ(j) ・・・と繰り返していくと。 「mqnj6h08s」と一見して、文字をずらすことができます。また、元に戻すときは逆の処理をすればよいのです。当然テーブルにはパスワードでは入力不可のアスキーコードが入っていても問題ありませんが、同じ文字を重複して利用してはいけません。テーブルの最後まできたときは、先頭に戻って数えます。

参考URL:
http://www.verisign.co.jp/
nsakurako
質問者

お礼

皆様。早速の回答を本当にありがとうございました。 (すいません、ここで、皆様へのお礼とさせて頂きます。お許し下さい。) わたくしも、少々調べてみましたが、暗号化&復号化って難しいですね。はい。 ここでは補足&訂正もさせて頂きますね。 本当は、質問時にすることなのですが、またまたどうぞお許し下さいませ。。。 現在、1次リリースでは、SSLは既に対応済です。 パスワードの暗号化は、2次のリリース版での対応となります。 って、ことは、1次リリースのパスワード関係のAPは当然作り直しです。はい。 またしても、今更でしょう?っと愚痴ってしまいそうです。はい。 また、パスワードの桁数ですが、やはりセキュリティをあげるためには、 (その為の暗号化なんですもんね!? (A^^;)必要ではないかと考え直しました。 どっちにしろ、パスワード関係は作り直しですし。はい。 そこで、改めて、質問です。 皆様どのような方式を使って実際にパスワードの暗号化&復号化を実現していらっしゃるのでしょうか??? DESやMD5といった方法も耳に致しますが、ふぅぅぅぅぅ~!HPあさって読んでいますが、 むむ難しい。。。。(>。<;)oh Noーー! また、更に補足で御座いますが。。。。 (至らない質問の仕方で、本当に申し訳ないです。。。) 今回のシステムでは、DBが複数のサーバに乗っかっております。 何故かと言いますと、同一のID・パスワードで、複数のサイトを使用出来るようにしているためです。 (あぁぁぁ~! だからと言って何故?っとは聞かないで下さい。。。) ちなみに、現在は、3つDB内に同一のID・パスワードを持って降ります。 上記の関係から、出来ることなら、鍵を持たない暗号化&復号化を望んで降ります。 また、パスワードの参照機能なんかも1次でリリースされているため、復号化も可能がBESTで御座います。 MD5が良いかと思ったのですが、どこかのHPでは、復号化が不可とありました。 こちらは、本当でしょうか???  あぁぁ~! 本当に困って降ります。 お前なんかで、本当に暗号化&復号化をやるつもりかとお思いとは思いますが、 出来る限りはがんばろうと思っている次第でありますので、どうか見捨てずに、 参考になるHPの紹介だけでも結構ですので、良きアドバイスを宜しくお願い致します。。。。 皆様のご好意を、切にお待ち申し上げて降ります。

すると、全ての回答が全文表示されます。
  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.2

そうですね。 単にDB内のレコードが暗号化されていれば良いのであればcrimson氏と同等な事をすればクライアントも納得してくれるかもしれません。 似た手段として、乱数マップを用意して一対一で文字を照らし合わせるというの方法もあります。 そしてフォームから送られてきたパスワード文字列をJavaServletでデコードすれば良いでしょう。 ただし、当然にHTTPプロトコル通信上でのパケット内にはフォームで入力された素のパスワード文字列がそのまま乗っかる事になるので、パケット内も暗号化したいのであればSSL通信を利用する事をお勧め致します。

すると、全ての回答が全文表示されます。
  • crimson
  • ベストアンサー率40% (900/2202)
回答No.1

ごくごく簡単なものとしては、「文字をずらす」という 方法があります。 例えば、「hello」という文字列があった場合、各文字を アルファベットにおける一つ先のものに置き換えて 「ifmmp」とする、など。 もちろん、これでは単純過ぎますから、奇数番目の文字は 一つ先、偶数番目の文字は二つ後…というようにより複雑 なルールを決めます(この場合は「icmkp」と変換されま す)。 仮に「a」や「z」を飛び越えてしまうような場合には、 例えば「a」の二つ後は「y」、「z」の三つ先は「c」と する…というように、ループさせる方法で対応可能です。

すると、全ての回答が全文表示されます。

関連するQ&A