Учитывая список наборов шифров, может ли какой-либо из закрытых ключей (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, поэтому закрытый ключ и сертификат делает нужно управлять.