2011-04-18 4 views
5

로그인 할 때 JavaScript를 사용하여 사용자의 암호와 사용자 이름을 암호화하고 싶습니다 (Ajax 사용). 자바 스크립트를위한 비대칭 암호화 라이브러리가 여러 개 존재한다는 것을 알고 있습니다. 이것은 안전한 암호 통신을위한 실행 가능한 전략입니까?JavaScript를 실용적으로 사용하여 암호를 비대칭으로 암호화합니까?

나는 SSL이 존재한다는 것을 알고 있지만, 그 질문은 아닙니다.

+0

교정 해 주셔서 감사합니다. Michael Petrotta; 나는 내 맞춤법 검사기가 결국에 없었던 것 같아요 :) –

+3

왜 HTTPS를 사용하지 않습니까? –

+1

@Alin Purcaru : Question updated @ –

답변

3

아니요. 침입자가 암호 또는 암호화 된 암호를 가져 오면 아무런 차이가 없습니다. 둘 다 "암호화되지 않은"서버로 보내 지므로 암호화 된 암호를 사용하여 로그인 할 수 있습니다.

JavaScript는 보안을 위해 사용할 수 없습니다. 에 HTTPS를 사용하려면이 있어야합니다.

+1

해당 암호화 알고리즘이 사유화 된 방법으로 보관되는 경우 어떻게해야합니까? – GAgnew

+1

이것이 반드시 필요한 이유는 무엇입니까? SHA1 라이브러리 (예 : http://pajhome.org.uk/crypt/md5/sha1)를 설치하면 어떻게 될까요?html) 네트워크를 통한 암호 해시 만 보내면됩니까? 이것이 안전하지 않다면 데이터베이스에 안전하지 않은 SHA1 해시를 저장하지 않을 것인가? –

+0

암호화 된 패킷에 타임 스탬프가 포함되어 있으면 암호화 된 암호가 유효한 시간이 제한됩니다. 더 나은 방법은 먼저 암호화 전에 암호에 추가 된 토큰을 서버에서 요청하는 것입니다. 각 토큰은 한 번만 사용할 수 있습니다. –

1

수학적으로 집중적 인 JavaScript가 부과하는 성능보다 성능이 떨어지는 것은 아닙니다. 이를 사용하여 HTTP를 통해 서버로 데이터를 보내기 전에 해커가 암호를 정확히 알아 내지 못하게하는 동안 단순히 암호만으로는 액세스하지 못하게 할 수 있습니다 전송 한 동일한 암호화 된 데이터로 재생 공격을 실행합니다.

양식 제출을 보호 할 수있는 유일한 방법은 HTTPS를 사용하는 것입니다. 나는 HTTPS를 설정하는 것이 번거롭다는 것을 안다. 하나의 도메인과 모든 것에서 만 작동하는 인증서로 무엇을 할 수 있겠지만, 정보가 정말로 중요하다면 JavaScript로 암호화하는 것보다 시간을 투자하는 것이 더 좋다.

+0

자바 스크립트의 수학은 사실 아주 빠르다. 자바 스크립트는 매우 어렵다. 왜냐하면 대부분은 어렵고 추상적이고 복잡한 DOM 조작 과정과 관련이 있기 때문이다. [이 데모] (http://bitwiseshiftleft.github.com/sjcl/demo/) (대칭 암호화)를 참조하십시오. –

1

여전히 연결을 통해 텍스트를 전달하기 때문에이 모델에는 여전히 문제가 있습니다. 암호화/해독/비교 프로세스의 날짜를 측정하지 않으면 여전히 재생 공격의 가능성이 있습니다.

여전히 널리 퍼져있는 man-in-the-middle 공격을 넘어서라도 암호화 및 공개 키 알고리즘이 존재한다는 사실은 여전히 ​​남아 있습니다. 누군가 암호로 고쳐 쓴 암호의 파악을 얻는 경우에 그 (것)들에게 똑똑히 그 암호를 똑똑히 강제하는 영원한 근원이있을 것입니다.

5

1 단계 : 인터넷에있는 사람들을 신뢰하지 말고, 내가 약할 수있는 약한 알고리즘을 제안 할 것입니다.

2 단계 : 자신의 알고리즘을 설계하거나, 컴퓨터 보안에서 박사 학위를 할 때까지 다른 사람이 생산 시스템의 구현하지 마십시오

공격자가 얻을 경우 암호화, 재생 공격으로부터 보호하는 것만으로는 충분하지 않습니다 암호화 된 암호 인 경우 인증하기에 충분하면 암호화되지 않은 암호로 사용하는 것이 좋습니다.

내가 제안 :

  1. 사용자는
  2. 클라이언트 요청이
  3. 서버는 고유 한 임의의 토큰을 반환하고, 저장은 사용자 세션에 대해이가합니다 (에 저장된 쿠키에 의해 키가 서버에서 토큰 비밀번호를이 입력 서버)
  4. 클라이언트는 공개 키를 사용하여 암호 + 토큰을 암호화하고이를 서버에 전달합니다.
  5. 서버가 개인 키를 사용하여 암호를 해독하고 토큰이이 세션과 일치하는지 확인합니다. 이전에 사용되지 않았으며 30 초 이상 경과하지 않았습니다.
  6. 서버는 암호의 해시가 데이터 저장소에 저장된 사용자 암호 해시와 일치하는지 확인합니다.

전송되는 모든 데이터가 계속 표시 될 수 있으므로 사용자는 (https와 마찬가지로) 개인 정보 보호를받지 못합니다. 암호화 알고리즘, 암호화 구현 및 공개 키는 공개됩니다. 이것은 많은 양의 현재 cryptolagy의 경우이며, 많은 알고리즘이 공격자가이를 알고 있음을 확신하도록 고안되었습니다.

암호가 암호화되기 전에 키로거 또는 스파이웨어 공격을 차단하지 못합니다.

자바 스크립트에서 구현 된 비대칭 암호화 구현에 대한 지식이 없지만 근본적으로이 접근법에서는 안전하지 않습니다.

+0

30 초? 내가 암호를 찾지 않으면 너무 강해서 기억이 안 나니? –

+1

첫 번째 요점을 토대로 내가 제안한 시스템을 신뢰해야합니까? –

+0

@SimpleCoder Nope :) 나는 불안한 관심을 가지고 있으며, 이것이 더 안전해질 것이라고 믿습니다.하지만 나는 당신을 속이는 사악한 밥이에요. 진지하게 나는 내가 말하는 말은 정확하다고 믿는다.하지만 너는 그것에 대한 나의 말만 가지고 있으며 나는 틀릴 수도있다. –

4

Secure Remote Password protocol과 같은 알고리즘을 사용하면 암호를 알고 있다는 지식 증거를 제공 할 수 있습니다. 도청자는이를 사용하여 로그인을 복제 할 수 없습니다. 그러나 Javascript 코드를 직접 암호를 전송하는 것으로 바꾸는 능동적 인 공격자를 조심하십시오.

은 SRP의 몇 가지 자바 스크립트 구현이있다 : 당신이 시작하는 경우

0

당신이 위험에 항상있어 통신을 비 인증 인간의 -중간.

어쨌든 비밀 번호를 전송하는 것보다 염분이 많고 해시 된 암호가 인 경우 항상을 전송하는 것이 좋습니다. 귀하의 로그인 시스템이 약하지만, (다른 시스템과 공유 할 수 있음)이 아닌 경우 이 적어도 은행 계좌 인 경우 을 사용할 수 있습니다.

또한 값을 저장하지 말고 소금과 해시를 다시 저장하십시오.

비대칭 암호화도 사용하는 경우 도청으로부터 보호를 추가합니다. 그러나 다시 한번, man-in-the-middle에 반대하는 것은 아닙니다.

관련 문제