Является ли значение результата sha1 «скоростью» комбинации ctr + hmac sha1, потому что это узкое место, или мне нужно вычесть эти два значения, чтобы получить объединенную скорость ctr + hmac sha1?
Прежде всего, вам следует использовать AES-CBC, чтобы убедиться, что вы используете правильную комбинацию алгоритмов. AES-CBC намного медленнее, чем AES-CTR на моей машине. Вероятно, это связано с буферизацией; можно предварительно вычислить большие части ключевого потока для AES-CTR.
Пакеты TLS обычно имеют размер около 1,5 КБ, поэтому в качестве лучшего индикатора можно использовать блоки по 1024 байта. Я провел тест скорости с помощью SHA-1, AES-CBC, а также AES-GCM.
Итак, давайте использовать следующие значения:
SHA-1 (представляющий HMAC-SHA-1): 1467708 кБ/с
AES-CBC: 1330523 кБ/с
AES-GCM: 3346640 к
Вместо ГБ/с вы действительно должны смотреть на нс на кБ, таким образом вы можете сложить время обработки вместе, а затем вычислить его обратно в ГБ/с, как хотите.
Теперь мы можем рассчитать скорость SHA-1 + CBC, выполнив:
$$T_{SHA-1\&CBC} = {1 \over {1 \over T_{SHA-1}} + {1 \over T_{AES-CBC}}}$$
куда $Т$ скорость передачи в байтах в секунду.
В результате получится следующее значение: 697876 КБ/с для SHA-1 + AES-CBC.Это означает, что AES-GCM примерно в 4,8 раза быстрее, чем SHA-1 + AES-CBC для обычной реализации без потоков. Это при условии, что HMAC имеет ту же скорость, что и SHA-1 (что примерно верно по всей вероятности, даже несмотря на то, что ему приходится обрабатывать немного больше данных).