UWP Cryptographic Interop ... Проблемы с подписями - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно взаимодействовать между Java / OSX / IOS / Windows.
Я использую следующее:
RSA / ECP / PKCS1 - ключ 2048 бит
AES / CBC / PKCS7 - 256-битный ключ
SHA512 для хэша контента и цифровых подписей

Я использовал библиотеку OpenSSL во время разработки и теперь хочу перейти на стандартные библиотеки C #, чтобы я мог выпустить ее в хранилище приложений Windows.
У меня есть следующее, работающее локально и взаимодействующее с другими платформами: хэш SHA512, шифрование / дешифрование AES, шифрование / дешифрование RSA.
Осталось только Подпись / Проверка. Это работает локально, но генерирует другую подпись, чем все остальные платформы. Так что я в растерянности!

На других платформах для подписи Я шифрую хеш SHA512 с помощью закрытого ключа RSA.
В Windows UWP:
Используя алгоритм AsymmetricAlgorithmNames.RsaPkcs1, вы НЕ МОЖЕТЕ шифровать с помощью закрытого ключа. Операция не поддерживается.
Используя алгоритм AsymmetricAlgorithmNames.RsaSignPkcs1Sha512, я могу подписать хеш с помощью:
outData = CryptographicEngine.SignHashedData (mSignPrivateKey, inData);
Я предполагаю, что этот вызов не выполняет никакого хэширования, несмотря на имя алгоритма, поскольку я уже предоставил хэш в буфере inData. Но это генерирует подпись, отличную от всех других платформ.

Для тестирования я создал пару ключей в библиотеке OpenSSL и получил закодированный закрытый ключ.
Затем для Windows UWP я создаю закрытый ключ, используя соответствующий алгоритм:
mSignPrivateKey = sSignAlg.ImportKeyPair (кодированный ключ);
Эта стратегия работала для тестирования RSA Encrypt / Decrypt с помощью:
mEncryptionPrivateKey = sRsaAlg.ImportKeyPair (кодированный ключ);

Любые предложения о том, где я мог пойти не так?

...