Как работает синхронизация, когда сервер ничего не может прочитать
Синхронизировать зашифрованные данные между устройствами сложнее, чем кажется. Заглядываем под капот: разрешение конфликтов, оплоги и почему телефон остаётся быстрым.
Как работает синхронизация, когда сервер ничего не может прочитать
Синхронизировать зашифрованные данные между устройствами сложнее, чем кажется. Заглядываем под капот: разрешение конфликтов, оплоги и почему телефон остаётся быстрым.
Синхронизацию никто не замечает, пока она не сломается. Делать её поверх зашифрованных данных, когда сервер не может подсмотреть, чтобы разрешить конфликты, требует аккуратности.
Оплог
Каждое изменение — это зашифрованная операция, добавляемая только в конец. Устройства догоняют, запрашивая всё начиная с своего последнего известного id.
device A: ops 1..40
device B: ops 1..38 -> fetch 39, 40
Почему остаётся быстро
- Мы синхронизируем операции, а не целые записи
- Каждое устройство расшифровывает локально, в фоне
- Конфликты разрешаются детерминированным порядком, а не чтением содержимого сервером
Итог: изменения долетают за секунду-две, а сервер по-прежнему видит только шифротекст.