2012-02-24 3 views
3

자바 스크립트에서 crypt(3)의 구현을 찾고 있습니다. (일반적인 "crypt"알고리즘은 아니지만 예를 들어 리눅스 시스템에서 /etc/shadow에 사용 된 crypt (3)). 아무도 본 사람 없니? 오픈 라이선스로?Javascript에서 crypt (3) 구현을 본 사람이 있습니까?

성능에 대해 조금 걱정합니다. 자바 스크립트로도 작성할 수 있습니까? 예 : sha512-crypt source가 있습니다

/* Repeatedly run the collected hash value through SHA512 to burn 
    CPU cycles. */ 
for (cnt = 0; cnt < rounds; ++cnt) 
{ ... } 

그래서 알고리즘을 C에서 "CPU 사이클을 타"경우 자바 스크립트에서 무엇을 할 것인가? 튀김? (예 : IE6에서 Yikes!) 나는 자바 스크립트에서 무차별 공격 유틸리티를 작성하지 않고 있으며, 파란색 달에 한 번만 암호를 울리므로 아마 괜찮을 것입니다.

배경 : 웹 제공을 위해 사용자가 제공 한 /etc/password//etc/shadow 파일에서 사용자를 가져 오려고합니다. 사용자의 암호에 관한 정보는 crypt (3) 출력 형식이므로 사용자의 암호를 일반 텍스트로 보내지 않으려면 내가 볼 수있는 한 클라이언트 쪽 (javascript)이 필요합니다.) 구현의 crypt (3) 그래서 웹 서버가 소금을 제공하면 클라이언트는 crypt (3) 출력을 보냅니다 (보안을 위해 적절히 해시 됨).

/etc/password//etc/shadow에 대해 서버 측 인증을 안전하게 허용하고 https : //가 필요없는 crypt (3) 클라이언트 측을 사용하는 다른 방법도 유효한 답변으로 간주됩니다.

답변

1

Javascript cryptography isn't secure. 더 나쁜, 돈 ',

암호를 전달하거나 네트워크를 신뢰하지 않는 경우 : SSL 링크가 좋은 이유를 많이 가지고를 사용하는, 그래서 난 그냥 하나 여기에 게시합니다 은 보안 코드을 전달할 수 없다고 사용자의 신원을 유지하기 위해 서버를 신뢰하지 마십시오. 암호를 알아 내기 전에 암호를 스니핑하거나 일기를 읽은 공격자는 암호 코드를 단순히 납치 한 것입니다.

SSL을 통해 Javascript 암호를 보내는 경우 Javascript 암호화가 더 이상 필요하지 않습니다. 당신은 "진짜"암호 법을 가지고 있습니다.

또한 암호의 해시를 보내고 가지고있는 해시와 비교하기 때문에 해커가 해시를 복사하여 원하는대로 사용할 수 있습니다. 이것은 replay attack라고하며, 잘못된 일이 발생했다는 것을 알 수 없기 때문에 특히 교활합니다.

때문에 SSL을 사용해야합니다. 사용자가 SSL 연결을 통해 암호를 보내도록하고 서버에서 crypt (3)를 수행하십시오. 사용중인 웹 프레임 워크에 따라 기존 모듈 (예 : Django의 PAM backend)을 사용할 수 있습니다.이 모듈은 사용자가 원하는대로 할 수는 있지만 좋은 시작 참조입니다. 직접 구현해야합니다.

+0

공격자가 man-in-the-middle 공격을 수행 할 수 있으면 일반 텍스트로 사용자 암호에 액세스 할 수 있다는 것을 알고 있습니다. 기간. 그러나 나는 이것이 반드시 nonce (http://en.wikipedia.org/wiki/Cryptographic_nonce)를 사용하여 간단한 재생 공격에 취약하다는 것에 동의하지 않습니다. 웹 서버가'(nonce, crypt_salt)'를 보내면 클라이언트는'sha512 (concat (nonce, crypt (password, salt)))'를 되돌려 보냅니다. https : // 그런 다음 일반 텍스트로 비밀번호를 전송하면 작동하지만 내 질문에서 명시 적으로 제외됩니다 (아, 내 손에서). –

관련 문제