Я провел некоторое исследование по этой теме, но не смог найти ничего похожего на мой вопрос. Поэтому я надеюсь, что некоторые из вас, отличные парни, могут мне помочь.Шифрование AES и необходимость Integrity
Я хочу использовать шифрование AES128 (режим CFB) для сети в моем приложении между двумя отдельными клиентами. Обмениваемые данные состоят только из текстовых строк определенной структуры, например, первые байты всегда сообщают получателю вид сообщения, которое они получают, поэтому они могут обрабатывать их. С AES я хочу обеспечить конфиденциальность сообщения, но теперь возникает вопрос о «целостности».
Нормальный, который вы бы рассмотрели, используя MAC. Но разве не гарантировано, что никто не изменил сообщение, если получатель может его дешифровать правильно, то есть, что сообщение может быть правильно использовано в его приложении из-за формата строки? Не изменил бы (даже 1 бит) зашифрованное сообщение третьим лицом в результате мусора во время дешифрования?
Кроме того, предположим, что приложение представляет собой многопользовательскую одноранговую игру, в которой два игрока взаимодействуют друг с другом на частном, но AES-зашифрованном канале. Теперь создатель сообщения не играет честную и намеренно отправляет мошенническое зашифрованное сообщение, чтобы передать впечатление, что сообщение было изменено случайным третьим лицом (чтобы заставить игрока выйти). Теперь у получателя не будет возможности определить, было ли изменено сообщение или если отправитель действует мошеннически, я прав? Таким образом, честность не была бы очень полезной в такой ситуации, и ее можно было бы пренебречь?
Это может показаться странным и необычным примером. Но это то, что я недавно встречал в аналогичном приложении, и я спрашиваю себя, есть ли решение проблемы или если я получил базовую идею шифрования AES.
Спасибо. Итак, если кто-то изменит, например, последние несколько бит сообщения, первая часть расшифрует правильность, а часть после изменения приведет к тарабарщине? Было бы неплохо использовать секрет между двумя сторонами вместо этого и вычислить с помощью PBKDF2 два разных ключа, поэтому можно использовать для шифрования и для MAC? У меня не было бы шанса отличить измененные сообщения от мошеннического поведения, но по крайней мере я всегда могу обнаружить изменения. Что касается последней части: на данный момент я просто предполагаю, что ключ/секрет уже обмениваются надежно. – Fenriswolf
PBKDF2 слишком тяжелый для этого. Если у вас уже есть секретный ключ, вы можете также зашифровать некоторое значение счетчика для каждого или, что бы я предпочли, - вычислить хэш с минимальным количеством бит для ключа. Вход хеша будет конкатенацией секретного и 4-байтового счетчика (большой эндиан). Например. SHA-1 ( | 00000001) для первого 16-байтового ключа и SHA-256 ( | 00000002) для второго 32-байтового ключа. –