14

私の知る限り、RSA キーは通常、(強力な) ランダム ジェネレーターに基づいて生成されます。

代わりに、パスワードに基づいて作成したいと考えています。

またはむしろそのハッシュ、たとえば sha512(sha512(password+salt)+password+pepper)

これは、JavaScript でクライアント側で行う必要があります。

誰でもこれを行う方法を知っていますか? 与えられた入力に基づいて、決定論的に RSA キーペアを作成する簡単な JavaScript ライブラリはありますか?

(実際には、RSA について言及していますが、安全な非対称暗号化で十分です。必要なのは、パブリック プライベート暗号化だけです)


追加:接続やサーバーに依存する必要のない安全な通信ソリューションを構築しているため、これが必要です。

ランダム キーを使用してすべてのコンテンツを AES で暗号化しています。キーは RSA 暗号化されています。アイデアは、アリスが自分のコンテンツ (または実際には、コンテンツの AES キー) をボブの公開鍵で RSA 暗号化できることです (したがって、ボブの公開鍵はオンラインで保存する必要があります)。

その後、ボブがパスワードを再度入力すると、ブラウザーはその場で決定論的に RSA 秘密鍵と公開鍵を計算し、アリスからコンテンツをダウンロードし、秘密鍵を使用してローカルで復号化できます。

4

4 に答える 4

11

パスワードを RNG のシードとしてフィードすると、 Crypticoが役立つようです。

于 2012-06-23T12:03:31.267 に答える
3

句読点についてコメントすることはできませんが、彼が言ったことに加えて +Eugene_Mayevski_'EldoS

純粋な JavaScript の場合: https://www.npmjs.com/package/cryptico

nodejs の場合: https://www.npmjs.com/package/cryptico必要なもの:

npm install 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);
于 2015-02-08T00:45:36.433 に答える
2

RSA 鍵は、ほとんどの対称アルゴリズムのような単なるランダム ビットではなく、大きな素数から派生した指数と剰余です。したがって、パスワードからそれらを生成できる合理的な方法はありません。このウィキペディアの記事を参照してください。

これらの鍵ペアを何に使用していますか? なぜパスワードから導出する必要があるのですか? パスワードを使用して何かを暗号化したい場合は、SHA256(パスワード) を使用して AES256 キーを取得できます。(これを行う場合は、必ずキー強化について読んでください)。

于 2012-06-22T15:06:59.000 に答える