Я непрофессионал, пытающийся углубить свое понимание криптографии и обмена личными сообщениями, создав (доказательство концепции) централизованную сквозную зашифрованную «платформу» обмена сообщениями.
Сообщения отправляются устройствами на «сервер» (работающий на моем Pi внутри моей домашней сети), где они хранятся и откуда получатели могут получить их через вызов API. Сервер знает только самый минимум для правильного распределения сообщений, в то время как текст сообщения зашифрован, а все сообщение правильно подписано.
Теперь я столкнулся со следующей проблемой: я хочу переименовать свойство формата сообщения, используемого клиентскими приложениями (например, JSON: message.body – message.content). Теперь проблема заключается в том, что (1) все предыдущие сообщения хранятся на сервере в старом формате и (2) «старый» клиент может попытаться отправить сообщение «новому» клиенту, что вынуждает меня как-то разрешить это несоответствие между форматы передаваемых сообщений.
Если бы закрытые ключи были доступны серверу, это было бы тривиальной проблемой: просто преобразовать сообщение в ожидаемый формат сообщения получателя. Но поскольку я пытаюсь быть по-настоящему закрытым, а закрытые ключи известны только их владельцам, это не вариант. Сообщения не могут быть изменены сервером.
Я чувствую, что в основе этой проблемы лежит более фундаментальная задача, решения которой, я уверен, придумали люди гораздо более способные, чем я, и для которых существуют стандартизированные подходы. Таким образом вот мой вопрос: Как в целом решения e2ee для обмена сообщениями (например, сигнальные, матричные) обрабатывают изменения в структуре зашифрованных данных? Какие существуют подходы, кроме обрезания старых версий и выбрасывания всей истории сообщений?
Прошу прощения, если этот вопрос звучит расплывчато или слишком широко. Я просто нуб, пытающийся получить общую картину.
Большое спасибо.