Здравствуйте!
Разрабатывается серверная часть мобильного приложения на .net и возник вопрос: как бы так надежно шифровать пользовательские данные на сервере, чтобы расшифровать их никто кроме сервера (в идеале) не смог? То есть если админ получает доступ к серверу, который работает с хранилищем, не смог получить расшифрованные данные и чтобы разработчик, получив дампы из хранилища так же не смог их расшифровать?
Ну и совсем уж прекрасно будет, если эти двое, вступив в сговор, не смогут расшифровать дамп из хранилища никаким образом.
Я так понимаю, для этого ключ шифрования придется хранить на каком-то другом сервере (3d-party), плюс настраивать аутентификацию сервера (вероятно по сертификату).
Сервер представляет собой виртуалку, так что никакую железку воткнуть в него, к сожалению, нельзя.
ну, например, генерить закрытый ключ на основе пароля. для авторизации использовать не пароль в открытом виде, а подпись токена (прилетевшего с сервера) закрытым ключом. сервер проверит подпись - убедится, что открытый ключ соответствует пользователю - авторизует.
правильно. эппл в таком случае делает резервный доступ через 3-секретных-вопроса-3-ответа как второй ключ (и шифрует на 2 сразу данные) - если я правильно понял как у них FileVault2 устроен (там как раз шифрование на пароль пользователя + recovery key, который хранится в эппле, но зашифрован на секретные ответы)