いつもお世話になっております。
今回はjavascriptをつかった暗号化についてお聞きしたいです。
パスワードをサーバーに送る際、そのまま送ると少し詳しい人なら丸わかりになってしまいます。
そこで暗号化をして送信したく、いろいろ探してみましたがなかなかいい方法が見当たりません。
des.jsというライブラリを見つけましたが、復号化のコードも書いてあり、簡単に復号できてしまうような気がします。
いろいろ探していていいと思ったのは、perlのcryptのような不可逆の暗号化の方法でした。
そのような方法はjavascriptにあるのでしょうか?
またそれ以外でもなにかいい方法はありますでしょうか?
完全に隠蔽するのは不可能だということはわかっておりますが、
できる限りわかりにくくする方法を知りたいです。
以上の点、ご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
https で SSL 通信することをお勧めします。
> des.jsというライブラリを見つけましたが、復号化のコードも書いてあ
> り、簡単に復号できてしまうような気がします。
信頼できる暗号化というのは、アルゴリズムが公開されており、専門家に
よる攻撃に長年耐え抜いたものだと思っています。そういったものでは、
暗号化に使用するキーさえ秘密にできれば、アルゴリズムが公開されてい
ても有意な時間で解読することはできません。
ウェブブラウザでパスワードを暗号化してサーバに送りたいとのことで
すが、それをするには秘密にすべきキーをブラウザとサーバで共有
するため、暗号化に一番大切な情報(キー)を攻撃者(ブラウザの利用者)
に渡してしまうことになります。公開キー暗号化を使えば秘密にすべき
情報は渡さないですみますが、それは SSL 通信と同じになるのでわざわ
ざ実装することもないでしょう。
> いろいろ探していていいと思ったのは、perlのcryptのような不可逆の
> 暗号化の方法でした。
受け取ったサーバは、どうやって検証するでしょうか。
サーバが「事前」に持っているパスワードを同じ方法で暗号化し、
一致するのを確かめます。単純な暗号化だとブラウザがサーバに送る暗
号化されたパスワードを盗んで、そのまま再送すればサーバを騙せてし
まいます。CHAP という方式ではサーバから毎回違う種を送り、その種と
パスワードを混ぜて暗号化することで、再送攻撃を防いでいます。
ブラウザとサーバの間でしっかりした暗号化を行うのは簡単ではありま
せん。ぱっと見、わからないという以上の暗号化を求めるのでしたら、
実装に苦労するよりも、少しお金を出して SSL 証明書を導入された
方がよいと思います。
参考URL:http://e-words.jp/w/CHAP.html
ご回答ありがとうございます。
当方あまり知識がなかったのでためになりました。
SSLはよく耳にしますが詳しくは知らないので
一度調べてみたいと思います。
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秒以内に打ち込むこと。
No.5
- 回答日時:
パスワードを可変にして、鮮度を持たせては?
まず、その時の日付をもとに、
(new Date()).getTime で秒数の羅列を作成し(これをA)、それを数十回繰り返しただけの文字列(B)を作成します。
それをあらかじめ決めたサイズのボックスに、文字列(B)を流し込みます。
ここでのサイズは、解析する側のサーバーでの定数となります。
そしてその2次元に広がった特定の部分、数箇所を決めておき
それをつなぎ合わせることでキーをつくります。
例えばキーの文字数は8桁、最初の4文字は適当に入力。
5番目は上から2番目で左から2番目、
6番目は下から2番目で右から2番目、
・・・のようにして8個の数字を作りそれをキーとする
サーバーに送るときは、そのキーと最初に作った文字列(A)を
送ります。
受け取る側では、サーバー側の時間の文字列を作成(C)します
その(c)と文字列(A)を比べ20秒以前なら無効にする
そしてサーバー側でキーを分析する。
ちょっと言葉だけでは判りづらいかもしれませんがどうでしょう?
No.3
- 回答日時:
基本的にNo.1の方に賛成ですが、興味本位でやってみたいのなら
Javascriptでかかれたdesのライブラリを使用し、パスワードそのものを
暗号化のキーにしてみてください。
#Unixのパスワードなどと同様な方法です
desは、それなりのツールや機器を使えば比較的短時間で解析されてしまいますから、そこまでして解析する必要のない程度の情報のやり取りにしか使えませんが・・
>復号化のコードも書いてあり、簡単に復号できてしまうような気がします。
DESは、アルゴリズム公開の暗号であり、ソースコードがあるから簡単に解析できるものではありません。
#md5のJavascriptがあればその方が良いですが、以前は探せませんでした
10年近く前に、Javascriptだけでパスワード認証を考えた際、暗号化した(複数の)パスワードをソース上に書いても、簡単には解析されない方法として、desのライブラリを使用して実験してみました。
#パスワードの追加・変更にソースを修正する必要があるので実用的ではないですが・・
ご回答ありがとうございます。
コードがあるからといって簡単にはわからないものなのですか。
やはりまだまだ調べが足りないようなので、もう少し調べてみます。
No.2
- 回答日時:
No.1の方に賛成ですが、そもそもJavaScriptだけで暗号化をする
というのが滑稽です。どんなに回りくどく書いても時間をかければ
読み解けますから。そこにすべて書いてあるというのがJavaScriptの
JavaScriptたるところなわけです。
No.1の言うとおりサーバでの認証が唯一お勧めできる方法です。
ご回答ありがとうございます。
>>そもそもJavaScriptだけで暗号化をするというのが滑稽です
>>そこにすべて書いてあるというのがJavaScriptのJavaScriptたるところなわけです。
いわれてみればそのとおりです。
もう一度考えて見ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(セキュリティ) IDと暗証番号・パスワードの管理の画期的かつ簡単便利な方法を考案した。他人に検証してもらう方法は? 5 2023/02/08 08:49
- その他(コンピューター・テクノロジー) 暗号化されたストレージを復号するにはパスワードがあれば良いので暗号化されたストレージを守ってるのは暗 9 2023/08/16 10:17
- iPhone(アイフォーン) iPhoneの電話帳をエクセル化する方法ないですか?チャットGPTに聞けばいいですか?なんて聞いたら 6 2023/05/25 21:46
- その他(セキュリティ) HDDのデーターを暗号化したい。 3 2022/11/08 08:33
- その他(コンピューター・テクノロジー) 下に書いたの条件でgoogleアカウントの復旧方法等を教えてください。 1 2023/02/06 23:32
- その他(IT・Webサービス) ランサムウエアに汚染されたかもしれない外付けHDDのファイル復旧方法 3 2023/02/04 01:23
- クレジットカード VISAでのネット決済にパスワードが2度も必要? 1 2022/04/04 14:40
- その他(コンピューター・テクノロジー) 通信しない場合はワンタイムパッドは絶対に安全な暗号ですよね? ワンタイムパッドは解読不可能な暗号です 2 2023/08/16 20:18
- その他(スマートフォン・携帯電話・VR) 某信用金庫の通帳アプリ 4 2023/04/09 11:01
- その他(スマートフォン・携帯電話・VR) スマホのバックアップ 今のスマホが落下などで不具合・ 不能になる不安ありませんか? アプリや金融機関 3 2022/12/25 12:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SSL通信のURL暗号化について
-
SSLの通信速度について
-
SSLじゃない通信は危険?
-
サーバー内のメール
-
社内USBメモリ禁止 - 他に何を...
-
httpsでないのですが大丈夫?
-
サイトにアクセスしただけで個...
-
無料アダルトサイトの動画が、...
-
【SBI証券】パソコン使うたびデ...
-
知恵袋に似たサイトはどこですか?
-
WiFiの状態がおかしいです検索...
-
Excel2013 WEBSERVICE で #VAL...
-
証明書による無線LAN認証(802.1...
-
突然サイトが見れなくなった?
-
おすすめのグロサイトを教えて...
-
学校のChrome Bookのロック解除...
-
Yahoo!メールがクソすぎるので...
-
このページは動作していません ...
-
Appleウォレットに親のクレジッ...
-
BASIC認証を毎回起動させる方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
thunderbirdで暗号化されないの...
-
社内USBメモリ禁止 - 他に何を...
-
メールの送受信はSSL通信をすべ...
-
インターネット、有線LAN接...
-
gmailから暗号化されないメール...
-
SSL通信のURL暗号化について
-
CTR(カウンター)モードを...
-
VPNを使わないとフリーWiFiは危...
-
ウェブサイト利用者が自分でhtt...
-
SSLでのメールフォーム
-
SSLの通信速度について
-
【教えてください】128bitSSLと...
-
ホームページで個人情報を記入...
-
GmailのSSL
-
メール暗号化でGmailで警報が出...
-
natとIPsec(VPN)の違い
-
パケットを暗号化
-
フリーWi-Fiについて
-
無線LANでインターネット接続を...
-
VPNについて
おすすめ情報