2013-02-24 2 views
1

После некоторых исследований казалось бы, что RSA с дополнением PSS предлагается использовать, поскольку его свойства безопасности, как известно, хороши. Проблема в том, что трудно поддерживать совместимость алгоритмов подписи, особенно с такими требованиями.Совместимость алгоритма защищенной подписи

То, что я хотел бы добиться того, чтобы подписать и проверить по крайней мере, в следующих средах:

  • Ботан
  • OpenSSL
  • Crypto ++
  • Node.js (использует OpenSSL)

Также может быть интересно иметь совместимость с PolarSSL и другими.

На странице криптографии node.js есть пример создания и проверки подписей. Это работает хорошо, но мне нужна совместимость с Botan EMSAx (SHA256), и действительно думаю, что подпись должна быть дополнена для безопасности с чем-то вроде RSA-PSS. На странице примера узла отображается только 'RSA-SHA256', но нет прокладки.

ПСС обивка может быть достигнуто с помощью OpenSSL:

openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 \ 
-sign rsa.key -out data.txt.sha256 data.txt 

Мой тестовый код выглядит примерно так:

var s = crypto.createSign('RSA-SHA256'); 
var key = fs.readFileSync('rsa.key').toString(); 

s.update(message); 

var signature = s.sign(key, 'base64'); 

, но он производит идентичный выход для идентичных входных данных, которые не то, что я хочу, и, очевидно, несовместим с реализацией C++, которая использует Botan.

Если невозможно добиться совместимости с минимальными усилиями, любые предложения по выбору алгоритмов, я мог бы попытаться связаться с разработчиками этих крипто-библиотек, чтобы узнать, существует ли какой-либо консенсус относительно алгоритм, который будет реализован как стандарт де-факто. (Да, я знаю, что это кажется отчаянным.) Есть ли постоянные усилия, подобные этому?

ответ

4

В настоящее время вы используете формат PSS-подписи, в то время как Node.js почти наверняка использует PKCS # 1 совместимые с подписью сигнатуры - и если я посмотрю на текущий код, Node.js, похоже, будет ограничен этими. Одно отличие состоит в том, что PSS сгенерированные сигнатуры содержат случайный компонент, а подписи PKCS # 1 v1.5 - нет.

Несмотря на то, что подписи PSS, безусловно, предпочтительнее, кажется вам единственным вариантом - либо вернуться к совместимым с PKCS # 1 совместимым сигнатурам для Botan, либо реализовать PSS-сигнатуры в Node.js. Подписи PKCS # 1 v1.5 должны быть безопасными, хотя они имеют менее желательные свойства по сравнению с сигнатурами PSS.

+0

Кажется, что совместимость подписи все еще находится в зачаточном состоянии. Я боялся, что это будет ответ, но я пока не буду считать его правильным, поскольку я надеюсь, что есть другой способ, другой 'crypto' lib для Node.js или какое-то решение более высокого уровня. Я немного боюсь начать реализацию криптоалгоритмов самостоятельно, но, возможно, настало время. –

+0

Кажется очень странным сказать, что совместимость подписи все еще находится в зачаточном состоянии, поскольку совместимость с PKCS # 1 v1.5, вероятно, 100%, и по-прежнему в основном используется в SSH, TLS и т. Д. Совместимость подписи возникает, если у вас есть специальные которые препятствуют безопасному использованию PKCS №1 v1.5. – Nakedible

+1

@Naked, что я предлагал, было то, что я не мог найти совместимые реализации для дополнения PSS, который, казалось, был для вас способом.Как вам показалось, что вы разбираетесь в предмете; существует ли стандартный набор, который реализует значительный набор криптовальных библиотек, позволяющий писать структуру данных подписи и проверять с помощью разных алгоритмов? ECDSA (с разными кривыми)/RSA/другой? –

Смежные вопросы