Я пытаюсь создать экземпляр System.Security.Cryptography.RSA
из набора веб-ключей JSON (JWKS), который включает в себя некоторые ключи RSA, но включает только их модуль (n), открытый показатель (e) и секретный показатель (d)а не простые числа, которые использовались во время генерации ключей (p и q).
Это jwks, который включает в себя закрытые ключи (конечно, тестовые ключи): https://belgianmobileid.github.io/slate/private_jwks.json
Вот чтоЯ попытался:
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using Microsoft.IdentityModel.Tokens;
class Program
{
static void Main(string[] args)
{
var jwks = new WebClient().DownloadString("https://belgianmobileid.github.io/slate/private_jwks.json");
var webKeySet = JsonWebKeySet.Create(jwks);
// signing key has kid "s1"
var signingkey = webKeySet.Keys.Single(key => key.KeyId == "s1");
// throws System.Security.Cryptography.CryptographicException:
// 'The specified RSA parameters are not valid; both Exponent and Modulus are required fields.'
var rsa = RSA.Create(
new RSAParameters
{
Modulus = Base64UrlEncoder.DecodeBytes(signingkey.N),
Exponent = Base64UrlEncoder.DecodeBytes(signingkey.E),
D = Base64UrlEncoder.DecodeBytes(signingkey.D),
P = null, // unknown
Q = null // unknown
});
}
}
Я, конечно, не специалист по криптографии, я просто пытаюсь разобрать JWKS во что-то, что я могу использовать в коде.Возможно ли это даже без знания p или q?