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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#11 Оставлено : 10 января 2022 г. 20:54:12(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Добрый день.
Цитата:
Здесь алгоритм хэширования указан явно, а мне нужно брать его из сертификата. Не подскажите. как это можно сделать, используя данную библиотеку?
Поскольку здесь речь о подписи по полученному извне хэшу, то есть шанс попасть в неприятную ситуацию, когда длина хэша одинаковая, но алгоритм разный. В этом случае (если алгоритм подогнан по сертификату) подписание пройдет без ошибок, но при проверке будет как бы неверный хэш.

Вариант 1. Алгоритм должен передаваться вместе со значением хэша от hash1 (сервер) в hash2(клиент, где подписываете). Если алгоритм не подходит под сертификат - должна вываливаться ошибка подписания. Собственно, особой проверки не нужно, криптопровайдер выдаст ошибку если алгоритмы хэша и ключевой пары несовместимы. В итоге, Вам не нужно смотреть сертификат - просто честно передать алгоритм хэша от сервера в hash2 (и выдать внятное описание ошибки пользователю). Это не очень поможет пользователю, если сервер дает хэш несовместимый с его сертификатом, но предотвратит трудно диагностируемые ошибки подписи из-за неверного алгоритма.

Вариант 2. Смотрите в имеющемся сертификате алгоритм и запрашиваете от сервера нужный хэш. Это делает необязательным (но все еще желательным) шагом передачу алгоритма хэша от hash1 (сервер) в hash2(клиент, где подписываете). Тут уже сервер должен вываливать ошибку, если не может предоставить такой хэш.

Примечание. В случае зарубежных алгоритмов возможны несколько вариантов хэша, поэтому по сертификату ничего определить нельзя, для варианта 2 нужно выводить список пользователю на выбор.

В случае гост каждому алгоритму подписи соответствует только один алгоритм открытого ключа и один алгоритм хэша. Однако надо ориентироваться на поле алгоритма открытого ключа, так как если используете тестовые сертификаты, то алгоритм хэша конечного сертификата соответствует ключу УЦ и может не соответствовать алгоритму открытого ключа. Был примерно такой код в одной из тем (действие - проверку полученного от сервера алгоритма хэша или жесткое указание алгоритма - добавьте по вкусу):
Код:
    var pubKey = certObject.PublicKey();
    var algo = pubKey.Algorithm;
    var algoOid = algo.Value;
    if (algoOid == "1.2.643.7.1.1.1.1") {   // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 256 бит 
    }
    else if (algoOid == "1.2.643.7.1.1.1.2") {   // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 512 бит 
    }
    else if (algoOid == "1.2.643.2.2.19") {  // алгоритм ГОСТ Р 34.10-2001 
    }
Примечание 2. Это оиды, используемые КриптоПро. В случае сертификатов для других отечественных криптопровайдеров, нужно добавить их специфичные оиды. Может потребоваться дополнительная обработка хэша.

Отредактировано пользователем 10 января 2022 г. 21:25:20(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
astarukhin оставлено 11.01.2022(UTC)
Offline astarukhin  
#12 Оставлено : 11 января 2022 г. 5:58:43(UTC)
astarukhin

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.12.2021(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 5 раз
Автор: two_oceans Перейти к цитате
Добрый день.
Цитата:
Здесь алгоритм хэширования указан явно, а мне нужно брать его из сертификата. Не подскажите. как это можно сделать, используя данную библиотеку?
Поскольку здесь речь о подписи по полученному извне хэшу, то есть шанс попасть в неприятную ситуацию, когда длина хэша одинаковая, но алгоритм разный. В этом случае (если алгоритм подогнан по сертификату) подписание пройдет без ошибок, но при проверке будет как бы неверный хэш.

Вариант 1. Алгоритм должен передаваться вместе со значением хэша от hash1 (сервер) в hash2(клиент, где подписываете). Если алгоритм не подходит под сертификат - должна вываливаться ошибка подписания. Собственно, особой проверки не нужно, криптопровайдер выдаст ошибку если алгоритмы хэша и ключевой пары несовместимы. В итоге, Вам не нужно смотреть сертификат - просто честно передать алгоритм хэша от сервера в hash2 (и выдать внятное описание ошибки пользователю). Это не очень поможет пользователю, если сервер дает хэш несовместимый с его сертификатом, но предотвратит трудно диагностируемые ошибки подписи из-за неверного алгоритма.

Вариант 2. Смотрите в имеющемся сертификате алгоритм и запрашиваете от сервера нужный хэш. Это делает необязательным (но все еще желательным) шагом передачу алгоритма хэша от hash1 (сервер) в hash2(клиент, где подписываете). Тут уже сервер должен вываливать ошибку, если не может предоставить такой хэш.

Примечание. В случае зарубежных алгоритмов возможны несколько вариантов хэша, поэтому по сертификату ничего определить нельзя, для варианта 2 нужно выводить список пользователю на выбор.

В случае гост каждому алгоритму подписи соответствует только один алгоритм открытого ключа и один алгоритм хэша. Однако надо ориентироваться на поле алгоритма открытого ключа, так как если используете тестовые сертификаты, то алгоритм хэша конечного сертификата соответствует ключу УЦ и может не соответствовать алгоритму открытого ключа. Был примерно такой код в одной из тем (действие - проверку полученного от сервера алгоритма хэша или жесткое указание алгоритма - добавьте по вкусу):
Код:
    var pubKey = certObject.PublicKey();
    var algo = pubKey.Algorithm;
    var algoOid = algo.Value;
    if (algoOid == "1.2.643.7.1.1.1.1") {   // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 256 бит 
    }
    else if (algoOid == "1.2.643.7.1.1.1.2") {   // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 512 бит 
    }
    else if (algoOid == "1.2.643.2.2.19") {  // алгоритм ГОСТ Р 34.10-2001 
    }
Примечание 2. Это оиды, используемые КриптоПро. В случае сертификатов для других отечественных криптопровайдеров, нужно добавить их специфичные оиды. Может потребоваться дополнительная обработка хэша.


спасибо!

Отредактировано пользователем 11 января 2022 г. 5:59:43(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.