% Лекция 10 (24.11.23) %% NOTE: 2.3 Устовия применения де-факто правил в исходном состоянии $G = (S, O, E \cup F)$ и результаты их применения в результирующем состоянии $G' = (S, O, E \cup F')$ приведены в таблице. %% TODO: таблица 1 - Де-факто правила расширенной модели Take-Grant \begin{table}[H] \smallsize \centering \caption{} \begin{tabular}{|c|p{6cm}|p{6cm}|} \hline Правило & Исходное состояние $G = (S, O, E \cup F)$ & Результирующее состояние $G' = (S, O, E \cup F')$ \\ \hline Первое правило & $x \in S; y \in O; (x, y, r) \in E \cup F$ & $F' = F \cup \set{(y, x, w), (x, y, r)}$ \\ \hline Второе правило & $x \in S; y \in O; (x, y, w) \in E \cup F$ & $F' = F \cup \set{(y, x, r), (x, y, w)}$ \\ \hline $\fn{spy}(x, y, z)$ & $x, y \in S; x \neq z; \set{(x, y, r), (y, z, r)} \subset E \cup F$ & $F' = F \cup \set{(x, z, r), (z, x, w)}$ \\ \hline $\fn{find}(x, y, z)$ & $x, y \in S; z \in O; x \neq z; \set{(x, y, w), (y, z, w)} \subset E \cup F$ & $F' = F \cup \set{(x, z, w), (z, x, r)}$ \\ \hline $\fn{post}(x, y, z)$ & $x, z \in S; y \in O; x \neq z; \set{(x, y, r), (z, y, w)} \subset E \cup F$ & $F' = F \cup \set{(x, z, r), (z, x, w)}$ \\ \hline $\fn{pass}(x, y, z)$ & $y \in S; x, z \in O; x \neq z; \set{(y, x, w), (y, z, r)} \subset E \cup F$ & $F' = F \cup \set{(x, z, r), (z, x, w)}$ \\ \hline \end{tabular} \end{table} Из определения де-факто правил следует, что для анализа информационных потоков достаточно рассматривать потоки одного вида: либо на чтение, либо на запись. Будем рассматривать только информационные потоки на запись. Будем предполагать, что при возникновении информационного потока не накладывается ограничений на кооперацию субъектов системы, участвующих в этом процессе. Пусть $x, y \in O_0$, $x \neq y$, --- различные объекты графа доступов и информационных потоков $G_0 = (S_0, O_0, E_0 \cup F_0)$. Определим предикат $\fn{can_write}(x, y, G_0)$, который будет истинным $\iff$ $\exists$ графы $G_1 = (S_1, O_1, E_1 \cup F_1), \dots, G_N = (S_N, O_N, E_N \cup F_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$ и $(x, y, w) \subset F_N$. %% NOTE: 2.8 \begin{theorem} Пусть $G_0 = (S_0, O_0, E_0 \cup F_0)$ --- граф доступов и информационных потоков, $x, y \in O_0$, $x \neq y$. Тогда предикат $\fn{can_write}(x, y, G_0)$ истинен $\iff$ существуют объекты $o_1, \dots, o_m \in O_0$, где $o_1 = x, o_m = y$, такие, что или $m = 2$ и $(x, y, w) \in F_0$, или для $i = 1, \dots, m - 1$ выполняется одно из трёх условий: \begin{enumerate} \item $o_i \in S_0$ и или истинен предикат $\fn{can_share}(\set{w}, o_i, o_{i + 1}, G_0)$, или $(o_i, o_{i + 1}, w) \in E_0 \cup F_0$; \item $o_{i + 1} \in S_0$ и или истинен предикат $\fn{can_share}(\set{r}, o_{i + 1}, o_i, G_0)$, или $(o_{i + 1}, o_i, r) \in E_0 \cup F_0$; \item $o_i, o_{i + 1} \in S_0$ и или истинен предикат $\fn{can_share}(\alpha, o_i, o_{i + 1}, G_0)$, или истинен предикат $\fn{cna_share}(\alpha, o_{i + 1}, o_i, G_0)$, где $\alpha \in \set{t, g}$, или существует объект $o_i' \in O_0$ такой, что либо истинны предикаты $\fn{can_share}(\set{t}, o_i, o_i', G_0)$, $\fn{can_share}(\set{g}, o_{i + 1}, o_i', G_0)$, либо истинны предикаты $\fn{can_share}(\set{g}, o_i, o_i', G_0)$, $\fn{can_share}(\set{t}, o_{i + 1}, o_i', G_0)$. \end{enumerate} \label{thm:2.8} \end{theorem} \paragraph{Алгоритм построения замыкания графа доступов и информационных потоков.} Для проверки истинности предиката $\fn{can_share}(\alpha, x, y, G_0)$ или $\fn{can_write}(x, y, G_0)$ для многих пар вершин неэффективно использовать алгоритмы проверки условий теорем \ref{thm:2.6}, \ref{thm:2.8}. Эффективнее применять алгоритмы, позволяющие осуществлять проверку истинности данных предикатов сразу для всех пар вершин. Такие алгоритмы реализуют преобразование графа доступов и информационных потоков в его замыкание. Пусть $G = (S, O, E \cup F)$ --- граф доступов и информационных потоков такой, что для каждого субъекта $s \in S$ существует объект $o \in O$ такой, что выполняется условие $(s, o, \set{t, g, r, w}) \in E$. \emph{Замыканием} (или \emph{де-факто замыканием}) графа $G$ называется граф доступов и информационных потоков $G^* = (S, O, E^* \cup F^*)$, полученный из $G$ применением последовательности правил take, grant и де-факто правил. При этом применение к графу $G^*$ указанных правил не приводит к появлению в нём новых дуг. $tg$-замыканием графа $G$ называется граф доступов и информационных потоков $G^{tg} = (S, O, E^{tg} \cup F)$, полученный из $G$ применением последовательности правил take или grant. При этом каждое ребро $(o_1, o_2, \alpha) \in E^{tg} - E$ имеет вид $(o_1, o_2, t)$ или $(o_1, o_2, g)$, и применение к графу $G^{tg}$ правил take или grant не приводит к появлению в нём новых дуг указанного вида. \emph{Де-юре замыканием} графа $G$ называется граф доступов и информационных потоков $G^\text{де-юре} = (S, O, E^\text{де-юре} \cup F)$, полученный из $G$ применением последовательности правил take или grant. При этом применение в графу $G^\text{де-юре}$ правил take или grant не приводит к появлению в нём новых дуг. Алгоритм построения замыкания графа доступов состоит из трёх этапов: \begin{enumerate} \item построение $tg$-замыкания; \item построение де-юре-замыкания; \item построение замыкания. \end{enumerate} Алгоритм построения $tg$-замыкания графа доступов и информационных потоков $G = (S, O, E \cup F)$.