• ベストアンサー

パスワードの暗号化

いつもお世話になっております。 今回はjavascriptをつかった暗号化についてお聞きしたいです。 パスワードをサーバーに送る際、そのまま送ると少し詳しい人なら丸わかりになってしまいます。 そこで暗号化をして送信したく、いろいろ探してみましたがなかなかいい方法が見当たりません。 des.jsというライブラリを見つけましたが、復号化のコードも書いてあり、簡単に復号できてしまうような気がします。 いろいろ探していていいと思ったのは、perlのcryptのような不可逆の暗号化の方法でした。 そのような方法はjavascriptにあるのでしょうか? またそれ以外でもなにかいい方法はありますでしょうか? 完全に隠蔽するのは不可能だということはわかっておりますが、 できる限りわかりにくくする方法を知りたいです。 以上の点、ご教授お願いいたします。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

https で SSL 通信することをお勧めします。 > des.jsというライブラリを見つけましたが、復号化のコードも書いてあ > り、簡単に復号できてしまうような気がします。 信頼できる暗号化というのは、アルゴリズムが公開されており、専門家に よる攻撃に長年耐え抜いたものだと思っています。そういったものでは、 暗号化に使用するキーさえ秘密にできれば、アルゴリズムが公開されてい ても有意な時間で解読することはできません。 ウェブブラウザでパスワードを暗号化してサーバに送りたいとのことで すが、それをするには秘密にすべきキーをブラウザとサーバで共有 するため、暗号化に一番大切な情報(キー)を攻撃者(ブラウザの利用者) に渡してしまうことになります。公開キー暗号化を使えば秘密にすべき 情報は渡さないですみますが、それは SSL 通信と同じになるのでわざわ ざ実装することもないでしょう。 > いろいろ探していていいと思ったのは、perlのcryptのような不可逆の > 暗号化の方法でした。 受け取ったサーバは、どうやって検証するでしょうか。 サーバが「事前」に持っているパスワードを同じ方法で暗号化し、 一致するのを確かめます。単純な暗号化だとブラウザがサーバに送る暗 号化されたパスワードを盗んで、そのまま再送すればサーバを騙せてし まいます。CHAP という方式ではサーバから毎回違う種を送り、その種と パスワードを混ぜて暗号化することで、再送攻撃を防いでいます。 ブラウザとサーバの間でしっかりした暗号化を行うのは簡単ではありま せん。ぱっと見、わからないという以上の暗号化を求めるのでしたら、 実装に苦労するよりも、少しお金を出して SSL 証明書を導入された 方がよいと思います。

参考URL:
http://e-words.jp/w/CHAP.html
iec1128
質問者

お礼

ご回答ありがとうございます。 当方あまり知識がなかったのでためになりました。 SSLはよく耳にしますが詳しくは知らないので 一度調べてみたいと思います。

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

その他の回答 (5)

noname#84373
noname#84373
回答No.6

<HTML> <script type="text/javascript"> window.onload=function(){ var dy=(new Date()).getTime(); document.getElementById('b').value=dy; for(i=0;i<50;i++){ document.getElementById('a').value+=dy; } } </script> <form method="post" action="test.php"> <textarea onClick="maketxt()" id="a" rows="5" cols="11" style="font-famitry:monospace;overflow:hidden;"></textarea> 横10文字縦5文字になるようにして!<br> hidden<input type="text" name="s1" id="b"><br> password<input type="text" name="s2" id="c"><br> <input type="submit" value="go"> </form> </HTML> --------------------------------- phpの例 <?php $s1=$_POST['s1']; $s2=substr($_POST['s2'],4,4); $s3=time()-floor($s1/1000); if($s3>20) exit('error'); $s4=''; for($i=0;$i<50;$i++) $s4.=$s1; $k1=substr($s4,n(2,2),1); $k2=substr($s4,n(9,2),1); $k3=substr($s4,n(9,4),1); $k4=substr($s4,n(2,4),1); $k5=$k1.$k2.$k3.$k4; if($k5!=$s2) exit('error'); echo "ok!"; function n($x,$y){ $v=($y-1)*10+$x-1;return $v;} ok!を表示させるには 適当な文字を4文字最初に入力し、 5番目が上から2、左から2番目。 6番目が上から2、右から2番目。 7番目が下から2、右から2番目。 8番目が下から2、左から2番目。 これを20秒以内に打ち込むこと。

全文を見る
すると、全ての回答が全文表示されます。
noname#84373
noname#84373
回答No.5

パスワードを可変にして、鮮度を持たせては? まず、その時の日付をもとに、 (new Date()).getTime で秒数の羅列を作成し(これをA)、それを数十回繰り返しただけの文字列(B)を作成します。 それをあらかじめ決めたサイズのボックスに、文字列(B)を流し込みます。 ここでのサイズは、解析する側のサーバーでの定数となります。 そしてその2次元に広がった特定の部分、数箇所を決めておき それをつなぎ合わせることでキーをつくります。 例えばキーの文字数は8桁、最初の4文字は適当に入力。 5番目は上から2番目で左から2番目、 6番目は下から2番目で右から2番目、 ・・・のようにして8個の数字を作りそれをキーとする サーバーに送るときは、そのキーと最初に作った文字列(A)を 送ります。 受け取る側では、サーバー側の時間の文字列を作成(C)します その(c)と文字列(A)を比べ20秒以前なら無効にする そしてサーバー側でキーを分析する。 ちょっと言葉だけでは判りづらいかもしれませんがどうでしょう?

全文を見る
すると、全ての回答が全文表示されます。
  • yuji
  • ベストアンサー率37% (64/169)
回答No.4

No.1, No.2の人に賛成です。 Yahoo!のログイン画面で、httpで通信する場合、パスワードをそのまま 送らずに、JavaScriptで難読化した文字列を送信しているようです。 でも、これは、暗号化ではなく、難読化だと思います。 通信そのものは、筒抜けですので。 暗号化したいのであれば、httpsで通信することをお勧めいたします。

iec1128
質問者

お礼

ご回答ありがとうございます。 httpsですか。 一度調べてみます。 アドバイス感謝します。

全文を見る
すると、全ての回答が全文表示されます。
  • equinox2
  • ベストアンサー率48% (321/660)
回答No.3

基本的にNo.1の方に賛成ですが、興味本位でやってみたいのなら Javascriptでかかれたdesのライブラリを使用し、パスワードそのものを 暗号化のキーにしてみてください。 #Unixのパスワードなどと同様な方法です desは、それなりのツールや機器を使えば比較的短時間で解析されてしまいますから、そこまでして解析する必要のない程度の情報のやり取りにしか使えませんが・・ >復号化のコードも書いてあり、簡単に復号できてしまうような気がします。 DESは、アルゴリズム公開の暗号であり、ソースコードがあるから簡単に解析できるものではありません。 #md5のJavascriptがあればその方が良いですが、以前は探せませんでした 10年近く前に、Javascriptだけでパスワード認証を考えた際、暗号化した(複数の)パスワードをソース上に書いても、簡単には解析されない方法として、desのライブラリを使用して実験してみました。 #パスワードの追加・変更にソースを修正する必要があるので実用的ではないですが・・

iec1128
質問者

お礼

ご回答ありがとうございます。 コードがあるからといって簡単にはわからないものなのですか。 やはりまだまだ調べが足りないようなので、もう少し調べてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • VCAT
  • ベストアンサー率20% (16/79)
回答No.2

No.1の方に賛成ですが、そもそもJavaScriptだけで暗号化をする というのが滑稽です。どんなに回りくどく書いても時間をかければ 読み解けますから。そこにすべて書いてあるというのがJavaScriptの JavaScriptたるところなわけです。 No.1の言うとおりサーバでの認証が唯一お勧めできる方法です。

iec1128
質問者

お礼

ご回答ありがとうございます。 >>そもそもJavaScriptだけで暗号化をするというのが滑稽です >>そこにすべて書いてあるというのがJavaScriptのJavaScriptたるところなわけです。 いわれてみればそのとおりです。 もう一度考えて見ます。

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

関連するQ&A

  • perlで可逆な暗号化

    perlで、どうしてもパスワードをGETで送る必要があります。 通常は、cryptを使用して暗号化するのだと思いますが、 cryptは不可逆なので使用したくありません。 perlを使用して、可逆で、できる限り簡単に暗号化する方法を教えてください。

    • ベストアンサー
    • Perl
  • 添付文書の暗号化と復号化

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

  • 暗号化(perl)→復号化(php)

    暗号化キーを使用した暗号化→復号化で cgi(perl)で暗号化し、phpで復号化を行おうとしております。 AES暗号を使用したのですが、いろいろ設定を変えて 試みたのですが、うまくいきませんでした。 他に暗号化キーを使用した暗号化の方法がありましたら 教えてください。 暗号化(perl)→復号化(php)で実績のあるモジュールが あれば非常に助かります。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHP で暗号化して何かを送信することってあるのでしょうか?

    こんにちは、趣味で PHP を触っています。 とても初歩的な質問になってしまうと思いますが、よろしくお願いします。 PHP では crypt 関数で暗号化することができるらしいのですが、実際にこれを使わなければいけない場合とはどのような時なのでしょうか? http://jp2.php.net/manual/ja/function.crypt.php PHP で処理したことを MySQL などのデータベースに書き込む場合、主にサーバー内での処理なので外部から見られることなんてないと思っていましたが、見ることは可能なのでしょうか? それともう一つ質問がありまして、マニュアルには「復号するための関数はありません。 crypt() が使用しているのは単方向アルゴリズムだからです。」とありますが、それだと暗号化すると二度とその情報が何かわからなくなるのではないでしょうか? 何か複合化する方法があるのですか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 暗号のアルゴリズムについて

    公開鍵暗号方式・共通鍵暗号方式があるのはわかっているのですが、 共通鍵暗号方式では、送信者・受信者共に同じ鍵を使うため、同じアルゴリズムで暗号化・復号を行うのであろうと予想はつくのです。 (DESや3DESがあると思うのですが、多分共通鍵にDESを使うとかかいてある?) ・質問 公開鍵暗号の場合、 AがBにデータを送る際、Bの公開鍵でデータを暗号化すると思うのですが この時、Bの公開鍵(証明書?)に、RSAで変換 といったことが書かれているのでしょうか? 公開鍵暗号には、楕円曲線暗号、ElGamal暗号があると思うのですが、 もし、Bの公開鍵に、暗号方式が書いていないと、Bの秘密鍵がRSAだった場合復元できなくなってしまうと思うのですが・・・。 初歩的な質問ですみませんが、 どなたかご教授いただけないでしょうか?

  • パスワード暗号化CGI

    以下のようなパスワード暗号化CGIを作りました。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; $salt = "AB"; open(IN,"pass.txt"); while(<IN>){ $pass = $_; $encpass = crypt($pass, $salt); print "$pass:$encpass<br>"; } close(IN); print "</BODY></HTML>\n"; exit; pass.txtは 1234[改行] 5678[改行] 9012[EOF] のようになっています。 一応暗号化されるのですが、出力結果を見ると 1234 :ABn4qpcmwMnAM のように暗号化前のパスにスペースが入っているんです。 ソースは 1234 :ABn4qpcmwMnAM<br>5678 :AB/ptyBM.rnKY<br>0000:ABiAqp1qc1hMQ<br> となっていて、pass.txtの改行が問題なんだと思いました。 そのためか、暗号化がうまくいきません。 何かこの改行を取り除く良い方法はないでしょうか。

    • ベストアンサー
    • CGI
  • 組み込みC言語 AES 暗号・復号化の利用

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

  • ヤフーメール暗号化

    ヤフーメールの暗号化について考えています。 1. POP3S で取り出し、手元のメールソフトで復号化する。 手元のメールソフトで暗号化したものを添付ファイルとして SMTPS で送信する。 2. POP3 で取り出さないで、 IE などから、ヤフーにログインして暗号化されたデータ(添付ファイル)を ダウンローして手元で復号化する。 IE に、BHO などの方法で暗号化機能を追加して、ブラウザから 暗号化したメールを送信するようにする。 1と2では、どちらが安全でしょうか?

  • MYSQL接続のパスワードの暗号化について

    現在、共有レンタルサーバでMYSQLとPHPを使用したシステムを製作しています。 使用しているサーバは、SSHでの接続ができるのですが、これが他のユーザーのディレクトリのファイルを見ることができてしまうのです。 サーバ会社にそのこと問い合わせたら仕様上変更ができないとのこと。 対策として必要に応じてパスワード等は適宜暗号化してくださいというのですが…。 現在、MYSQLに接続するためのパスワードをテキストファイルでアップしているのですが、今までは他のサーバでシステムを作るとき、.htaccessを使ってブラウザからはアクセスできないようにして対応していたのですが、SSHで接続されるのでは意味がありません。 MYSQLに接続するパスワードを不可逆の暗号化しておいて、そのデータでMYSQLに接続する、なんてことができるのでしょうか? 可逆化が可能な暗号であれば、接続方法は思いつくのですが、PHPスクリプトも他人に読まれる可能性があるため、それでは意味がありません。 または、暗号化しなくても、パスワードファイルはSSHからの接続では閲覧できないようにしたいのです。(この場合、自分でもSSHでは閲覧できなくてもかまいません。) OS:TurboLinux Appliance Server2.0(TLAS2) PHP:4.4.8 mysql:4.0.20 ご存知の方がおられたら、教えて頂けたら幸いです。

    • 締切済み
    • PHP
  • トリプルデス暗号化とLANカード

    LANカードのスペックに 「セキュリティ機能 MD5,SHA-1,DES,Triple,DESをハードウェアで実現」 と書いてあります。 このLANカードは設定でDESなどを使用するように設定できるのですか? もしそうでしたら、それを復号化するのはパケットの送信先のLANカードですか? 物理層を飛び交うパケットデータに、そのデータが暗号化されているかなどという情報はヘッダやトレーラに存在するのですか? 例えば下記のLANカードのスペックに暗号化のことが記載されています。 http://www.fmworld.net/biz/fmv/product/hard/card/fmv-1803s_1.html

このQ&Aのポイント
  • 無線LANでwindowsのPCと接続できないいろいろ試したが
  • 製品名:MFCJ6973
  • パソコンのOS:Windows7、接続方法:無線LAN
回答を見る

専門家に質問してみよう