Рейтинг:0

Генерация закрытых ключей на основе списка доступных наборов шифров

флаг my

Я создаю свою собственную сеть на основе MQTT, для которой я бы создал свою собственную ca/сервер/клиент сертификаты для аутентификации.

Цель здесь состоит в том, чтобы сохранить размеры сообщений как можно меньше чтобы уменьшить пропускную способность трафика, но я уже знаю, что уровень TLS увеличивает нагрузку на отправляемый трафик. А именно, с клиентскими сертификатами мне фактически пришлось бы отправлять сертификат клиента на сервер и наоборот при каждой попытке подключения TCP, что может добавить до 8 КБ без отправки даже одного байта реальных данных. (Надеюсь, я правильно понял эту часть)

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

Например, это разрешенный список наборов шифров, которые может использовать клиент:

CIPHERSUITE КОД
TLS-PSK-С-AES-128-CBC-SHA256 00ае
TLS-PSK-С-AES-256-CBC-SHA384 00af
TLS-PSK-С-AES-128-CBC-SHA 008с
TLS-PSK-С-AES-256-CBC-SHA 008d
TLS-PSK-С-3DES-EDE-CBC-SHA 008b
TLS-RSA-С-AES-128-CBC-SHA256 003с
TLS-RSA-С-AES-256-CBC-SHA256 003d
TLS-RSA-С-AES-128-CBC-SHA 002f
TLS-RSA-С-AES-256-CBC-SHA 0035
TLS-ECDHE-RSA-С-AES-128-CBC-SHA c013
TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA c014
TLS-ECDHE-RSA-С-AES-128-CBC-SHA256 c027
TLS-ECDHE-RSA-С-AES-256-CBC-SHA384 c028

Теперь в этом примере доступны только наборы шифров: ФСК и ЮАР основанные. Конечно, я хотел бы использовать ЕС ciphersuites, но я не думаю, что это вариант для меня, учитывая список.

Теперь пара вопросов у меня есть:

  • Учитывая список наборов шифров, может ли любой из закрытых ключей (CA, Server или клиент) должны быть основаны на EC или все они должны быть RSA?

  • Должен ли я также сохранять отдельные пакеты MQTT, которые обернуты TLS, как можно меньше, или это то, что будет дополнено с дополнительными байтами? (например, будет ли иметь значение, если мой пакет всего 5 байт, или я могу свободно написать пакет размером 25 байт длинный)

  • О чем еще следует помнить, если я хочу уменьшить пропускную способность трафика?

  • Наборы шифров ECDHE-RSA вызывают у меня головную боль. Они используют EC для обмена ключами, но RSA для PKI? Означает ли это, что сервер может иметь закрытый ключ EC.

dave_thompson_085 avatar
флаг cn
Чтобы быть понятным для любого пакета, отличного от PSK, вы должны отправить сертификат сервера клиенту, а для ECDHE-RSA также подпись; client-auth является необязательным, но если он используется, вы также должны отправить сертификат клиента _and_ подпись на сервер. Генерируя свои собственные сертификаты с минимальным содержанием, для 2048-битного RSA вы можете получить каждый примерно до 700-800 байт. За исключением 1.3, которого нет в ваших комплектах, остальная часть стандартного рукопожатия, включая подпись клиента, может быть на 700-1000 байт больше. Вы можете передать много данных (столько же, сколько устройства вроде вашего) одним рукопожатием.
Рейтинг:1
флаг in

Учитывая список наборов шифров, может ли какой-либо из закрытых ключей (CA, сервер или клиент) быть основанным на EC или все они должны быть RSA?

Разумеется, не только RSA или предварительно разделенный симметричный секрет для TLS-PSK.

Обратите внимание, что для наборов шифров TLS-RSA ключ будет использоваться для инкапсуляции ключа, т. е. для использования ключа шифрования и наборов шифров TLS-ECDHE-RSA вам потребуется сертификат, который можно использовать для аутентификации объекта с использованием ключа для подписи. Часто оба бита устанавливаются для сертификатов, специфичных для TLS.

Должен ли я также сохранять как можно меньше отдельных пакетов MQTT, обернутых с помощью TLS, или это что-то, что будет дополнено дополнительными байтами? (например.будет ли иметь значение, будет ли мой пакет размером всего 5 байт или я могу свободно написать пакет длиной 25 байт)

AES будет шифровать до кратного 16 байтам, 3DES до кратного 8. 3DES по-прежнему достаточно безопасен, но его больше не следует использовать. К счастью, TLS использует 3 ключа 3DES, вот и все.

Наборы шифров ECDHE-RSA вызывают у меня головную боль. Они используют EC для обмена ключами, но RSA для PKI? Означает ли это, что сервер может иметь закрытый ключ EC.

Правильно, но E в ECDHE означает эфемерно-эфемерный Диффи-Хеллман. И клиент, и сервер (вероятно/надеюсь) будут генерировать новую пару ключей для каждого соединения. Генерация пары ключей для EC выполняется примерно так же быстро, как выполнение самого соглашения о ключах DH, но намного быстрее, чем генерация пары ключей RSA.

Эта пара ключей зависит от сеанса, и ее не нужно хранить, поэтому вам не нужно выполнять какое-либо управление ключами вокруг нее. Для аутентификации объекта используется только ключ RSA, поэтому закрытый ключ и сертификат делает нужно управлять.

dave_thompson_085 avatar
флаг cn
В дополнение к дополнению к границе блока для шифрования перечисленные наборы добавляют по крайней мере 20 байтов (некоторые 24 или 32) для HMAC, и все добавляют заголовок из 5 байтов (или 13 для DTLS, но это _удаляет_ TCP, что более чем компенсирует).
флаг my
Однако MQTT не использует DTLS? Только TLS через TCP, верно?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.