Как я могу «подписать» JWT с использованием HMAC-SHA256 с открытым ключом (RSA или EC), чтобы вызвать путаницу алгоритмаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу «подписать» JWT с использованием HMAC-SHA256 с открытым ключом (RSA или EC), чтобы вызвать путаницу алгоритма

Сообщение Anonymous »

Я пытаюсь точно понять, как именно это возможно инициировать путаницу алгоритма JWT, как описано в https://redfoxsec.com/blog/jwt-deep-div ... nfusion/-в разделе «Как возникает путаница алгоритма»:


Подумайте о 2 типах алгоритмов шифрования: < /p>

[*] hmac (symmetric): < /strong>

Есть только 1 ключ, AKA

jwt будет подписан и варится с использованием той же секрета. /> rsa (асимметричный): < /strong>

Есть 2 клавиши. Частный ключ и открытый ключ.

JWT будет подписан с использованием закрытого ключа, а подпись будет подтверждена с использованием открытого ключа. Учетные данные. Конечная точка, такая как /.well-known/jwks.json.
< /li>
Злоумышленник сейчас: < /p>

Загружает общедоступный ключ. Ключ. using the public key, but fails, because the public key can only verify signatures that have been generated using the private key (asymmetric encryption).

[*]However, since in this scenario the attacker had modified the encryption algorithm to HMAC (a symmetrical encryption), the server attempted and succeeded in verifying signature using its открытый ключ. < /p>
< /li>
Это происходит, потому что HMAC является симметричным шифрованием, и ключ, который используется для подписи JWT, является тем же ключом, который будет использоваться для его проверки. Алгоритм используется HMAC, JWT подтверждается. < /p>
< /li>
< /ol>
< /blockquote>
Я пытаюсь понять, как именно атакующий может «подписать JWT с открытым конфиденциальным ключом» (я хочу написать тест на единицу, чтобы проверить, что мой логик реализации не может быть уязвимым). Чтобы реализовать эту логику в Python, используя библиотеку jwcrypto .

Код: Выделить всё

from jwcrypto.jwt import JWT

ec_key = load_jwk("sign-ec-p256")  # This is a function that will load a jwcrypto.jwk.JWK object of type `EC` with only the public part
jwt_object = JWT(header={"alg":"HS256", "kid": "sign-ec-p256"}, claims={"iss": "https://my-domain.com"})
jwt_object.make_signed_token(ec_key)
< /code>
Я получаю трассировку стека в библиотеке, потому что она пытается загрузить личную часть, которой нет, и, таким образом, запускает ошибку, прежде чем я смогу когда -либо получить плохо подписанный jwt. < /p>
Из того, что я понимаю, мне кажется, что: < /p>

. API в сериализованной форме, и если десериализация ключевого объекта выполняется только путем доверия ALG 
в JWT;
Библиотека Jwcrypto избегает этой проблемы, потому что его API требует, чтобы ключевые объекты уже были десерициализированы перед тем, как их использование в функциях подписи/версии; Это непостоянное правильно? Что «путаница в алгоритме jwt» связана с разрешением jwt alg значение направлять десериализацию ключа, представленного в программе как строка?

Подробнее здесь: https://stackoverflow.com/questions/796 ... in-order-t
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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