В основном вы воссоздаете SSL / TLS .Это подразумевает обычные предостережения о построении вашего собственного протокола, и вам настоятельно рекомендуется использовать TLS с существующей библиотекой вместо того, чтобы переписывать свою собственную.
При этом используется AES с CBC для шифрования и HMAC для целостностиэто звук.Существуют комбинированные режимы шифрования + целостности (о которых вы знаете), и CBC + HMAC является своего рода «старой школой», но это не может повредить.Вы делаете все «одобренным наукой» способом: зашифруйте, затем MAC зашифруйте зашифрованную строку (и вы не забудете IV: забывание IV - это классическая ошибка).
Ваш ключ может быть несколько слабым.Идеально, если SHA-256 ведет себя как идеальный случайный оракул, но известно, что SHA-256 не ведет себя как случайный оракул (из-за так называемой атаки с удлинением длины).Это похоже на причину, по которой HMAC является HMAC, с двумя вложенными вызовами хеш-функций вместо простого хеширования (один раз) конкатенации ключа MAC и данных.TLS использует специальную функцию вывода ключа (которая в спецификации TLS называется «PRF»), которая должна избегать каких-либо проблем.Эта функция построена на основе SHA-256 (на самом деле, на основе HMAC / SHA-256) и может быть реализована на основе любой типичной реализации SHA-256.
(я не говорю, что знаю, как атаковать ваш вывод ключа)процесс, только то, что это сложно сделать должным образом, и что его безопасность может быть оценена только после нескольких лет тщательного изучения со стороны сотен криптографов. Именно поэтому повторное использование функций и протоколов, которые уже были тщательно изучены, в основном является хорошей идеей.)
В TLS существует два одноразовых номера, называемых «случайным клиентом» и «случайным сервером».В вашем предложении у вас есть только «случайный клиент».Что вы теряете здесь, с точки зрения безопасности, неясно.Осторожной стратегией было бы включение случайного сервера (то есть другого одноразового номера, выбранного Бобом).Мы должны избегать того, когда Алиса и Боб запускают протокол в обоих направлениях, а злоумышленник передает сообщения от Алисы самой Алисе.Полный анализ того, что может сделать злоумышленник, сложен (это целая ветвь криптографии);Вообще говоря, одноразовые номера в обоих направлениях имеют тенденцию избегать некоторых проблем.
Если вы отправляете несколько пакетов, у вас могут возникнуть проблемы с потерянными пакетами, дублированными пакетами («атаками воспроизведения») и пакетами, поступающими не в порядке,В контексте TLS это не должно "нормально" происходить, поскольку TLS используется на носителе, который уже обеспечивает (при нормальных условиях, не считая активных атак) передачу данных в строгом порядке.Таким образом, TLS включает порядковый номер в данные, которые поступают в MAC.Это позволит обнаружить любое изменение от злоумышленника, включая воспроизведение, потерянные записи и переупорядочение записей.Если возможно, вы также должны использовать порядковый номер.