Мы разрабатываем систему базы данных для хранения зашифрованных строк информации, при этом шифрование и дешифрование выполняются на стороне клиента с использованием криптографии с открытым ключом. Однако, если ключ когда-либо был изменен, это потребовало бы повторного шифрования всех записей на стороне клиента, что очень непрактично. Можно ли каким-либо образом выполнить это на стороне сервера, не раскрывая ни исходный (старый) ключ дешифрования, ни текст сообщения?
Я предполагаю, что мне нужен ассоциативный шифр, что-то вроде этого:
T( Eo(m) ) = En( Do(Eo(m) ))
где Eo(m) — зашифрованный текст, Eo/Do — старая пара ключей pub/priv, En — новый ключ pub, m — текст сообщения и T — волшебная функция повторного шифрования. Редактировать: T вычисляется на стороне клиента, а затем отправляется на сервер для использования.