Это немного из моей глубины, но ...
Да, изменение зашифрованных байтов зашифрованного сообщения AES должно привести к сбою дешифрования (это был мой опыт работы среализация c #).Клиент, который расшифровывает, узнает, что сообщение недействительно. РЕДАКТИРОВАТЬ: очевидно, это не так.Похоже, вам понадобится CRC или хеш, чтобы убедиться, что сообщение было успешно расшифровано.Более серьезная проблема - утечка секретного ключа AES (и в одноранговой среде ключ должен быть отправлен, чтобы получатель вообще мог расшифровать сообщение).Затем третья сторона может отправлять сообщения, как если бы они были законным клиентом, и они будут приняты как ОК.
Честность намного сложнее.Я не совсем уверен, насколько вы хотите, чтобы вещи были, но я подозреваю, что вы хотите использовать шифрование с открытым ключом .Это позволяет вам включить хэш сообщения (например, подпись или MAC) на основе закрытого ключа, чтобы подтвердить достоверность сообщения.Получатель использует открытый ключ для проверки хэша, и, таким образом, исходное сообщение в порядке.Основное преимущество шифрования с открытым ключом по сравнению с симметричным шифрованием, таким как AES, заключается в том, что вам не нужно отправлять закрытый ключ, только открытый ключ.Это делает намного труднее выдавать себя за клиента. SSL / TLS использует шифрование с открытым ключом.
В любом случае, когда вы определили клиента, отправляющего недопустимые сообщения, вы находитесь в мире принятия решения о довериитот клиент или нет.То есть происходит ли коррупция из-за вредоносного поведения (о чем вы беспокоитесь)?Или ошибочная реализация клиента (некомпетентность)?Или неисправный канал связи?И именно здесь шифрование (или, по крайней мере, мои знания об этом) вам больше не помогут!
Дополнительная информация о целостности:
Если вы предполагаете, что никто другой не имеет доступа кВаш секретный ключ, CRC, хеш или HMAC будет достаточно для того, чтобы вы обнаружили изменения.Просто возьмите текст вашего сообщения, вычислите CRC, хеш, что угодно и добавьте в качестве нижнего колонтитула.Если при расшифровке хэш не совпадает, сообщение было изменено.
Предположение, что секретный ключ остается секретным, вполне разумно.Особенно если после некоторого количества сообщений вы генерируете новые.SSH и WPA Wi-Fi периодически генерируют новые ключи.
Если вы не можете предположить, что секретный ключ является секретным, то вам нужно пойти в PKI, чтобы подписать сообщение.С ключом AES злонамеренной третьей стороны они будут просто генерировать любые сообщения с ключом, которые они хотят.
Может быть некоторое расстояние, включая порядковый номер в ваше сообщение, основанное на ГСЧ.Если вы используете один и тот же RNG и одинаковое начальное число для обеих сторон, они должны быть в состоянии предсказать, какой порядковый номер будет следующим.Сторонней организации потребуется перехватить исходное начальное число и узнать, сколько сообщений было отправлено для отправки действительных, но поддельных сообщений.(Это предполагает, что никакие сообщения никогда не могут быть потеряны или отброшены.)