#c# #encryption #jwt
#c# #шифрование #jwt
Вопрос:
Учитывая:
- ключ подписи, сгенерированный RSACryptoServiceProvider.
- требование для создания подписанного jwt с дочерним файлом.
Если бы ключ подписи был из сертификата x509, то я бы установил дочернему элементу значение x5t. В данном случае это не так. Я мог бы придумать что-нибудь произвольное для дочернего элемента, но было бы лучше, если бы столкновения были маловероятны и чтобы существовала значимая связь между дочерним элементом и сертификатом.
То, что я намереваюсь, это: —
- Создайте массив байтов, который создается путем добавления байтов модуля к байтам экспоненты.
- SHA256 кодирует массив.
- Base64 — SHA256.
- установите дочерний элемент в строку base64.
В значительной степени это:
var kid = Base64(SHA256(concat(exp,mod)))
Кажется ли это допустимым подходом? Есть ли более простой способ получить отпечаток пальца от RSASecurityKey
?
Ответ №1:
Как правило, идентификатор ключа для других протоколов состоит из хэша (обычно SHA-1) по модулю. Модуль должен быть уникальным для пары ключей и, следовательно, для открытого и закрытого ключей. Его преимущество в том, что он может быть вычислен из закрытого и открытого ключей, при этом он полезен для идентификации любого из них.
Модуль должен быть закодирован в целое число без знака в конце, используя минимальное количество байтов.
Комментарии:
1. Отлично, спасибо. Всего пара уточнений, которые вы, возможно, можете добавить к ответу: «идентификатор ключа для других протоколов» — что подразумевается под «другими протоколами»? Кроме того, можете ли вы сослаться на какие-либо документы, описывающие предоставленный вами подход (я не смог найти ни одного)? В противном случае, если в ближайшие несколько часов не произойдет каких-либо изменений, я отмечу это как принятый ответ.
2. PKCS # 11 обычно использует это. Мне нужно было бы проверить, является ли это просто обычным использованием или это было определено таким образом … завтра.