Крипто-знак Node js возвращает пустую строку

Я хочу подписать строку закрытым ключом, используя криптографию.

Метод sign возвращает пустую строку, я надеялся получить подпись.

var crypto = require('crypto');
var message = "This is a string I want to ensure is not tampered with.";

var diffieHellman = crypto.createDiffieHellman(1024);
var publicKey = diffieHellman.generateKeys("base64");
var privateKey = diffieHellman.getPrivateKey("base64");

var signer = crypto.createSign('RSA-SHA256');
signer.write(message, "ascii", function()
{
    var signature = signer.sign(privateKey, 'base64');

    console.log(publicKey);
    console.log(privateKey);
    console.log(signature);// Empty string ?
});

Открытый ключ и закрытый ключ генерируются нормально.

Любая помощь приветствуется.


person bluelightzero    schedule 10.01.2014    source источник
comment
Проблема в том, что DH != RSA   -  person Maarten Bodewes    schedule 11.01.2014


Ответы (2)


Ключ, необходимый для sign(...), представляет собой закодированный PEM ключ RSA, но ключ, сгенерированный createDiffieHellman, насколько мне известно, не является таковым. Я думаю, что лучше всего было бы сгенерировать ключ PEM с помощью OpenSSL.

person loganfsmyth    schedule 11.01.2014
comment
Хотя обе системы основаны на модульном возведении в степень, пары ключей DH — это не то же самое, что закрытые ключи RSA. Если бы они работали, у них были бы очень серьезные проблемы с безопасностью. Однако тип ошибки, возвращаемой библиотекой (none), немного беспокоит. Языки сценариев IMHO с динамической типизацией не очень хорошо подходят для приложений, связанных с безопасностью. - person Maarten Bodewes; 11.01.2014
comment
@loganfsmyth Знаете ли вы, как бы я поступил с криптографией node.js? Просто несколько указателей, какие методы я должен использовать. Спасибо. - person bluelightzero; 11.01.2014
comment
Генерация пары ключей @bluelightzero RSA, похоже, не включена в NodeJS. Причина, вероятно, в том, что для создания пар ключей RSA с использованием NodeJS потребуется очень много времени — генерация пары ключей RSA общеизвестно медленная. Генерация случайных чисел также может быть проблемой. - person Maarten Bodewes; 11.01.2014

Это ошибка с криптографией, подтвержденная здесь:

https://github.com/joyent/node/issues/6963

Чтобы решить, используйте битовую длину 512 и подпись.

Вот рабочий код

var keypair = require('keypair');
var crypto = require('crypto');

var dataA = "This is a string I do not want to be tampered with";
var dataB = "This is a string I do want to be tampered with";

var pair = keypair({bits:256});
console.log("Private   :"+pair['private']);
console.log(" Public   :"+pair['public']);

var sign = crypto.createSign('RSA-SHA256');
sign.write(dataA);
var signiture = sign.sign(pair['private'],'base64');

console.log("Signiture :"+signiture);
person bluelightzero    schedule 24.01.2014