クライアント側で md5 ハッシュを使用して、クライアント側 (JSP) からサーバーのサーブレットへのパスワード送信を保護するにはどうすればよいですか? 次の投稿は質問に答えているようですが、コードブロックが不完全であるため、完全には理解できません。 http://www.techlabs4u.com/2010/03/how-to-use-salted-md5-hash-for-securing.html
4 に答える
クライアント側で md5 ハッシュを使用して、クライアント側 (JSP) からサーバーのサーブレットへのパスワード送信を保護するにはどうすればよいですか?
できません。
パスワードハッシュは、元のパスワードを保存しないようにするために使用され、データベースが侵害された場合に保護されます。(そして MD5 は壊れているので、とにかくそれを使用すべきではありません)。
送信時にパスワードを保護するには、SSL (HTTPS 経由) を使用します。
パスワードをハッシュしてソルトし、ハッシュをクリアテキストで送信しても、パスワードをクリアテキストで送信するだけでセキュリティが強化されることはありません。攻撃者がクリア テキストのパスワードを傍受してログインできる場合、ハッシュ化されたパスワードを簡単に傍受してログインすることができます。
クライアント側のコードがどれほど優れていても、ハッシュ アルゴリズムがどれほど強力であっても、原則には根本的な欠陥があります。
すでに提案されているように、SSL を使用してください。クリアテキストで送信する代わりに、これによりクライアントとサーバー間のすべての送信が暗号化され、傍受が防止されます。
Java および JSP での MD5 暗号化の完全なコードを探している場合は、ここにあります。まず、テキストを暗号化できる Java クラスを作成します。mdjavahash.java
下図のように作成しました。
package mdhash;
import java.security.*;
public class mdjavahash {
private String hashpass="";
public String getHashPass(String password) throws
NoSuchAlgorithmException{
String plainText = password;
MessageDigest mdAlgorithm = MessageDigest.getInstance("MD5");
mdAlgorithm.update(plainText.getBytes());
byte[] digest = mdAlgorithm.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
plainText = Integer.toHexString(0xFF & digest[i]);
if (plainText.length() < 2) {
plainText = "0" + plainText;
}
hexString.append(plainText);
}
hashpass = hexString.toString();
return hashpass;
}
}
mdjavahash
これで、jsp ファイルのクラスを使用して暗号化できます。例えば:
<%@ page import="java.security.*, mdhash.*" %>
<%
String mypassword = "";
mdjavahash md = new mdjavahash();
mypassword = "Hello World";
out.println("Actual String is : "+mypassword+" <br/>MD5 String is :
"+md.getHashPass(mypassword));
%>
これで、JSP での暗号化は完了です。
SSLを使用せずにこのような中程度のセキュリティが必要な場合は、次の方法を試してください。
- 現在の時刻を読む
- ユーザーが入力したパスワードと時刻を連結します
- ハッシュを生成します。md5は、選択可能なハッシュアルゴリズムの1つであり、必須ではありません。
- ユーザー名、タイムスタンプ、ハッシュのすべてをサーバーにPOSTします。
サーバー側
- 3つのPOST変数を収集します
- タイムスタンプを確認し、適切な時差のみを受け入れます
- データベースからパスワードを取得します
- サーバー側でも同じ方法でハッシュを計算します
- 計算結果をPOSTハッシュと比較します
短所:サーバー側でプレーンテキストのパスワードを保持する必要があります
別の方法:パスワードを事前にハッシュし、ログイン時にjavascript側でダブルハッシュします。