Я пытался проверить подпись ответа 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
Ручная проверка подписи RSA в ответе SAML ⇐ C#
Место общения программистов C#
1719264369
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
Подробнее здесь: [url]https://stackoverflow.com/questions/78664641/manually-verifying-rsa-signature-in-saml-response[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия