% Лекция 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{циклической}.