Есть ли в TLS 1.2 специальные алгоритмы / поведение набора шифров для VerifyData? - PullRequest
0 голосов
/ 12 ноября 2018

Я работаю над реализацией DTLS в Golang и не могу сгенерировать допустимое значение для VerifyData.У меня есть рабочий пример здесь это показывает мой код (и как я получаю что-то отличное от OpenSSL)

printf отладка OpenSSL похоже, что хэш тел рукопожатия отличается от моего.Это кажется маловероятным, я бы предположил, что я собираю пакеты неправильно.Но помещая операторы printf перед

Набором шифров является TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, и вы можете увидеть всю кодовую базу в https://github.com/pions/dtls

1 Ответ

0 голосов
/ 13 ноября 2018

VerifyData (в Finished) всегда использует TLS-определенный PRF, который для TLS1.2 (и DTLS1.2) является удвоенным HMAC, использующим хеш, который может зависеть от набора шифров.Для всех существующих ранее наборов шифров DF TLS1.2 PRF использует SHA256, а новый набор TLS1.2, который вы определили, также использует SHA256.(Фактически он использует SHA256 только для PRF, потому что в наборах GCM не используется HMAC для данных.) В некоторых других новых в TLS1.2 наборах используется SHA384.Кроме того, длина VerifyData в 1.2 формально зависит от набора шифров, но все комплекты до 1.2 должны использовать размер протокола до 1.2, равный 12, и все наборы новичка в 1.2 также используют 12,так что на практике нет никакой разницы.

Однако, следуя вашей сути , ваша проблема в том, что вы включили начальный ClientHello и HelloVerifyRequest , чего не следует делать.См. Предпоследнее (от второго к последнему слово, которое я не часто использую!) В разделе 4.2.1, в верхней части стр. 18 в rfc6347 и в разделе 4.2.6., который также отмечает, хотя это не проблема в вашем примере, что, если для передачи используется фрагментация, вы все равно должны хешировать нефрагментированные сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...