Криптоконтейнер

Криптоконтейнер позволяет пользовательскому приложению хранить информацию в защищенном виде и тем самым предотвращает неавторизованный доступ нарушителя, получившего доступ к основному хранилищу, файловой системе устройства. Цель достигается шифрованием данных с использованием криптографических алгоритмов. Авторизация доступа к сохраненной информации происходит с использованием пароля. Подробнее…

Шина: системная
Служба: ru.omprussia.sstore
Объект: /ru/omprussia/sstore
Интерфейс: ru.omprussia.sstore

Методы

  • Exists(bool &result)
  • Create(const string &password, int &result)
  • Open(const string &password, int &result, string &resultstring)
  • Close()
  • Delete()
  • Recrypt(const string &oldpassword, const string &newpassword, int &result)

Подробное описание

Каждый контейнер принадлежит одному конкретному приложению, не более одного контейнера на приложение. Контейнер монтируется в файловую систему, доступную только для приложения, как директория, расположенная по заданному пути: /run/user/{uid пользователя}/sstore/{имя приложения}/.

Система сохраняет хеши всех паролей, которые были ранее использованы для шифрования контейнеров на данном устройстве, и требует, чтобы новые пароли не совпадали со старыми. Если пароль шифрования контейнера был задан более года назад, система потребует сменить пароль шифрования, в этом случае нельзя будет вызывать метод Open до тех пор, пока не будет использован метод Recrypt для смены пароля на новый, ранее не использованный. Пароли должны иметь длину не менее 6 символов.

Используемые в качестве возвращаемых значений результатов выполнения методов константы SSTORE_* определены следующим образом:

enum SSTORE_CODE {
    SSTORE_OK = 0,
    SSTORE_EMPTY_CONTAINER,
    SSTORE_INCORRECT_PASSWORD,
    SSTORE_EXPIRED_PASSWORD,
    SSTORE_REPEATED_PASSWORD,
    SSTORE_ALREADY_OPENED,
    SSTORE_CONTAINER_BUSY,
    SSTORE_INVALID_NEW_PASSWORD,
    SSTORE_CONTAINER_EXISTS
};

Описание методов

Exists(bool &result)

Возвращает result: * false, если контейнер не существует; * true, если контейнер существует.

Create(const string &password, int &result)

Метод проверяет, что:

  • длина пароля не менее 6 символов;
  • пароль ранее не был использован на данном устройстве для создания контейнеров;
  • контейнер ещё не существует для данного приложения.

Если результат всех проверок положительный, метод создаёт контейнер и сохраняет информацию о нём в конфигурационном файле /home/sstore/.securefs.json.

Возможные значения возвращаемого аргумента result:

  • SSTORE_INVALID_NEW_PASSWORD — длина пароля меньше 6 символов;
  • SSTORE_CONTAINER_EXISTS — контейнер уже существует;
  • SSTORE_REPEATED_PASSWORD — пароль ранее был использован на устройстве для создания контейнера;
  • SSTORE_OK — контейнер успешно создан.
Open(const string &password, int &result, string &resultstring)

Монтирует контейнер, как файловую систему.

Возможные значения возвращаемых аргументов result и resultstring:

  • SSTORE_ALREADY_OPENED, "Already mounted" — контейнер уже смонтирован;
  • SSTORE_EMPTY_CONTAINER, "Container empty" — контейнер пуст;
  • SSTORE_EXPIRED_PASSWORD, "" — пароль был задан более года назад;
  • SSTORE_INCORRECT_PASSWORD, "" — пароль неверный;
  • SSTORE_OK, "{путь}" — успешное завершение, содержимое контейнера смонтировано в директорию по указанному {пути}.
Close()

Демонтирует файловую систему контейнера.

Delete(int &result)

Удаляет демонтированный контейнер приложения.

Возможные значения возвращаемого аргумента result:

  • SSTORE_ALREADY_OPENED — контейнер смонтирован, требуется демонтировать перед удалением;
  • SSTORE_OK — успешное завершение, контейнер удалён.
Recrypt(const string &oldpassword, const string &newpassword, int &result)

Дешифрует содержимое контейнера текущим паролем oldpassword и заново шифрует его с новым паролем newpassword.

Возможные значения возвращаемого аргумента result:

  • SSTORE_ALREADY_OPENED — контейнер смонтирован, требуется демонтировать перед заменой пароля;
  • SSTORE_INVALID_NEW_PASSWORD — длина нового пароля менее 6 символов;
  • SSTORE_INCORRECT_PASSWORD — указаный старый пароль неверен;
  • SSTORE_REPEATED_PASSWORD — указаный новый пароль был ранее использован на данном устройстве;
  • SSTORE_OK — успешное завершение, контейнер зашифрован новым паролем.