% Лекция 4 (13.10.23)

\subsection{Модель типизированной матрицы доступов}

Дискреционная модель, получившая название <<типизированная матрица доступов>>
(ТМД), представляет собой развитие модели ХРУ, дополненной концепцией типов,
что позволяет несколько смягчить те условия, для которых возможно доказательство
безопасности системы.

Формальное описание модели включает в себя следующие элементы:
\begin{itemize}
  \item $O$ --- множество объектов системы;
  \item $S$ --- множество субъектов системы ($S \subseteq O$);
  \item $R$ --- множество прав доступа субъектов к объектам;
  \item $M$ --- матрица доступов;
  \item $C$ --- множество команд;
  \item $T$ --- множество типов объектов;
  \item $t: O \to T$ --- функция, ставящая в соответствие каждому объекту его тип;
  \item $q = (S, O, t, M)$ --- состояние системы;
  \item $Q$ --- множество состояний системы.
\end{itemize}

Состояния системы изменяются в результате применения к ним команд множества $C$.

\begin{align*}
  comm&and c(x_1 : t_1, \dots, x_k : t_k) \\
      &if (r_1 \in M[x_{s_1}, x_{o_1} and \dots and r_m \in M[x_{s_m}, x_{o_m}]) then \\
      &   a_1; \\
      &   \dots \\
      &   a_n; \\
      &endif \\
  &  end.
\end{align*}

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

В модели ТМД используются 6 видов примитивных операторов, отличающихся от
аналогичных операторов модели ХРУ только использованием типизированных
параметров.

%% TODO: таблица
Примитивный оператор / Исходное состояние $q = (S, O, t, M)$ / Результирующее состояние $q' = (S', O', t', M')$
<<внести>> право $r$ в $M[s, o]$ / $s \in S, o \in O, r \in R$ / $S' = S, O' = O, t' = t, M'[s, o] = M[s, o] \cup \set{r}$, если $(s', o') \neq (s, o)$, то $M'[s', o'] = M[s', o']$.
<<удалить>> право $r$ из $M[s, o]$ / $s \in S, o \in O, r \in R$ / $S' = S, O' = O, t' = t, M'[s, o] = M[s, o] - \set{r}$, если $(s', o') \neq (s, o)$, то $M'[s', o'] = M[s', o']$.
<<создать>> субъект $s'$ с типом $t_s$ / $s' \not\in O$ / $S' = S \cup \set{s'}, O' = O \cup \set{s'}$, если $o \in O$, то $t'(o) = t(o), t'(s') = t_s$, если $(s, o) \in S \times O$, то $M'[s, o] = M[s, o]$, если $o \in O'$, то $M'[s', o] = \varempty$, если $s \in S'$, то $M'[s, s'] = \varempty$.
<<создать>> объект $o'$ с типом $t_o$ / $o' \not\in O$ / $S' = S, O' = O \cup \set{o'}$, если $o \in O$, то $t'(o) = t(o), t'(o') = t_o$, если $(s, o) \in S \times O$, то $M'[s, o] = M[s, o]$, если $s \in S'$, то $M'[s, o'] = \varempty$.
<<уничтожить>> субъект $s'$ / $s' \in O$ / $S' = S - \set{s'}, O' = O - \set{s'}$, если $o \in O$, то $t'(o) = t(o)$, если $(s, o) \in S' \times O'$, то $M'[s, o] = M[s, o]$.
<<уничтожить>> объект $o'$ / $o' \in O, o' \in S$ / $S' = S, O' = O - \set{o'}$, если $o \in O'$, то $t'(o) = t(o)$, если $(s, o) \in S' \times O'$, то $M'[s, o] = M[s, o]$.

Таким образом, ТМД является обобщением модели ХРУ, которую можно рассматривать
как частный случай ТМД с одним единственным типом для всех субъектов и объектов.

С другой стороны, любую ТМД можно выразить через систему ХРУ, введя для
обозначения типов специальные права доступа, а проверку типов в командах
заменив проверкой наличия соответствующих прав доступа.

Пусть $c(x_1 : t_1, \dots, x_k : t_k)$ --- некоторая команда системы ТМД. Будем
говорить, что $x_i$ является \emph{дочерним параметром}, а $t_i$ является
\emph{дочерним типом} в $c(x_1 : t_1, \dots, x_k : t_k)$, где $1 \leq i \leq k$,
в случае, когда в ней имеется один из следующих примитивных операторов:
\begin{itemize}
  \item <<создать>> субъект $x_i$ с типом $t_i$;
  \item <<создать>> объект $x_i$ с типом $t_i$.
\end{itemize}

В противном случае будем говорить, что $x_i$ является \emph{родительским
параметром}, а $t_i$ является \emph{родительским типом} в команде
$c(x_1 : t_1, \dots, x_k : t_k)$.

Заметим, что в одной команде тип может быть одновременно и родительским и
дочерним.

Например,
\begin{align*}
  &command foo(s_1: u, s_2: u, s_3: v, o_1: w, o_2: b) \\
  &   \text{<<создать>> субъект } s_2 \text{с типом } u; \\
  &   \text{<<создать>> объект } s_3 \text{с типом } v; \\
  &end.
\end{align*}

Здесь $u$ является


\emph{Система монотонной ТМД} (МТМД) --- система ТМД, в командах которой
отсутствуют немонотонные примитивные операторы вида <<удалить>> и
<<уничтожить>>.

\emph{Каноническая форма системы МТМД} (КФМТМД) --- система МТМД, в которой
команды, содержащие примитивные операторы вида <<создать>>, не содержат
условий и примитивных операторов вида <<внести>>.

\begin{theorem} %% NOTE: 2.3
  Для каждой системы МТМД существует эквивалентная ей система КФМТМД.
\end{theorem}
\begin{proof}
  Пусть задана система МТМД, в которой определены множества $R, T, Q, C$.
  Построим эквивалентную ей систему КФМТМД, определив множества $R^*, T^*,
  Q^*, C^*$.

  Зададим множества
  \begin{align*}
    R^* &= R \cup \set{active}; \\
    T^* &= T \cup \set{t_{active}}.
  \end{align*}

  В каждом состоянии $q^* = (S^*, O^*, t^*, M^*)$, соответствующем состоянию
  $q = (S, O, t, M)$, справедливы равенства:
  \begin{align*}
    S^* &= S \cup \set{s_{active}}; \\
    O^* &= O \cup \set{s_{active}}.
  \end{align*}

  Пусть также для каждого $o \in O$ справедливо равенство $t^*(o) = t(o)$ и
  $s_{active}$ --- единственный объект такой, что $t^*(s_{active}) = t_{active}$.

  Кроме того, для $s \in S, o \in O$ справедливо равенство $M^*[s, o] = M[s, o]$,
  и в начальном состоянии $q_0^* = (S_0^*, O_0^*, t_0^*, M_0^*)$ системы КФМТМД
  для $o \in O_0$ справедливо равенство $M_0^*[s_{active}, o] = \set{active}$.

  Таким образом, право доступа $active$ обозначает активизированные субъекты и объекты
  КФМТМД.

  Каждую команду $c(x_1: t_1, \dots, x_k: t_k) \in C$ системы МТМД, не содержащую
  примитивные операторы <<создать>>, представим командой $c(x_1: t_1, \dots, x_k:
  t_k, x: active)$ системы КФМТМД, полученной из исходной команды добавлением
  условий проверки $active \in M[x, x_i], i = 1, \dots, k$.

  Каждую команду $c(x_1: t_1, \dots, x_k: t_k)$ системы МТМД, содержащую
  примитивные операторы <<создать>>, представим монотонными командами КФМТМД:
  \begin{itemize}
    \item
      $c'_{x_i}(x_{j_1}: t_{j_1}, \dots x_{j_m}: t_{j_m})$ --- команды без
      проверки условий, каждая из которых соответствуют одному дочернему
      параметру $x_i$ команды $c(x_1: t_1, \dots, x_k: t_k)$, содержит все её
      родительские параметры и параметр $x_i$ и содержит соответствующий
      примитивный оператор вида <<создать>>;
    \item
      $c''(x_1: t_1, \dots, t_k: t_k, x: t_{active})$ --- команда, содержащая
      условия и примитивные операторы <<внести>> команды $c(x_1: t_1, \dots,
      x_k: t_k)$, условия проверки $active \in M[x, x_i]$, для всех
      родительских параметров $x_i$, примитивные операторы <<внести>> право
      $active$ в $M[x, x_i]$ для всех дочерних параметров $x_i$.
  \end{itemize}

  Таким образом, только <<активизированные>> объекты (в том числе и субъекты)
  системы КФМТМД соответствуют объектам системы МТМД, а все преобразования над
  ними в системе КФМТМД, соответствуют преобразованиям системы МТМД.
\end{proof}

\emph{Граф создания системы МТМД} --- ориентированный граф с множеством вершин
$T$, в котором дуга от вершина $u$ к вершине $v$ существует $\iff$ в системе
имеется команда, в которой $u$ является родительским типом, а $v$ --- дочерним
типом.

Система МТМД (КФ МТМД) называется \emph{ациклической} (АМТМД или, соответственно,
АКФМТМД) $\iff$ её граф создания не содержит циклов; в противном случае система
является \emph{циклической}.
