Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline VintVV  
#1 Оставлено : 30 ноября 2023 г. 15:43:56(UTC)
VintVV

Статус: Новичок

Группы: Участники
Зарегистрирован: 16.10.2014(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 1 раз
Помогите разобраться.
Пытаюсь проверить Raw подпись JWT токена полученого от ЕСИА в результате прохождения OIDC flow.

Окружение

- Windows 10
- CSP 5.0.12500 KC1
- LibCore.Windows Version="2023.9.26.1"

Данные

- JWT токен
eyJ2ZXIiOjEsInR5cCI6IkpXVCIsInNidCI6ImFjY2VzcyIsImFsZyI6IkdPU1QzNDEwXzIwMTJfMjU2In0.eyJuYmYiOjE3MDEyNTQ1NzUsInNjb3BlIjoidXNyX3JlZ19jeHQ_b2lkPTEwMDAzMjg2ODYgZW1haWw_b2lkPTEwMDAzMjg2ODYgb3BlbmlkIHVzcl9hdnQ_b2lkPTEwMDAzMjg2ODYgdXNyX29yZz9vaWQ9MTAwMDMyODY4NiBmdWxsbmFtZT9vaWQ9MTAwMDMyODY4NiBtb2JpbGU_b2lkPTEwMDAzMjg2ODYiLCJpc3MiOiJodHRwOlwvXC9lc2lhLXBvcnRhbDEudGVzdC5nb3N1c2x1Z2kucnVcLyIsInVybjplc2lhOnNpZCI6ImExNTEwY2IyLTAxMTItZjJmNS0zZGI2LTZiYzc1ZGI0MGUwZSIsInVybjplc2lhOnNial9pZCI6MTAwMDMyODY4NiwiZXhwIjoxNzAxMjU4MTc1LCJpYXQiOjE3MDEyNTQ1NzUsImNsaWVudF9pZCI6IkNUUFJGX1JVIn0.cz8DPKHZvTsF__reCBDsZ4ZPxehs4qanCmiJjJr2slzrWTmv_HkScguPGU5NDlyJrxi25Tv8rcqfg7YM0PKsDg

- Сертификат
[TESIA GOST 2012.zip] TESIA GOST 2012.zip (2kb) загружен 2 раз(а).
Получил по ссылке из дока Методические указания по использованию ЕСИА (http://esia.gosuslugi.ru/public/esia.zip)


Код

Получение сертификата из хранилища - тут все ОК

Код:

    private static string SerialNumberTest = "014018b300ffafd593465c5c2de413c849";
    private static X509Certificate2 GetCert()
    {
        using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
        {
            store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
            var certs = store.Certificates.Find(X509FindType.FindBySerialNumber, SerialNumberTest, false);
            if (certs.Count == 0)
                throw new EsiaServiceException("Certificate is not found");
            return certs[0];    
        }   
    }


Проверка подписи 1 - при любом reverseSignature
Код:

    private static void VerifySignature1(string accessToken, bool reverseSignature)
    {
        var parts = accessToken.Split('.');
        var message = Encoding.UTF8.GetBytes($"{parts[0]}.{parts[1]}");
        var sign = Base64UrlEncoder.DecodeBytes(parts[2]);
        if (reverseSignature)
            Array.Reverse(sign, 0, sign.Length);

        var certificate = GetCert();
        using (var csp = certificate.GetGost3410_2012_256PublicKey())
        {
            var result = csp.VerifyData(message, sign, CpHashAlgorithmName.Gost3411_2012_256);
            if (!result)
                throw new Exception("Invalid signature");
        }
    }


Проверка подписи 2 - при любом reverseSignature
Код:

    private static void VerifySignature2(string accessToken, bool reverseSignature)
    {
        var parts = accessToken.Split('.');
        var message = Encoding.UTF8.GetBytes($"{parts[0]}.{parts[1]}");
        var sign = Base64UrlEncoder.DecodeBytes(parts[2]);
        if (reverseSignature)
            Array.Reverse(sign, 0, sign.Length);
        
        var certificate = GetCert();
        using (var csp = certificate.GetGost3410_2012_256PublicKey())
        {
            using (var hasher = Gost3411_2012_256.Create())
            {
                var hash = hasher.ComputeHash(message);
                var formatter = new Gost2012_256SignatureDeformatter(csp);
                formatter.SetHashAlgorithm(nameof(Gost3411_2012_256));
                var ret = formatter.VerifySignature(hash, sign);
                Assert.False(ret);                
            }
        }
    }
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.