Я делаю веб-приложение для заметок , которое непрерывно сохраняет заметки при вводе. Я отправляю diff, чтобы предотвратить отправку слишком большого количества данных по проводам, что прекрасно работает, когда заметка представляет собой простой текст.
Однако я добавляю поддержку зашифрованных заметок, так что заметки покидают браузер только в зашифрованном виде (так что заметки могут содержать конфиденциальную информацию без шансов того, кто не знает парольную фразу (которая также никогда не покидает браузер) читая их, даже не один с полным доступом к базе данных). Однако все изменения в заметках в настоящее время полностью изменяют зашифрованный текст, поэтому мне приходится отправлять всю заметку обратно на сервер каждую секунду или две во время ее редактирования.
Основываясь на моем недавнем чтении, я мог (но не должен) использовать режим шифрования ECB-блочный шифр , который разбивает открытый текст на 16-байтовые блоки и шифрует их независимо. Это будет означать, что различие будет работать, если редактирование происходило в конце (или если редактирование добавляло или удаляло кратное 16 байт). Но любые изменения, которые происходят в середине заметки, влияют на зашифрованный текст для остальной части заметки.
Итак, когда я лежал в постели прошлой ночью, я начал задаваться вопросом, существует ли алгоритм шифрования «скользящий блок», который шифрует каждую часть заметки на основе символов вокруг нее, так что изменение / добавление / удаление любого одного символа только изменил бы 16 окружающих байтов. Надеюсь, это имеет смысл. По сути, я хочу алгоритм шифрования, чтобы небольшие изменения в открытом тексте вносили довольно небольшие изменения в зашифрованный текст.
Существует ли такой алгоритм? (Будет ли это другой режим работы блочного шифра, который можно использовать с AES, а не совершенно новый алгоритм? И как его безопасность будет сравниваться с более обычным режимом блочного шифра?)
Первоначально у меня был такой вопрос в виде JavaScript, потому что это то, чего я в конечном итоге хочу, но это, вероятно, немного.