• 締切済み

LAMPを使用したログインシステムの暗号化について

LAMPを使用したログインシステムの暗号化についてご教授ください。 アマゾンのような会員制ネットショップの開発を考えております。 DB(MYSQL5)へ会員情報を保存し、会員がログインできる仕様予定です。 要件 **************************** .MYSQLへ保存する会員情報は「会員番号以外」の全フィールドをBlowfish方式,salt使用で暗号化して保存したい (安全であれば暗号化方式にはこだわりません。)  目的:万が一会員情報データが流出した場合の被害を軽減したい ・会員テーブルのフィールド構成は5列  「会員番号、ログインパスワード、クレジットカード番号、住所、電話番号」 質問 *************************** 会員(仮に鈴木さん)は前月にログインパスワード「1234」で会員登録しました。 鈴木さんがログインパスワード「1234」を忘れた場合の手順は以下の手順で新パスワードに変更します。 (処理1) システム側が仮パスワード「tmp0000」を作成し、会員テーブル内の鈴木さんのログインパスワードを「tmp0000」で上書きします。 (処理2) 鈴木さんへ仮パスワード「tmp0000」をメールで送信 (処理3) 鈴木さんが「tmp0000」でログインして会員テーブル内の鈴木さんのログインパスワードを新パスワード[new1111]で上書きします。 この場合、会員テーブル内の鈴木さんレコードのログインパスワード以外の列(クレジットカード番号、住所、電話番号) は「1234」で暗号化されたままです。 【質問1】 処理1と処理3のタイミングでパスワード以外のフィールドは一旦復号化して再度暗号化、保存の手順が必要と思うのですが、元の復号キーが不明でも可能でしょうか? 復号しないと鈴木さんは住所、電話番号等の再入力が必要になってしまうと思いますので・・・ 【質問2】 質問1の回答が可能な場合、どのような処理が必要でしょうか? 【質問3】 質問1の回答が不可能な場合、データが流出した場合の被害を軽減する代替え案は何かありますでしょうか? 住所、電話番号等は平文で保存すれば問題ないのかもしれませんが、リスキーなので躊躇します。 アマゾンや楽天等でパスワードを変更したときも住所等の再入力は必要なかったように記憶しています。 【質問4】 予想でも結構なのですがアマゾンや楽天等は住所などのフィールドは平文で保存しているのでしょうか? 【質問4】 ログインシステム開発時のDB暗号化の実装方法・概念等、のわかる 書籍やWEBページ等ありましたら教えてください。 また、この質問全体をとおして私に諸先輩方からアドバイス等あれば宜しくお願いします。

  • PHP
  • 回答数3
  • ありがとう数2

みんなの回答

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.3

> 【質問1】 > 処理1と処理3のタイミングでパスワード以外のフィールドは一旦復号化して再度暗号化、保存の手順が必要と思うのですが、元の復号キーが不明でも可能でしょうか? 復号化するのにキーがなけりゃどうしようもないですよね? 私も最近、ECサイトの構築で少し悩みました。 その際に採用した方法としては、質問者さんと同様?に、パスワードは不可逆暗号化でその他の個人情報に係わる部分は可逆暗号化を行いました。 で、可逆暗号化なんですが・・・ 複合化するためのキーを暗号化した文字列の中に含めています。 なので標準関数を拡張したプログラムを自作しております。 とはいってもいざ漏えいしてしまったらいずれ解読される時は来るでしょう。 また、DBのデータと共にプログラムのソースコードも盗まれてはどうしようもありません。 それでも平文で登録するよりははるかにマシだという事でこのような方法で行いました。 > 【質問4】 > 予想でも結構なのですがアマゾンや楽天等は住所などのフィールドは平文で保存しているのでしょうか? ホントにただの予想ですが・・・ さすがに平文って事はないんじゃないですかね? 多くのサイトではパスワードの代替手段で「秘密の質問」などを用意していますよね? ペットの名前は? とか。 私が以前に構築したサイトでは「秘密の質問」は実装しませんでした。 クライアントがなにかと面倒くさがる方で、セキュリティに対する認識が低かったので・・・ (いいのかそれで? って感じですが。) その変わりと言ってはなんですが、画像認証を用意しました。 総当たりのクラックをかけられるような攻撃には対応できるかなと思ったので。 セキュリティに関して比較的意識が高い銀行などのネットバンキングサイトなどが参考になります。個々のエンドユーザーに対してトークンとよばれる時間ごとに切り替わるキーを発行するものを提供したり、「セキュリティカード」と呼ばれるビンゴカードのようなものを配布して、特定の位置の文字列を入力させる方式をとったりしています。 同じような事が出来る環境はなかなかないかもしれませんが、よいヒントにはなるんじゃないでしょうか? > 【質問4】 > ログインシステム開発時のDB暗号化の実装方法・概念等、のわかる書籍やWEBページ等ありましたら教えてください。 とりあえず実装方法そのものがわかっちゃうといけないので考え方や意識を高めるようなものはあるかと思いますが、実装の参考になるものっていうのはあまり見たことがありません。 セキュリティが堅牢になればなるほど、面倒くさい操作や処理をエンドユーザーに求める事になってしまいますので、その妥協点を見つける事から始めてみては? 長々とあまり参考にならない回答ですみません。

  • NARH
  • ベストアンサー率82% (88/107)
回答No.2

要件に対して疑問があります。 ・DB項目の暗号化について  万が一漏れたときの対応とのことですが、暗号化していることで漏れてしまっても安全と考えますか?  データを入手した場合は、じっくりと時間をかけて解析することが可能になります。  数件のデータをピックアップし、総当りするかけるわけですが、手元にデータがあるわけですから、  後は諦めるまで続けるかどうかになるので、僕は安全とは考えません。ですから、この要件には、  積極的なモチベーションはないなと判断します。  #データを盗む人は、今構築中のサービスでなりすましたいわけではないでしょ?  #名簿を売ったり、別のサービスで換金したいだけかと思います。 ・DB項目について、  クレジットカードを積極的に持つ必要がありますか?  決済代行会社がクレジットカードを保持してくれるサービスがあります。  継続課金なども対応できますので、自分で保持することはサービス、ユーザ共にリスクでしか無いので、  なるべく保持しない方向で検討します。 次にパスワード変更に関してですが、メールの到達性は必ずしも担保されていません。 また、いたずらで第三者がパスワード変更ボタンを押した場合、例にある鈴木さんは、 ログインできなくなってしまいませんか? ですから、いきなりパスワードを変更してしまうということは、あまりやったことはありません。 それでも行う場合には、別途本人確認が必要になります。2重に本人確認がおきてきるので、 無駄じゃないかなと検討すると思います。 ・システムデザイン、DBデザイン、ネットワークとして、漏れないように設計する。(権限とか到達性とか) ・個人情報は極力必要なものだけにする。 ・セキュリティ試験を十分行う ・リリースプランにセキュリティ試験も当然組み込む ・ログの設計を見直す ・サービス監視とセキュリティ監視は分けて考える こうして見てみると、セキュリティに関してはアプリケーション作成時よりも運用側で担保している部分が多いと思いませんか? たとえですが、「お札を貼ったから、見張りはいらないというセキュリティは無い」ということなんじゃないかと思います。 お札に万能を求めていると、危ないなぁと感じてしまいます。

JJ_1234
質問者

お礼

ご回答ありがとうございます。 >DB項目について、  クレジットカードを積極的に持つ必要がありますか? 会員制のログインシステムを実装する目的が ・自サイトへ2回以降訪問してくれる常連顧客の入力項目数を削減し受発注を簡易にすることで、顧客の入力作業におけるストレスを軽減する。 ・会員制を導入することで顧客の囲いこみを狙う といったものです。 >決済代行会社がクレジットカードを保持してくれるサービスがあります。 プロジェクト立ち上げ時に検討しましたが、目的の要件を満たさないので見送りました。 >手元にデータがあるわけですから、 後は諦めるまで続けるかどうかになるので、僕は安全とは考えません。 blowfishでsaltを使用したデータを現実的な時間にクラックできるとは私は思えないですが、今回の質問とは話がずれてしまいますので参考までさせていただきます。 その他いろいろとアドバイスいただきまして誠にありがとうございます。 私の質問が多すぎてわかりにくかったので申し訳ないですが 、この質問で私が一番必要としている箇所は ■処理1と処理3のタイミングでパスワード以外のフィールドは一旦復号化して再度暗号化、保存の手順が必要と思うのですが、元の復号キーが不明でも可能でしょうか? ■不可能なら他のサイト運営者はどうしているのでしょうか?平文で保存しているのでしょうか? この点をご回答いただければ助かります。

回答No.1

まず質問者は暗号化をどこでやるかを決めよう。 PHP側でやるのかMySQLの関数を利用するのか。 そういうのを決めて初めて処理の流れを決めることができる。 それとパスワードは暗号化するのには可逆暗号化ではなくて不可逆暗号化を利用しましょう。

JJ_1234
質問者

お礼

ご回答ありがとうございます。 >PHP側でやるのかMySQLの関数を利用するのか。 PHP側でやる予定です。 >それとパスワードは暗号化するのには可逆暗号化ではなくて不可逆暗号化を利用しましょう もちろんその予定でした。

関連するQ&A

  • CODY以外で、自動で暗号化されるソフト 

    暗号化したファイルを復号化したあと、その復号化したファイルを閉じる時に、自動的に同じパスワードで再暗号化され同じ保存場所に保存できるフリーソフトがあれば、教えてください。 Codyは再暗号化に時間がかかるのと、エクセルやワードなどのファイルの場合、最初のファイルを復号化して、次に、別のファイルを復号化しようとしてもできないなどといった不便を感じております。よろしくおねがいします。

  • 添付文書の暗号化と復号化

    個人情報が含まれた文書を送信するため、先方から「文書を暗号化して送信し、復号のためにパスワードを別メールで送ってください」という内容のメールを受け取りました。そのため、無料の暗号化ソフトをダウンロードして、ためしに暗号化と復号化ができるかどうかやってみたところ簡単にできました。これで暗号化して送信し、パスワードを後で送れば完了だと喜んだのですが、この場合、先方が持っているソフトで復号化するとき私が送ったパスワードを入力して受信者が復号化できるのでしょうか?つまり違う復号化のソフトでも自分が送ったパスワードで復号化できるのかどうか、疑問に思ったのです。 ちなみに私はEDというソフトをダウンロードして暗号化したのですが、相手はそのソフトを持っているかどうか疑問です。またこのソフトを添付で送ろうとしたのですが、セキュリティーのため送信不可とのメッセージが出ました。暗号化は初めてのことで何もわかりません。詳しい方教えてください。 よろしくお願いします。

  • SSLってどこから暗号化されるのか?

    ぜひ、教えてください。 あるチェーン店でカードをつくりました。 問題は、インターネットで自分が利用した明細を確認する為にログインする時なんです。 ログインする時に会員番号とそのカードの暗証番号を入力する必要があるのですが、入力欄がトップページにあるので、SSL化されていない通常のページなんです。そこに会員番号と暗証番号を入力し送信することで、SSL化されている確認ページへと進みます。 この場合、どの時点から暗号化され、安全が確立されるのか、また、トップページで入力した会員番号と暗証番号は安全なんでしょうか? 他のカード会社の確認の場合、そういったログインする際には暗証番号ではなくて、パスワードを利用しているので、少し不安です。 とりとめのない質問ですが、よろしくお願いします。

  • こんな暗号化ソフト探しています

    暗号化ソフト探しています 今までXPでやっと今頃Win7(64)に変えました XPではソースネクストのデータプロテクトを暗号化ソフトとして使っていました しかしWin7に入れたのですが対応してませんでした データプロテクトの主な機能として 1)暗号化をフォルダ単位で行われる(複数フォルダ可) 2)暗号化されたファイルを開ける場合 一旦復号ログインすると どのファイルも開く  しかしログイン状態でも目的ファイルをクリックしないと復号されない 3)暗号ログアウトするとフォルダが不可視になる で求めるのは 1)と2) で 3)は あればなお良い 2)が重要で 復号ログインを各ファイルごとPWとかドラック&ドロップとか しなくてよいものが・・ あ・・あと日本語もので・・ フリーソフト100 みてて あんまピンとこなくて 使ってる方のご意見教えて下さい フリー希望ですが安いのであれば有料版でも可です よろしくお願いいたします

  • php パスワード 暗号化

    phpの会員サイトにてパスワードの暗号化を実装したいと思い、投稿させていただきました。 会員の人はパスワード変更→暗号化でDBに登録。 変更したパスワード(暗号化されている)でログインという流れを作りたいのですが、 暗号化でDBに登録まではできましたが、ログイン認証で一致せず困っております。 どなたか教えていただけないでしょうか? 例: <input type="password"name="password" value="1234"> $pass = $_POST[pass]; $password = crypt($pass); $passwordをDBに保存。 その後ログアウトし、ログインのパスワードで1234を入力すると「一致しません」となります。 login認証の際にどのように実装してよいのかわからず困っています。 また、上記の内容にてセキュリティ上に問題がありましたらご指摘お願いします。

    • 締切済み
    • PHP
  • 暗号化ソフト パスワード変更したら以前の暗号化ファイルにも適応???

    アタッシュケースという暗号化フリーソフトを見つけました これで仮にウイルスで流出なんてことがあっても 復元できまいと思っています 大事なファイルを復元し終わってから気付いたのですが 「設定」から入ってパスワードを変更した場合 変更する前に暗号化したファイルはどうなるのでしょうか? 暗号化する前のパスワードが必要になるのでしょうか? それとも変更後のパスワードで復号できるのでしょうか? 失敗したら復号できなくなると思って実験もできませんので 知ってる方いたら教えてもらおうと思って来ました アタッシュケース http://homepage2.nifty.com/hibara/software/atcs.htm

  • 組み込みC言語 AES 暗号・復号化の利用

    組み込みマイコン関係の開発に携わっているものです。 この度、AES128の暗号・復号化を使用する開発案件に 携わることになり、AESの暗号・復号化について勉強中です。 まだ、マイコンでの暗号化・復号化処理という 開発経験がないため、皆様にご教示頂きたく 質問させて頂きます。 マイコンでAES128等の暗号・復号化処理を実装する場合。 マイコンそのものがハードウェアとして暗号・復号化の機能を 持っているものがありますが、通常はこちらで対応するのが 正当な方法、という認識で合っているのでしょうか? また、仮にファーム側の対応を要求された場合は、 マイコンメーカーが出している有料のライブラリ。 または、何かその手では有名な参考となるフリーの ソースコードというものが有るのでしょうか? 恐れ入りますが、ご教示の程宜しくお願い致します。

  • パスワードを暗号化して保存

    VB.NET(VS2010)で開発しています。 パスワードを暗号化して保存したいのですがいまいち方法が わかりません。 当たり前ですがパスワードは任意で変更可能です。 それを暗号化して保存、そして次回からは変更されたパスワードを使ってDBへログイン。 暗号化したもの単体で複号出来ないと困ります。 なるべくiniファイルではなくVS2010やVS2008の機能(リソース?)で実装したいです。 よろしくお願いします。

  • オススメの暗号化ソフトは?

    外付けハードディスクにデータを保存する際、私は一部の重要なデータに暗号化を施しています。 暗号化ソフトはSecureLockWare(http://buffalo.jp/products/slw/index.html)を使っているのですが、いろいろ不満な点があるため、別の暗号化ソフトを探しております。 ちなみに不満な点は以下の通りです。  (1)1つの暗号ファイルにまとめられるのは2GBまで  (2)ファイル名に常用外の文字を含んだファイルの暗号化に失敗する Internet Explorerでお気に入りを保存する際、大量にあるインターネットショートカットの中にそれらのファイルが紛れ込んでしまうので、お気に入りのバックアップフォルダを含むフォルダ全体の暗号化にも失敗します。 絞り込んで暗号化できないファイルを探し、ファイル名を変えることで問題は解決しますが、非常に手間がかかります。  (3)復号に失敗することがある 原因はよくわからないのですが、「ファイル名が長過ぎます」というようなメッセージが表示されます。 最上層のフォルダごと暗号化せず、その直下にある複数のフォルダを全て選択して暗号化したものの復号には成功したので、おそらくフォルダを重ね過ぎると復号に失敗するのではないかと思われます。 復号できないのなら暗号化する時になんらかの警告を出してくれてもいいような気がしますが、そのようなこともなく、例えば何ヶ月も経ってから復号する段になって「復号できない」と言われるので非常にタチが悪いです。当然その手のファイルが必要になった時には、その暗号化したファイルの中にあるものは既にPCから失われているか、データが変わってしまっているわけですから。  (4)暗号化、復号化、どちらの作業も基本的に重い 暗号化の複雑さと暗号化の速度のどちらを重視するかは設定できるし、重いファイルの処理に時間がかかるのは仕方ないと思うので、それ程気にしているわけではありませんが、暗号化、複合化が速いに越したことはないですね。  (5)復号したフォルダにはアイコン設定が残っていない マメな性格なのでほとんどのフォルダのアイコンを変更してるのですが、復号されたフォルダは全てアイコン設定がデフォルトに戻っています。まあこれは些細な問題なのであまり重視していませんが…。 以上の点を踏まえた上で、お勧めの暗号化ソフトを教えていただけないでしょうか。 感じているメリット、デメリットについても付け加えて貰えるとありがたいです。 ちなみに、意味のないこだわりなのかもしれませんが、暗号化ソフトにフリーソフトやシェアウェアを利用するのは抵抗があるので、できれば実績のある企業が製品として販売しているものが良いな…と思っております。 そのような品はそれなりの責任を負って作られたものだと思うので…。 「そんなこだわりは意味がない」ということであれば、その辺りのアドバイスもいただけたらと。 OSはWindows XPのサービスパック3です。 よろしくお願いします^^

  • VB.netでの暗号化復合化の鍵管理について

    Windows 7 Pro (64bit) VB.net 2010 Pro にてアプリ開発、暗号化複合化処理を実装しているところです。 作成するものは下記で、どちらもVB.netです。  1.暗号化ツール(自作  2.アプリ(自作 暗号化複合化処理は下記サイトを参考に行いました。 http://dobon.net/vb/dotnet/string/encryptfile.html システムの流れ ◆暗号化ツールについて  1.のツールで行います。  あるファイルを対象に暗号化し、そして、その暗号化されたファイルを出力し  2.のアプリに埋め込もうと考えています。  同時に、復号に使用する鍵(以下、「復号鍵」)もファイル出力します。 ◆復号化について  2.のアプリで行います。つまり暗号化と復号化の処理は1.2.で切り離されています。  ファイル内容を復号化(復号化された内容は文字列)し、  システム内部でそのファイル内容を使用したい。 ◆問題  復号化するからには、暗号化された復号鍵がどこかに添えてあげる必要があります。  【復号鍵の管理】に関して、どこに持つのがセキュリティ上最も安全か考えております。    折角暗号化したのにもかかわらず、復号鍵が目の見える場所にあっては、  アプリを解析などされた際などに、意味のないものになってしまいます。   何か良い策などあれば、参考にお聞かせ願えればと考えております。    ◆没案  下記の例では、コンピュータに長けている人であれば解析できそうな気がしたので  今回、私の作るシステムではアウトと考えています。  ・レジストリに格納    ・・・ レジストリエディタを使える人からすれば意味がない?    ・Windows上のローカル奥深くに隠しファイルとして保存    ・・・ そもそもディスクドライブにファイル保存すること自体がアウト?    ・USBなどの外部メディアに保存。システムを起動するときに指してもらう。   ・・・ 外部メディアの管理が必要になる。紛失時の問題にもなる。アウト。  ・サーバ上に、キーを持つ。   ・・・ この方法だと、そのサーバ情報もアプリに持つことになるので結局、そのサーバ情報も暗号化することに→イタチごっこに?アウト。 いろいろ考えて見てはいるのですが、いまいちピンときません。 そもそも解析されたら、などと考えるまでもなくこうすれば 鍵管理は問題ないという過去の事例などありましたら、ご教授願います。 よろしくお願いいたします。

専門家に質問してみよう