% Лекция 6 (27.10.23)

Третий шаг алгоритма всегда будет иметь конечную сложность. Так как множество
объектов не изменяется, то необходимо перебрать все последовательности различных
команд, а их конечное число.

Наибольшую трудоёмкость в общем случае представляет разработка алгоритма
построения <<развёрнутого>> состояния.

Однако для АМТМД или АКФМТМД такой алгоритм существует.

Пусть $\alpha$ и $\beta$ --- две различные команды системы МТМД, содержащие
примитивные операторы <<создать>>, \dots. Будем считать, что $\alpha < \beta \iff$
для некоторого дочернего типа команды $\alpha$ в графе создания найдётся путь
в некоторый родительский тип команды $\beta$.

В системе АМТМД отношение <<$<$>> на множестве команд, содержащих примитивные
операторы <<создать>>, \dots, является отношением строгого порядка

%% TODO
\textbf{Алгоритм 2.2} \emph{Алгоритм построения <<развёрнутого>> состояния для
системы АКФМТМД.}
\begin{enumerate}
  \item
    Упорядочить в списке все команды, содержащие примитивные операторы вида
    <<создать>>, \dots (команда $\alpha$ следует в списке перед командой $\beta
    \iff \alpha < \beta \; \lor$ $\alpha$ и $\beta$ не сравнимы).
  \item
    Начиная с начального состояния, применять команды в соответствии с созданным
    на шаге 1 списком, при этом каждая команда применяется со всеми возможными
    для неё наборами родительских объектов.
\end{enumerate}

%% NOTE: 2.4
\begin{theorem}
  Существует алгоритм проверки безопасности систем АМТМД.
\end{theorem}
%% NOTE: 2.2
\begin{corollary}
  Алгоритм проверки безопасности систем АМТМД имеет экспоненциальную сложность.
\end{corollary}

Для АМТМД, в которых каждая команда имеет не более трёх параметров, доказано,
что алгоритм проверки их безопасности имеет полиномиальную сложность.

%% NOTE: 2.3
\subsection{Модель распространения прав доступа Take-Grant}

\subsubsection{}

Классическая модель Take-Grant ориентирована на анализ путей распространения
прав доступа в системе дискреционного управления доступом.

Основными элементами модели Take-Grant являются:
\begin{itemize}
  \item $O$ --- множество объектов;
  \item $S \subseteq O$ --- множество субъектов;
  \item
    $R = \set{r_1, r_2, \dots, r_m} \cup \set{t, g}$ --- множество видов прав
    доступа, где $t$ (take) --- право брать права доступа, $g$ (grant) --- право
    давать права доступа;
  \item
    $G = (S, O, E)$ --- конечный помеченный ориентированный без петель граф
    доступов, описывающий состояние системы.
\end{itemize}

Элементы множеств $S$ и $O$ являются вершинами графа, которые обозначаются
$\otimes$ --- объекты (элементы множества $O - S$) и $\cdot$ --- субъекты
соответственно.

Элементы множества $E \subseteq O \times O \times R$ являются дугами графа.
Каждая дуга помечена непустым подмножеством множества видов прав доступа $R$.
Состояние системы описывается соответствующим ему графом доступов.

В отличие от подели ХРУ в модели Take-Grant возможно наличие прав доступов не
только у субъектов к объектам, но и у объектов к объектам.

Основная цель классической модели Take-Grant --- определение и обоснование
алгоритмически проверяемых условий проверки возможности утечки права доступа по
исходному графу доступов, соответствующего некоторому состоянию системы.

Порядок перехода системы модели Take-Grant из состояния в состояние определяется
правилами преобразования графа доступов, которые в классической модели носят
название де-юре правил.

Преобразование графа $G$ в граф $G'$ в результате выполнения правила $op$
обозначается через $G \vdash_{op} G'$.

В классической модели Take-Grant рассматриваются следующие четыре де-юре
правила преобразования графа, выполнение каждого из которых может быть
инициировано только субъектом, являющимся активной компонентой системы:
\begin{enumerate}
  \item
    $take$ --- брать права доступа (см. рис 2.1): субъект $x$ берёт у объекта
    $y$ права $\alpha$ на объект $z$;
    %% TODO: рис. 1
  \item
    $grant$ --- давать права доступа (см. рис. 2.2): субъект $x$ даёт объекту
    $y$ права $\alpha$ на объект $z$;
    %% TODO: рис. 2
  \item
    $create$ --- создать новый объект или субъект, при этом субъект создатель
    может взять на созданный субъект любые права доступа (по умолчанию
    предполагается, что создаётся объект, создание субъекта оговаривается особо)
    (см. рис. 2.3);
    %% TODO: рис. 3
  \item
    $remove$ --- удалять права доступа (см. рис. 4): субъект $x$ удаляет из
    своих прав доступа на объект $y$ набор прав $\alpha$.
    %% TODO: рис. 4
\end{enumerate}

%% TODO: нумерация
В таблице 2.3 приведены условия применения де-юре правил в исходном состоянии
$G = (S, O, E)$ и результаты их применения в результирующем состоянии
$G' = (S', O', E')$.

%% TODO: таблица 2.3 --- Де-юре правила классической модели Take-Grant
Правила | Исходное состояние $G = (S, O, E)$ | Результирующее состояние $G' = (S', O', E')$
$take(\alpha, x, y, z)$ | $x \in S, \; y, z \in O, \; (x, y, \set{t}) \subset E, \; (y, z, \beta) \subset E, \; x \neq z, \; \alpha \subseteq \beta$ | $S' = S, O' = O, E'= E \cup \set{(x, z, \alpha)}$

\begin{itemize}
  \item $grant(\alpha, x, y, z)$
  \item
    $x \in S, \; y, z \in O, \; (x, y, \set{g}) \subset E, \; (x, z, \beta)
    \subset E, \; y \neq z, \; \alpha \subseteq \beta$
  \item $S' = S, O' = O, E'= E \cup \set{(y, z, \alpha)}$
\end{itemize}
\begin{itemize}
  \item $create(\beta, x, y)$
  \item $x \in S, \; y \not\in O, \beta \neq \varnothing$
  \item $O' = O \cup \set{y}$, если $y$ субъект, то $S' = S \cup \set{y}$,
    иначе $S' = S, \; E' = E \cup \set{(x, y, \beta)}$
\end{itemize}
\begin{itemize}
  \item $remove(\alpha, x, y)$
  \item $x \in S, \; y \in O, \; (x, y, \beta) \subset E, \; \alpha \subseteq \beta$
  \item $S' = S, \; O' = O, \; E' = E - \set{(x, y, \alpha)}$
\end{itemize}

Рассмотрим условия, при которых в системе возможно распространение прав доступа.

Пусть дан граф доступов $G_0 = (S_0, O_0, E_0), \; x, y \in O_0, \; x \neq y, \;
\alpha \subseteq R$. Определим предикат $\fn{can_share}(\alpha, x, y, G_0)$,
который будет истинным $\iff \exists G_1 = (S_1, O_1, E_1), \dots, G_N = (S_N,
O_N, E_N)$ и правила $op_1, \dots, op_N, \; N \geq 0 : G_0 \vdash_{op_1} G_1
\vdash_{op_2} \dots \vdash_{op_N} G_N \land (x, y, \alpha \subset E_N$.

Определение истинности предиката $\fn{can_share}(\alpha, x, y, G_0)$
непосредственно по определению является в общем случае алгоритмически
неразрешимой задачей, так как требует проверки всех траекторий функционирования
системы.

По этой причине для проверки истинности предиката $\fn{can_share}(\alpha, x, y,
G_0)$ следует определить необходимые и достаточные условия, проверка которых
возможна. Решение этой задачи будет выполнено в два этапа:
\begin{enumerate}
  \item %% TODO: дописать
  \item Определены и обоснованы условия истинности предиката для произвольных
    графов.
\end{enumerate}

Пусть $G = (S, S, E)$ --- граф доступов, все вершины которого являются субъектами.
Говорят, что вершины графа доступов являются $tg$-связными или что они соединены 
$tg$-путём, когда, без учёта направления рёбер, в графе между ними существует
путь такой, что каждое ребро этого пути помечено $t$ или $g$.

\begin{theorem}
  Пусть $G_0 = (S_0, O_0, E_0)$ --- граф доступов, содержащий только вершины
  субъекты, $x, y \in S_0, \; x \neq y$.

  Тогда предикат $\fn{can_share}(\alpha, x, y, G_0)$ истинен $\iff$ выполняются
  следующие два условия:
  \begin{enumerate}
    \item
      существуют субъекты $s_1, \dots, s_m \subset S_0 : (s_i, y, \gamma_i)
      \subset E_0$, где $i = 1, \dots, m$ и $\alpha = \gamma_1 \cup \dots \cup
      \gamma_m$;
  \end{enumerate}
\end{theorem}

%% TODO: дописать
