2012-06-22 8 views
11

제가 이해하는 한, RSA 키는 일반적으로 (강력한) 임의 생성기를 기반으로 생성됩니다.비밀 번호를 기반으로 자바 스크립트에서 RSA 키 쌍을 생성하십시오

대신 비밀번호를 기반으로 생성하고 싶습니다. 이 필요한 예를 들어, SHA512 (SHA512 (비밀 번호 + 소금) + 비밀번호 + 고추)

에 대한

또는 오히려 해시에

는, 자바 스크립트, 클라이언트 측을 수행 할 수 있습니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까? 주어진 입력을 기반으로 결정 론적으로 RSA 키 쌍을 만드는 쉬운 JavaScript 라이브러리가 있습니까?


추가 (사실, RSA를 언급하고있어 있지만 보안 비대칭 암호화가 충분, 난 그냥 공공 - 민간 암호화 필요) : 나는 몇 가지 보안 통신 솔루션을 짓고 있어요 때문에이 필요, 연결에 의존 할 필요가 없으며 보안을 위해 서버에 의존 할 필요가 없습니다.

나는 임의의 키를 사용하여 AES로 모든 콘텐츠를 암호화하고 있으며 키는 RSA로 암호화되어 있습니다. Alice는 Bob의 공개 키 (즉, Bob의 공개 키를 온라인에 저장해야 함)로 자신의 콘텐츠 (또는 실제로 콘텐츠의 AES- 키)를 RSA로 암호화 할 수 있습니다.

나중에 Bob이 암호를 다시 입력하면 브라우저는 공개적으로 RSA private & 공개 키를 결정적으로 계산하고 Alice의 콘텐츠를 다운로드 한 다음 개인 키를 사용하여 로컬에서 암호를 해독 할 수 있습니다.

+0

JavaScript를 사용하여 RSA 키 만들기? 나는 그것을 스스로 시도한 것을 기억한다. 그것은 내 모든 기억을 다 먹어서 영원히 계산할 수있었습니다. 나는 Java로 전환했다. – Amberlamps

+0

RSA 이외의 비대칭 암호화 체계도 괜찮습니다. 하지만 키를 클라이언트 측에서 생성하고 데이터를 보내기 전에 개인 키로 데이터를 암호화해야합니다. 공개 키는 서버 측에 저장됩니다.ECC 접근 방식이 더 빨라지는지 모르겠습니다. –

+1

@SheldonPinkman 암호화는 개인 키가 아닌 공개 키를 사용하여 수행됩니다. 일관되게 당신의 생각에는 결함이 있습니다. –

답변

2

RSA 키는 대부분의 대칭 알고리즘처럼 단순한 무작위 비트가 아니며 큰 소수에서 나온 지수 및 모듈입니다. 따라서 암호로 생성 할 수있는 합리적인 방법은 없습니다. this wikipedia article을 참조하십시오.

이 키 쌍은 무엇을 사용하고 있습니까? 암호에서 파생되어야하는 이유는 무엇입니까? 암호를 사용하여 암호를 암호화하려면 SHA256 (암호)을 사용하여 AES256 키를 파생시킬 수 있습니다. (이 작업을 수행하려면 key strengthening에서 읽어야합니다).

+0

에서 암호를 수행하는 것에 대한 경고 메시지를 참고하여 암호로 임의 화기를 초기화하고 암호에 "의존"하는 키를 얻을 수 있습니다. 그러나 보통이 작업을 수행 할 실질적인 이유는 없습니다 (나는 합리적인 경우를 알고 있습니다.). –

+1

글쎄, 나는 RNG가 부족한 것이 좋은 원인이라고 생각한다. 하지만이 모든 계획에는 심각한 디자인 결함이 있다는 느낌이 들었습니다. –

+2

@Petey : RSA 키는 무작위 비트가 아니라는 것을 알고 있습니다. 그러나 임의의 생성기 (기존 RSA 키 생성기에서 발생하는 모든 위치)를 암호로 파생 된 것으로 대체 할 수 있습니다. 암호 해시가 단순히 뿌려지는 임의의 생성기 일 수도 있습니다. 그렇게하면 동일한 암호로 인해 정확히 동일한 RSA 키가 생성됩니다. –

9

Cryptico은 RNG의 시드로 비밀번호를 입력 할 때 도움이됩니다. nodejs에 대한 https://www.npmjs.com/package/cryptico

:

+0

신난다. 완벽 해 보인다! –

+0

링크가 작동하지 않습니다. – Akam

+0

@akam 링크가 업데이트되었습니다. 감사합니다. –

2

나는 그가 + Eugene_Mayevski_'EldoS 순수 자바 스크립트에 대한

말에 내 punctuationbut에 대해 언급하지만, 추가 할 수

npm install cryptico 

그리고 : https://www.npmjs.com/package/cryptico이 필요 다음 행 추가 :

var cryptico = require("cryptico"); 

개체를 만들려면

function cryptoObj(passPhrase) 
{ 
    this.bits = 1024; //2048; 
    this.passPhrase = passPhrase; 
    this.rsaKey = cryptico.generateRSAKey(this.passPhrase,this.bits); 
    this.rsaPublicKey = cryptico.publicKeyString(this.rsaKey); 

    this.encrypt = function(message){ 
    var result = cryptico.encrypt(message,this.rsaPublicKey); 
    return result.cipher; 
    }; 

    this.decrypt = function(message){ 
    var result = cryptico.decrypt(message, this.rsaKey); 
    return result.plaintext; 
    }; 
} 

console.log('---------------------------------------------------------'); 
var localEncryptor = new cryptoObj("XXyour secret txt or number hereXX"); 

var encryptedMessage = localEncryptor.encrypt('new message or json code here'); 
var decryptedMessage = localEncryptor.decrypt(encryptedMessage); 

console.log(''); 
console.log('>>> Encrypted Message: '+encryptedMessage); 
console.log(''); 
console.log('>>> Decrypted Message: '+decryptedMessage); 
+0

내가 사용할 때 var cryptico = require ("cryptico"); 내 component.ts에서 나는 ----- "(SystemJS) XHR 오류 (404 찾을 수 없음)로드 http : // localhost : 5555/node_modules/crypto.js"오류가 발생했습니다. – Khushi

관련 문제