- Возможно ли это (по-прежнему обеспечивать целостность при шифровании растрового изображения)?
Нет, ChaCha20 — это просто потоковый шифр, сам по себе он не обеспечивает целостность/аутентичность сообщения; не без существенной переделки - тогда и называлась бы она как-то иначе.
- Если да, то создает ли Ciphertext при расшифровке тот же файл Bitmap, что и PlaintText (оба имеют одинаковое значение контрольной суммы)?.
Да, если зашифрованный текст не изменен расшифровка по-прежнему обратна шифрованию. Шифры являются детерминированными и обратимыми при инициализации с правильным ключом (ключами).
Тег аутентификации (Poly1305) используется для определения того, был ли зашифрованный текст (или тег) изменен из-за повреждения (ошибки передачи, дефекты во время хранения) или из-за преднамеренной попытки злоумышленника. Не требуется поддерживать целостность, если не происходит никаких внешних изменений.
Поскольку ChaCha20 является потоковым шифром (не поддерживающим открытый текст), функция шифрования является обратной самой себе: она генерирует поток ключей, который затем подвергается операции XOR с открытым текстом для шифрования и с зашифрованным текстом для дешифрования.
Недостатком этого является то, что вы не можете просто поместить «шпаргалку» или известное значение в открытый текст, чтобы определить, было ли расшифрование успешным или нет - в основном любое значение в полученном открытом тексте может быть изменено по желанию путем изменения зашифрованного текста.
Довольно часто в файлах есть места, где можно скрыть информацию. Например, вы можете ознакомиться с Заголовок DIB или таблица цветов/профиль если вы хотите сохранить дополнительные байты, такие как тег аутентификации Poly1305.