Ручная проверка подписи RSA в ответе SAMLC#

Место общения программистов C#
Ответить
Anonymous
 Ручная проверка подписи RSA в ответе SAML

Сообщение Anonymous »

Я пытался проверить подпись ответа SAML после того, как обнаружил, что SignedXml .NET имеет проблему (когда тот же самый ответ SAML можно проверить с помощью Java).
Я знаю, почему именно это привело меня к желанию проверить подпись самому, что не должно быть слишком сложно. Теоретически.
Вкратце, у меня есть довольно простой код подписи RSA, и я использую внешний инструмент для расчета ожидаемого дайджеста SignedInfo элемент для сравнения.
Приведенный ниже код усекает сигнатуру и модуль для удобства чтения. Но я проверил и доказал с помощью других вычислений, что преобразование Big-Endian -> Little-Endian и отмена подписи полученного числа работает так, как я и ожидал.
var sigString = "Xxfh0hq34DGIQibeBrNcYuU/XD0aX...IviQm/5jZK6pD9wReldSPoo=";
var sigBytes = Convert.FromBase64String(sigString).Reverse().Append(0x0).ToArray();
var s = new BigInteger(sigBytes);

var modulusString = "lg4dkGLwfAApoNtWoX...oxvjjaGfH9PzoE=";
var modulusBytes = Convert.FromBase64String(modulusString).Reverse().Append(0x0).ToArray();
var n = new BigInteger(modulusBytes);

var exponentString = "AQAB";
var exponentBytes = Convert.FromBase64String(exponentString).Reverse().Append(0x0).ToArray();
var e = new BigInteger(exponentBytes);

var r = BigInteger.ModPow(s, e, n);

var expectedB64 = "XeHIN99Mkt5A/HswHotEndGJ6ahw/0l8jbjy92Fjsaw=";
var expected = new BigInteger(Convert.FromBase64String(expectedB64).Reverse().Append(0x0).ToArray());

var expectedHex = expected.ToString("X");
var resultHex = r.ToString("X");

//Removing pkcs1.5 padding
var actualHex = resultString.Substring(resultString.Length - expectedString.Length);

Debug.Assert(resultHex == actualHex); //Fail


Подробнее здесь: https://stackoverflow.com/questions/786 ... l-response
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»