Я предполагаю, что когда вы говорите, что ключи шифрования не должны храниться на устройстве, вы действительно подразумеваете это :-) Потому что, если бы этого ограничения не было, вы могли бы использовать KeyStore . Однако это будет означать, что ключи хранятся на устройстве, что, кажется, не то, что вам нужно.
Итак, предполагая, что ключи шифрования являются внешними по отношению к устройству, это довольно просто, так как места для выбора не так много: ваше клиентское приложение просит пользователя ввести ключ шифрования каким-либо образом (до вас), который он использует для шифрования данных, а затем немедленно забывает ключ шифрования.
Затем он отправляет зашифрованные данные на сервер, где они хранятся. Сервер не знает ключей шифрования, поэтому для сервера это просто непрозрачный блок данных.
Когда пользователь хочет получить данные, он должен предоставить ключ дешифрования на месте, поскольку он не хранится на устройстве.