From 33f336f26e932e9a48eab9f9c8b931de64476b01 Mon Sep 17 00:00:00 2001 From: VladenaDenisko <136357360+VladenaDenisko@users.noreply.github.com> Date: Wed, 14 Jun 2023 10:04:27 +0300 Subject: [PATCH 1/2] statistical.tex --- part/statistical.tex | 283 +++++++++++++++++++++++++++---------------- 1 file changed, 179 insertions(+), 104 deletions(-) diff --git a/part/statistical.tex b/part/statistical.tex index c836d62..d8f10b5 100644 --- a/part/statistical.tex +++ b/part/statistical.tex @@ -1,164 +1,239 @@ \section{Безопасность в статистических БД} -Инфы про статистические базы данных на русском языке мало и большая часть бредовая. Гуглите statistical database. Все источники будут на английском, переведено специально для вас. Источников несколько \cite{ComputerSecurity2008} \cite{IntroBD2014}, под конец была найдена статья, \cite{SDB1989} в которой есть вся собранная инфа, еще есть более свежий источник \cite{SDB1999}. +\subsection{Определение статистической базы данных} -\subsection{Общие сведения} -Определение статистической БД. Классификация статистических БД. Характеристики статистических БД. +Статистическая база данных — это специализированный тип базы данных, который разработан и оптимизирован для хранения и управления статистическими данными. Она представляет собой совокупность таблиц, где каждая таблица содержит переменные (столбцы), представляющие различные характеристики или атрибуты, и наблюдения (строки), представляющие отдельные единицы данных или объекты. Статистические базы данных часто содержат большие объемы данных, собранных из различных источников, таких как опросы, эксперименты, наблюдения и административные записи. Такие базы данных могут содержать разнообразные типы данных, включая числовые, категориальные, временные ряды и многие другие. Они могут быть созданы и использованы для различных целей, таких как проведение исследований, анализ данных, подготовка отчетов, прогнозирование и принятие решений. +\\ -\paragraph{Определение статистической БД} -Статистической (в приведенном здесь контексте) называется база данных, в которой допускаются запросы с обобщением данных (суммированием, вычислением среднего значения и т.д.), но не допускаются запросы по отношению к элементарным данным. Например, в статистической базе данных разрешается выдача запроса "Какова средняя зарплата программистов?", тогда как выдача запроса "Какова зарплата программиста Мэри?" запрещена. Например, в СУБД PostreSQL есть набор агрегирующих запросов для получения статистических данных. -Угрозой безопасности статистических баз данных является то, что с помощью логических заключений на основе результатов выполнения разрешенных запросов можно вывести ответ, который прямо может быть получен только с помощью запрещенного запроса. "Обобщенные значения содержат следы исходной информации, и она может быть восстановлена злоумышленником после соответствующей обработки этих обобщенных значений. Такой процесс называется логическим выводом конфиденциальной информации". -Практически для любой статистической базы данных может быть определен общий трекер (в отличие от множества индивидуальных трекеров). Общий трекер (general tracker) — это логическое выражение, которое может быть использовано для поиска ответа на любой запрещенный запрос, т.е. запрос, включающий недопустимое логическое выражение. (В противоположность этому индивидуальный трекер работает только на основе запросов, включающих конкретные запрещенные выражения) -Таким образом, для обеспечения безопасности конфиденциальных данных в статистической БД требуется поддерживать баланс между репрезентативностью хранимой информации и конфиденциальностью отдельных записей. +Примеры статистических баз данных включают базы данных, содержащие данные о населении, экономические данные, данные о заболеваемости, результаты опросов и т.д. Эти базы данных могут быть созданы и поддерживаться различными организациями, такими как статистические агентства, исследовательские институты, университеты и государственные учреждения. +\\ -\paragraph{Классификация статистических БД} -Классифицирует по следующим признакам: -\begin{itemize} +Статистические базы данных обычно имеют стандартизированную структуру и формат, чтобы обеспечить согласованность и удобство использования данных для статистического анализа. Они также могут включать механизмы для обновления данных, контроля качества данных и обеспечения конфиденциальности и безопасности информации. +\\ - \item Чисто статистическая база данных - обычная база данных со статистическим доступом - -Чисто статистическая база данных хранит только уже обработанные статистические данные. Примером может служить база данных переписи населения. -Обычная БД содержит отдельные записи. Кроме того, обычная база данных поддерживает набор статистических пользователей, которым разрешены только статистические запросы. Для этих пользователей совокупная статистика, основанная на базовых необработанных данных, генерируется в ответ на запрос пользователя или может быть предварительно вычислена и сохранена как часть базы данных. - - \item Оффлайн-Онлайн - -В онлайн-SDB (Statistical DataBase) существует прямое взаимодействие пользователя с данными в режиме реального времени через терминал. В автономной SDB пользователь не контролирует обработку данных и не знает, когда выполняется его запрос данных. В этом режиме методы защиты, отслеживающие поведение профилей пользователей, становятся более громоздкими. Методы компрометации, требующие большого количества запросов, также усложняются при работе в автономном режиме. +Основные характеристики статистических баз данных включают: +\begin{enumerate} + \item \textbf{Структуру данных:} статистические базы данных имеют четко определенную структуру, которая организует данные в таблицы, где каждая таблица представляет конкретную сущность данных или переменную. Структура включает поля (столбцы), представляющие различные атрибуты или характеристики, и записи (строки), представляющие отдельные экземпляры данных. + \item \textbf{Интеграцию данных:} статистические базы данных могут интегрировать данные из нескольких источников для создания комплексного набора данных для анализа. Этот процесс интеграции включает сопоставление и преобразование данных для обеспечения согласованности и совместимости. + \item \textbf{Качество данных:} обеспечение качества данных имеет важное значение в статистических базах данных. Они используют механизмы проверки данных, их очистки и стандартизации для минимизации ошибок, несогласованностей и пропущенных значений, которые могут повлиять на достоверность статистического анализа. + \item \textbf{Метаданные:} статистические базы данных часто включают метаданные, которые содержат информацию о данных, такую как определения переменных, источники данных, методы сбора данных и любые преобразования, примененные к данным. + \item \textbf{Политики безопасности и конфиденциальности:} статистические базы данных работают с конфиденциальными данными, такими как информация о персональных данных, банковские данные, бухгалтерские ведомости и подобными, и поэтому должны иметь меры безопасности для защиты конфиденциальности. Часто используются контроль доступа и методы анонимизации для обеспечения конфиденциальности данных. +\end{enumerate} - \item Статическая-Динамическая -Статическая база данных~--- это такая база данных, которая никогда не меняется после ее создания. Большинство баз данных переписи являются статическими. Всякий раз, когда создается новая версия базы данных, эта новая версия считается другой статической базой данных (в отличие от динамических баз дынных, которые могут изменяться непрерывно). Эта особенность может значительно усложнить проблему защиты статической БД, поскольку частые выпуски новых версий могут позволить злоумышленнику использовать различия между версиями различными способами, которые трудно предвидеть. Методы защиты путем возмущения данных (см. далее) могут не подходить для динамических СДБ, так как усилия по преобразованию исходного СДБ в возмущенный в режиме реального времени могут стать непомерными. +Статистические базы данных служат ценным ресурсом для исследователей, аналитиков и принимающих решения. Они позволяют выполнять различные статистические операции, такие как агрегирование, корреляция, регрессия и проверка гипотез, для выявления паттернов, взаимосвязей и тенденций в данных. +\\ - \item Централизованная-Децентрализованная +Статистические базы данных позволяют проводить анализ данных, отвечать на исследовательские вопросы и принимать информированные решения на основе фактов. Они являются основой для множества статистических исследований, позволяя исследователям изучать различные явления, разрабатывать статистические модели и предсказывать будущие события. +\\ -В централизованной SDB есть один объект базы данных. В децентрализованной (распределенной) SDB перекрывающиеся подмножества базы данных хранятся на различных узлах, соединенных коммуникационной сетью. Распределенная база данных может содержать полностью дублированные данные, частично дублированные или полностью разделенные. Проблема безопасности распределенной SDB является более сложной, чем проблема централизованной SDB из-за необходимости дублировать на каждом узле накладные расходы по контролю безопасности, а также из-за трудностей по отслеживанию и контролю профилей пользователей. +Примеры статистических баз данных могут включать базы данных национальных статистических агентств, таких как Федеральное агентство по статистике (Росстат) или Бюро экономического анализа (BEA) в США. Эти базы данных содержат широкий спектр статистической информации о населении, экономике, здравоохранении, социальных показателях и других аспектах жизни. +\\ - \item Выделенная-общая компьютерная система +Важно отметить, что статистические базы данных могут иметь различные спецификации и структуры, в зависимости от конкретной области знаний и целей использования данных. -В выделенной для SDB компьютерной системе обслуживаются исключительно приложения для работы с SDB. В общей системе приложения SDB работают на одной аппаратной платформе с другими приложениями (возможно, использующие различные базы данных). Общую среду защитить сложнее, так как другие приложения могут вмешиваться в защищаемые данные непосредственно через операционную систему, минуя механизм безопасности SDB. -\end{itemize} -\subsection{Угрозы статистических БД} -О безопасности в статистических БД Деннинг [16.6] -\begin{grayquote} -"Методы нарушения защиты данных просты и не связаны с большими расходами. Поэтому требование обеспечения полной секретности конфиденциальной информации несовместимо с требованием возможности вычисления точных статистических показателей для произвольных подмножеств данных в базе. По крайней мере одно из этих требований должно быть снято прежде, чем можно будет поверить в гарантии обеспечения секретности." -\end{grayquote} -Таким образом, существует мнение, что нельзя нормально обезопасить СБД. +\subsection{Классификация статистических баз данных} -Основная уязвимость для несанкционированного доступа к данным в СБД -- проблема вывода. -В общих чертах, проблема вывода для SDB может быть сформулирована следующим образом. Характеристическая функция C определяет подмножество записей (строк) в базе данных. Запрос, использующий C, предоставляет статистику по выбранному подмножеству. Если подмножество достаточно мало, возможно, даже одна запись, спрашивающий может быть в состоянии сделать вывод о характеристиках одного человека или небольшой группы. Даже для больших подмножеств характер или структура данных могут быть такими, что информация, доступа к которой быть не должно, может быть получена злоумышленником. -Для злоумышленика, который пытается достать индивидуальные данные, задача состоит в том, чтобы сделать общий трекер. -Нужно придумать такую последовательность запросов, чтобы вывести индививидуальную информацию. +Статистические базы данных можно классифицировать по различным критериям. Вот несколько основных классификаций статистических баз данных: +\\ -Например, для статичной СБД можно реализовать подобную атаку: +\begin{enumerate} + \item \textbf{По источнику данных:} \begin{itemize} + \item Государственные статистические базы данных: это базы данных, содержащие статистическую информацию, собранную и поддерживаемую государственными органами. Они могут включать данные о населении, экономике, здравоохранении, образовании и других социально-экономических аспектах. + \item Исследовательские базы данных: это базы данных, созданные исследователями для хранения и анализа статистических данных, полученных в результате научных исследований. Они могут содержать данные, собранные из различных источников, таких как опросы, эксперименты или наблюдения. + \end{itemize} + \item \textbf{По типу данных:} \begin{itemize} + \item Кросс-секционные базы данных: это базы данных, содержащие данные, собранные в определенный момент времени для различных наблюдаемых единиц. Например, база данных, содержащая информацию о доходах и образовании разных людей в определенном году. + + \item Панельные базы данных: это базы данных, содержащие данные, собранные для одной и той же выборки наблюдаемых единиц в разные моменты времени. Например, база данных, содержащая информацию о доходах и образовании одной и той же группы людей в разные годы. + \end{itemize} + \item \textbf{По области применения:} \begin{itemize} + \item Социально-экономические базы данных: это базы данных, содержащие статистическую информацию о социальных и экономических аспектах общества, таких как занятость, безработица, инфляция, ВВП, образование и здравоохранение. + \item Медицинские базы данных: это базы данных, содержащие медицинскую статистическую информацию, такую как данные о заболеваемости, смертности, лекарственных препаратах и медицинских процедурах. + \item Экологические базы данных: это базы данных, содержащие статистическую информацию о состоянии окружающей среды, такую как данные о загрязнении воздуха, воды, климатических изменениях и биоразнообразии. + \item Демографические базы данных: это базы данных, содержащие статистическую информацию о населении, такую как данные о рождаемости, смертности, миграции, возрастной структуре и семейном составе. + \item Банковские базы данных — это специальные базы данных, содержащие информацию о клиентах банка, включая их личные данные, счета, историю транзакций, кредитную историю клиентов, данных банковских рисков и аналитики. + \end{itemize} + \item \textbf{По типу взаимодействия:} \begin{itemize} + \item Онлайн-базы данных: в онлайн-режиме пользователь имеет прямое взаимодействие с базой данных в режиме реального времени. Он может выполнять запросы, получать результаты и обрабатывать данные непосредственно через терминал или интерфейс. Этот тип базы данных широко используется в банковской индустрии для онлайн-банкинга, систем платежей, интернет-магазинов и других сферах, где требуется мгновенное взаимодействие с данными. + + \item Офлайн-базы данных: в отличие от онлайн-режима, в офлайн-режиме пользователь не контролирует обработку данных и не знает, когда выполняется его запрос данных. Вместо этого, пользователь предоставляет запросы или задания на обработку данных, а затем ожидает получения результатов. Такой режим часто используется в больших организациях, где запросы данных обрабатываются на серверах или вычислительных кластерах, и результаты предоставляются позднее. В этом режиме методы защиты, отслеживающие профили пользователей, становятся более громоздкими. Компромиссные методы, требующие большого количества запросов также усложняются при работе в автономном режиме. + \end{itemize} + \item \textbf{По возможности изменения базы данных} \begin{itemize} + \item Статическая база данных: статическая база данных не меняется после ее создания. Она остается неизменной со временем. Примером статической базы данных может служить база данных переписи, которая фиксирует данные о населении на определенный момент времени. Всякий раз, когда создается новая версия базы данных, эта новая версия рассматривается как отдельная статическая база данных. В статической базе данных изменения данных не происходят, она используется для анализа и исследования в определенный период времени. + + \item Динамическая база данных: в отличие от статической базы данных, динамическая база данных может изменяться непрерывно. Она отражает изменения в данных со временем и обновляется в реальном времени. Примером динамической базы данных может служить база данных банка, которая содержит информацию о транзакциях клиентов. Новые записи добавляются, а существующие данные могут изменяться или удаляться в зависимости от действий пользователей. Динамические базы данных обеспечивают актуальность данных и позволяют оперативно реагировать на изменения, но также требуют более сложных методов безопасности. + \end{itemize} + \item \textbf{По типу централизованности} \begin{itemize} + \item Централизованная база данных: В централизованной статистической базе данных существует одна единственная база данных, которая хранит все данные. Эта база данных может располагаться на одном сервере или в одном месте, и все пользователи получают доступ к данным через эту централизованную точку доступа. Централизованная база данных обеспечивает удобство управления и контроля над данными, поскольку все данные находятся в одном месте. + + \itemДецентрализованная база данных: В децентрализованной статистической базе данных подмножества данных хранятся на различных узлах, которые связаны между собой сетью. Это может быть полностью реплицированная, частично реплицированная или секционированная база данных. Каждый узел содержит только определенную часть данных и обслуживает определенную группу пользователей или задач. Децентрализованная база данных позволяет более эффективное использование ресурсов и повышает отказоустойчивость системы. + \end{itemize} +\end{enumerate} -Запрос1: выдать a1 + a2 + a3. Запрос2: выдать a1 + a2. Запрос1 - Запрос2 = a3. +\subsection{Безопасность статистических баз данных} -Для динамической онлайн СБД атака может иметь подобную модель: -Злоумышленник хочет узнать зарплату Мэри. Он знает, что ей 20 лет. Он записываем в базу много "пустых" записей с возрастом = 20 лет и нулевой зарплатой. Злоумышленник делает запрос с минимальной агрегацией людей с возврастом 20 лет. Таким образом можно узнать возможную зарплату Мэри. Чем больше исходных знаний есть о Мэри, тем точнее получатся данные. -Также не стоит забывать что речь идет о БД. Поэтому статистическая БД наследует все угрозы обычных БД. +В безопасности статистических баз данных могут возникать различные проблемы и уязвимости. Некоторые из распространенных проблем: +\\ - \subsection{Защита в статистических БД} +\begin{enumerate} + \item \textbf{Несанкционированный доступ: } это одна из основных угроз безопасности баз данных. Несанкционированные пользователи или злоумышленники могут получить доступ к базе данных, что может привести к утечке или несанкционированному использованию данных. + \item \textbf{Утечка персональных данных: } если в статистической базе данных содержатся персональные данные, то утечка этих данных может нарушить конфиденциальность и привести к нарушению приватности субъектов данных. + \item \textbf{Недостаточные уровни защиты: } если механизмы защиты недостаточно реализованы, это может создать уязвимости и позволить злоумышленникам получить несанкционированный доступ к базе данных. + \item \textbf{Недостатки в управлении доступом: } некорректно настроенные или управляемые механизмы управления доступом могут привести к неправильному назначению привилегий или возможности несанкционированного доступа к данным. + \item \textbf{Недостатки в обработке и фильтрации данных: } некорректная обработка или фильтрация входных данных может привести к возникновению уязвимостей в базе данных, которые могут быть использованы злоумышленниками для выполнения атак, таких как внедрение SQL-кода или внедрение вредоносного программного обеспечения. + \item \textbf{Недостатки в резервном копировании и восстановлении: } если не регулярно создаются резервные копии базы данных или не проверяется их целостность, это может создать проблемы при восстановлении данных в случае сбоя или утраты данных. + \item \textbf{Недостаточное обновление и патчи: } не обновленное программное обеспечение и отсутствие установленных патчей безопасности могут оставить систему открытой для известных уязвимостей и атак. + +\end{enumerate} +\\ -Разделяют четыре общих подхода защиты статистических БД: -\begin{itemize} - \item концептуальный; - \item ограничение запросов; - \item возмущение данных; - \item возмущение вывода; -\end{itemize} -На рисунке \ref{fig:SDB_secure} изображена схема 3 подходов: ограничение запросов, возмущение данных, возмущение вывода. -\begin{figure}[h] - \centering - \includegraphics[width=0.8\textwidth]{assets/SDB_secure_method.png} - \caption{Схемы безопасности СДБ} - \label{fig:SDB_secure} -\end{figure} -\paragraph{Концептуальный} +Для обеспечения безопасности статистических баз данных необходимо принимать меры по предотвращению и устранению указанных проблем. Некоторые из подходов к обеспечению безопасности статистических баз данных включают: +\\ -Основная проблема защиты статистических БД в том, что вся реляционная алгебра, которую различным образом реализуют языки манипуляции данными, позволяет выводить индивидуальные данные. Концептуальный подход предлагает заменить классическую схему взаимодействия с данными реляционной БД. Для этого были описаны качественные требования к фреймворку (формальное доказательство требований имеется в статье \cite{LatticeModel}), реализующему новую логику взаимодействия: \begin{enumerate} - \item Необходимо учитывать категории данных в таблицах (например, категоризация людей по профессии) - \item Необходимо принимать во внимание динамически изменяемые данные и угрозы, связанные с этим - \item Необходимо учитывать знания, полученныые каждым пользователем после запросов - \item Необходимо учитывать возможный вывод информации (в общем случае или с учетом знаний пользователя) -\end{enumerate} + \item \textbf{Реализация аутентификационных механизмов:} использование надежных методов аутентификации, таких как пароли, многофакторная аутентификация или биометрическая аутентификация, помогает предотвратить несанкционированный доступ к базе данных. -Для выполнения требований в основном используется создание единицы неразложимой подгруппы данных (subpopulation). В таких объектах содержаться 0 или больше двух реальных записей. Определение такой подгруппы контролируется DBA. В определении подгруппы содержится информация о разрешенных типах статистических запросов для каждого атрибута и ограничения, связанные с обновлением данных. В ядре фреймворка есть процесс, отслеживающий знания группы пользователей, полученные из предыдущих запросов. Также используется процесс отслеживания знаний пользователя при динамических операциях с данными в БД. Все процессы имеют связь с помощью сообщений с DBA. + \item \textbf{Применение принципа наименьших привилегий:} + управление доступом к базе данных должно быть настроено таким образом, чтобы пользователи имели доступ только к необходимым данным и функциональности. -Еще один способ концептуального подхода -- использование решетчетой модели, который заключается в агрегации данных по разным признакам на разном уровне детализации (то есть выделение отдельных таблиц с меньшим количеством атрибутов и с одним или более одинаковыми признаками (берем общее поле, например пол, и все записи одникового пола переносим в отдельные таблицы)). + \item \textbf{Шифрование данных:} + применение шифрования для защиты данных в базе данных может помочь предотвратить несанкционированный доступ в случае утечки данных или физической кражи носителя данных. -Классический способ (не защищающий от вывода данных) -- для пользователей с доступом к персональным данным доступны все запросы. А исследователям статистики и прочим пользователям без доступа к персональным данным выдается доступ только к некоторым записям или готовым статистическим результатам (агрегация). + \item \textbf{Регулярное обновление и патчи:} + важно регулярно обновлять программное обеспечение базы данных и устанавливать патчи безопасности, чтобы устранить известные уязвимости и защитить базу данных от известных атак. -Сама конциептуальная модель описана только в более старой статье \cite{SDB1989}, в новых статьях \cite{SDB1999}, \cite{ComputerSecurity2008} она уже не упоминается. + \item \textbf{Защита от SQL-инъекций:} + применение строгих проверок и фильтрации входных данных может помочь предотвратить атаки, связанные с внедрением SQL-кода. -\paragraph{Ограничение запросов} + \item \textbf{Установка механизмов мониторинга и аудита:} + реализация механизмов мониторинга и аудита позволяет отслеживать подозрительную активность или попытки несанкционированного доступа. +\end{enumerate} +\subsection{Безопасность персональных данных в статистических БД} -Для ограничения запросов используется 5 стандартных методов: ограничение размера выдаваемой выборки, контроль перекрытия результатов, аудит, подавление ячеек и разделение. +Вопросы защиты статистических баз данных безусловно связаны со многими вопросами защиты баз данных в целом, тем не менее специфика статистических баз данных обязывает нас обратить особое внимание на проблему обработки персональных данных. Для защиты персональных данных в статистических базах данных существует несколько математических методов и подходов. Вот некоторые из них: +\\ \begin{enumerate} + \item \textbf{Анонимизация данных:} \begin{itemize} + \item Обобщение (Generalization): при обобщении конкретные значения заменяются на более общие категории или диапазоны. Например, возрастные данные могут быть обобщены до групп возрастов. Обобщение помогает сохранить общую информацию о данных, но уменьшает точность идентификации отдельных лиц. + \item Подавление (Suppression): при подавлении определенные значения удаляются из данных. Например, можно удалить точные географические координаты, чтобы сохранить только общую информацию о местоположении. Подавление может помочь снизить риск идентификации отдельных лиц, но может также привести к потере информации. + \item Синтез данных (Data Synthesis): синтез данных предполагает создание синтетических данных, которые сохраняют статистические свойства и распределения оригинальных данных, но не содержат исходных значений. Синтез данных может быть осуществлен с использованием алгоритмов генерации синтетических данных, таких как алгоритмы генерации синтетических популяций. Синтетические данные могут использоваться для анализа и обмена без раскрытия реальных персональных данных. + \item Добавление шума (Noise Addition): добавление случайного шума к данным является еще одним методом анонимизации. Шум может быть добавлен к числовым данным или текстовым данным, чтобы затруднить идентификацию отдельных лиц. При этом сохраняется общая статистическая информация, но точные значения скрываются. + \end{itemize} + + \item \textbf{Криптографические протоколы:} \begin{itemize} + \item Симметричное шифрование: это метод шифрования, при котором один и тот же ключ используется для шифрования и расшифрования данных. Симметричное шифрование обеспечивает конфиденциальность данных, но требует, чтобы отправитель и получатель имели доступ к общему секретному ключу. + \item Асимметричное шифрование: асимметричное шифрование использует пару ключей - публичный и приватный. Публичный ключ используется для шифрования данных, а приватный ключ используется для их расшифровки. Асимметричное шифрование позволяет безопасно обмениваться данными без необходимости общего секретного ключа. + \item Цифровые подписи: цифровая подпись представляет собой математическую конструкцию, которая связывает определенные данные с приватным ключом отправителя. Это обеспечивает подтверждение авторства и целостности данных. Получатель может использовать публичный ключ отправителя для проверки цифровой подписи и убедиться, что данные не были изменены в процессе передачи и что они были созданы конкретным отправителем. + \end{itemize} + + \item \textbf{Протоколы нулевого разглашения:} \begin{itemize} + \item Доказательство знания (Proof of Knowledge): этот протокол позволяет одной стороне доказать, что она знает определенную информацию, не раскрывая саму информацию. Например, можно доказать знание пароля, не раскрывая сам пароль. + \item Защита от проверки: протоколы нулевого разглашения могут использоваться для защиты от проверки, при которой одна сторона пытается проверить определенное условие, а другая сторона хочет сохранить конфиденциальность своих данных. + \end{itemize} + + \item \textbf{Гомоморфное шифрование:} \begin{itemize} + \item Полностью гомоморфное шифрование (Fully Homomorphic Encryption): Этот метод позволяет выполнить любые операции на зашифрованных данных, включая сложение, умножение и другие операции, сохраняя конфиденциальность данных. Результат операции будет зашифрован и может быть расшифрован только владельцем приватного ключа. + \item Частично гомоморфное шифрование (Partially Homomorphic Encryption): В отличие от полностью гомоморфного шифрования, частично гомоморфное шифрование позволяет выполнять только определенные операции на зашифрованных данных, например, сложение или умножение, но не все операции. + \end{itemize} + + \item \textbf{Техники приватного подсчета:} \begin{itemize} + \item Приватный подсчет суммы (Private Summation): Этот метод позволяет вычислять сумму значений без раскрытия исходных данных. Различные протоколы, такие как протоколы шумового добавления или протоколы Secure Multiparty Computation, могут быть использованы для выполнения приватного подсчета суммы. + \item Приватный подсчет среднего значения (Private Averaging): Этот метод позволяет вычислить среднее значение данных из различных источников без раскрытия исходных данных. Он может использовать те же протоколы, что и приватный подсчет суммы. + \end{itemize} +\end{enumerate} +\\ - \item Ограничение размера выборки - -Это ограничение требует параметр K, который задается администратором БД. Размер C выдаваемой выборки удовлетворяет условию (L - общее число записей): +Каждый из этих методов и подходов представляет собой различные техники, которые могут быть применены для обеспечения безопасности персональных данных в статистических базах данных. Выбор конкретного метода зависит от требований безопасности, типа данных и контекста применения. Комбинация этих методов и подходов может обеспечить эффективную защиту персональных данных в статистических базах данных, минимизируя риски несанкционированного доступа, утечки информации и нарушения конфиденциальности. -\begin{displaymath} -K \leq C \leq L - K, \quad K < L/2 -\end{displaymath} - \item Контроль перекрытия запросов +\subsection{Проблемы безопасности персональных данных в статистических базах данных} -Зачастую для вывода данных используется перекрытие запросов. Поэтому необходимо ограничить количество перекрывающихся записей. Однако на практике это не защищает от сотрудничества нескольких пользователей, ограничивая полезные функций БД и увеличивая сложность сравнения результатов запросов. +Статистической (в приведенном в этом разделе контексте) считается база данных, в которой допускаются запросы с обобщением данных (суммированием, вычислением среднего значения и т.д.), но не допускаются запросы по отношению к элементарным данным. Например, в статистической базе данных разрешается выдача запроса "Какова средняя зарплата программистов? тогда как выдача запроса "Какова зарплата программиста Мэри?" запрещена. Проблема безопасности в статистических баз данных заключается в том, что иногда с помощью логических заключений на основе выполнения разрешенных запросов можно вывести ответ, который прямо может быть получен только с помощью запрещенного запроса. "Обобщенные значения содержат следы исходной информации, и она может быть восстановлена злоумышленником после соответствующей обработки этих обобщенных значений. Такой процесс называется логическим выводом конфиденциальной информации". Практически для любой статистической базы данных всегда может быть определен общий трекер (в отличие от множества индивидуальных трекеров). Общий трекер (general tracker) — это логическое выражение, которое может быть использовано для поиска ответа на любой запрещенный запрос, т.е. запрос, включающий недопустимое логическое выражение. (В противоположность этому индивидуальный трекер работает только на основе запросов, включающих конкретные запрещенные выражения.) Требуется поддерживать баланс между репрезентативностью данных и конфиденциальностью отдельных записей. +\\ - \item Аудит +Согласно источнику Graham G. S., Denning P. J. Protection - Principles and Practice: +\\ -Метод заключается в сохранении запросов пользователя и анализе на возможность компрометации. Сложность, связанная с вычислительной нагрузкой, остается. +"…методы нарушения защиты данных просты и не связаны с большими расходами. Поэтому требование обеспечения полной секретности конфиденциальной информации несовместимо с требованием возможности вычисления точных статистических показателей для произвольных подмножеств данных в базе. По крайней мере одно из этих требований должно быть снято прежде, чем можно будет поверить в гарантии обеспечения секретности. +\\ - \item Разделение +Существует точка зрения, что обеспечение полной безопасности статистических баз данных (СБД) может быть проблематичным. Одной из основных проблем является проблема вывода. В общих чертах, проблема вывода для СБД заключается в том, что с помощью характеристической функции C можно определить подмножество записей в базе данных. Запрос, использующий C, предоставляет статистику по выбранному подмножеству. Если подмножество достаточно маленькое, даже состоящее из одной записи, пользователь запроса может сделать выводы о характеристиках отдельного человека или небольшой группы. Даже для больших подмножеств, структура и характер данных могут быть такими, что несанкционированная информация может быть раскрыта. Для злоумышленника, пытающегося извлечь индивидуальные данные, задача заключается в создании общего трекера. Необходимо разработать последовательность запросов и операций, чтобы вывести индивидуальную информацию. Суть заключается в том, что с помощью определенной комбинации запросов и операций можно деанонимизировать записи и получить доступ к конфиденциальным данным. +\\ -Основная идея разделения -- это перегруппировка на непересекающиеся множества, объединенные некоторым признаком, называемые атомарными множествами. +Иными словами, даже при применении методов безопасности, существует возможность извлечения конфиденциальной информации из статистических баз данных путем тщательно спланированных запросов и операций. Это вызвано особенностями структуры данных и возможностью вывести индивидуальные данные из больших объемов информации. Поэтому обеспечение полной безопасности СБД представляет сложную задачу, требующую учета различных факторов и использования эффективных методов защиты данных. +\\ - \item Подавление ячеек +Для статической базы данных можно привести следующий пример: предположим, у нас есть запрос1, который запрашивает значения al + a2 + a3, и запрос2, который запрашивает значения a1 + a2. Если мы вычтем результат запроса2 из запроса1, то получим значение а3. Таким образом, используя комбинацию запросов, мы можем извлечь конкретное значение а3 из статической базы данных. +\\ -Подавление ячеек -- это сокрытие информации в ячейках, которые могут привести к раскрытию конфиденциальной информации. Кроме того, есть дополнительное подавление -- когда скрывают ячейки с неконфиденциальной информацией, которые могут косвенно использоваться для раскрытия конфиденциальной информации. +В случае динамической онлайн базы данных, к примеру, мы можем рассмотреть ситуацию, когда мы хотим получить информацию о зарплате Мэри, зная, что ей 20 лет. Мы добавляем в базу данных множество ложных записей с возрастом 20 лет и нулевой зарплатой. Затем мы делаем запрос с минимальной агрегацией, чтобы получить информацию о людях с возрастом 20 лет. Таким образом, мы можем получить возможное значение зарплаты Мэри. Чем больше у нас исходных знаний о Мэри, тем точнее будет полученная информация. Более того необходимо помнить, что мы работаем с базой данных, поэтому статистическая база данных наследует все угрозы, присущие обычным базам данных, некоторые из которых были перечислены ранее. +\\ -\end{enumerate} +Несмотря на большую сложность обеспечения безопасности статистических баз данных, они находят широкое применение в социально значимых сферах, вследствие чего вопрос безопасности стоит крайне остро. Рассмотрим общие подходы защиты СБД, существующих на данный момент: -Стоит отметить, что ни один из предложенных методов не дает универсальное решение. +\begin{enumerate} + \item \textbf{Концептуальный} + \\ -\paragraph{Возмущение данных} + Основная проблема заключается в том, что реляционная алгебра позволяет выводить индивидуальные данные. Концептуальный подход предлагает заменить классическую систему реляционных БД, работающую с индивидуальными данными. Одним из основных методов этого подхода является разделение базы данных на агрегированные и обезличенные записи. Например, можно использовать метод микроагрегации, в котором исходные данные разбиваются на несколько записей, для которых рассчитываются средние значения, а затем заменяются исходные значения на полученные средние. Также можно применить сеточную модель агрегации данных по различным признакам на разных уровнях детализации. -Методы возмущения данных делятся на две категории: категория распределения вероятностей и категория возмущения фиксированных данных. Первые из них рассматривают данные как распределение вероятностей и подменяют исходные данные на новые таблицы, сгенерированные на основе полученного распределения. Вторые вычисляют статистику фиксированных данных и на основе статистики раз и навсегда возмущают имеющиеся данные. Для возмущения данных требуется специально преобразованная для статистических исследований исходная база данных. Важно отметить, что при возмущении данных могут меняться условные средние значения и частоты, что является негативным последствием. + \item \textbf{Ограничение запросов} + \\ -\begin{enumerate} - \item Распределение вероятностей + Основные методы обеспечения безопасности, которые также используются в СБД, включают ограничение доступа, ограничение запросов и возмущение данных. Ограничение запросов "Query Set Restriction" является механизмом, который устанавливает минимальный размер выборки, выдаваемой в результате запроса. + \\ + + Метод "Limiting intersection of query sets" представляет собой механизм защиты, который блокирует запросы, приводящие к выводу данных через пересечение множеств запросов. Это достигается путем сохранения исторических данных о выполнении запросов и отклонения любых запросов, использующих значительное количество исходных данных, которые были обработаны предыдущим запросом. + \\ + + Аудит (Auditing) представляет собой процесс ведения журнала, который позволяет обнаруживать и регистрировать подозрительную или недобросовестную активность. -Для этой категории существует два основных метода: использование исходной выборки и выборки, полученной из распределения вероятностей исходной, и замена исходной БД на ее распределение вероятностей. + \item \textbf{Возмущение данных} + \\ - \item Возмущение фиксированных данных + Возмущение данных предполагает добавление небольшого случайного шума или введение дополнительных строк данных при обработке запросов. Это может быть реализовано, например, путем случайного изменения результатов каждого запроса или использования случайных наборов исходных данных для ответов на запросы. Возмущение данных "Data Perturbation" включает добавление небольшого случайного шума к данным. Такой подход предполагает, что точные значения данных будут уничтожены, но при этом может возникнуть проблема искажения репрезентативности данных. Метод также предлагает случайное добавление дополнительных строк к основному набору данных, обрабатываемому запросом. Также предлагается использование "обмена данными" ("data swapping"), что означает обмен значениями атрибутов между кортежами таким образом, чтобы сохранить статистическую точность. Даже если злоумышленнику удастся идентифицировать отдельное значение, например зарплату, у него не будет способа узнать, какому конкретному кортежу, например сотруднику, это значение принадлежит. Однако данному подходу присущи сложности в поиске множества записей, между которыми можно организовать обмен значениями соответствующим образом. Аналогичные затруднения возникают и при использовании большинства других методов. -Возмущение происходит только для числовых или категорезированных данных. + \item \textbf{Возмущение данных} + \\ + Подход "возмущение вывода" (Output Perturbation) представляет собой метод, аналогичный предыдущему подходу, однако в данном случае результат каждого запроса преобразуется. Для этого применяется метод случайного выборочного исследования (Random Sampling), который обеспечивает различные наборы записей при повторном выполнении одного и того же запроса. В данном подходе для ответов на запросы используются только случайные наборы исходных данных. + \end{enumerate} +\\ +На рисунке \ref{fig:SDB_secure} изображена схема 3 подходов. +\begin{figure}[h] +\centering +\includegraphics[width=1\linewidth]{assets/text.png} +\caption{Схемы безопасности СБД} +\label{fig:SDB_secure} +\end{figure} -Рассмотрим два конкретных метода возмущения данных. -Случайное добавление дополнительных строк к основному набору данных, обрабатываемому запросом. -Второй способ -- "обмен данными" ("data swapping"), т.е. обмен значениями атрибутов между кортежами, осуществляемый таким образом, чтобы поддерживалась лишь статистическая точность. При этом даже если злоумышленнику удастся идентифицировать отдельное значение (например, некоторое значение зарплаты), то у него не будет способа узнать, какому именно кортежу (в нашем примере — сотруднику) оно принадлежит. Сложность этого подхода заключается в необходимости отыскать множество тех записей, между которыми можно будет организовать обмен значениями соответствующим образом. Подобные затруднения имеют место и при использовании других методов. +\subsection{Критерии безопасности статистических баз данных} -\paragraph{Возмущение вывода} +Критерии безопасности включают оценку вероятности раскрытия записей в СБД, оценку консистентности данных при использовании методов возмущения данных и оценку зависимости между возмущением и конкретными записями. Также учитываются затраты, связанные с выполнением запросов, и назначается конкретная цена каждому запросу. Пользователям предоставляется начальная сумма, которую они могут использовать для запросов, чтобы предотвратить выведение данных. +\\ -Отмеченная проблема изменения статистически важных данных условных средних значений частот не так серьезна в этом случае, так как возмущение накладывается на уже выходные данные. +Когда речь идет о критериях безопасности, необходимо отметить, что полной гарантии безопасности в статистических базах данных (СБД) достичь невозможно. Вместо этого проводится оценка важности деанонимизированных данных и статистической точности, учитывая предпринятые меры по защите данных. +\\ -Для того, чтобы определить выходную выборку, каждая запись проходит через функцию, которая с некоторой ненулевой вероятностью помещает запись в выходную выборку. Эта вероятность может корректироваться администратором базы данных. +Критерий безопасности "Security" оценивает вероятность раскрытия (включая частичное раскрытие) записи в СБД. Для каждого разрешенного агрегирующего запроса проводится оценка критерия безопасности. Основываясь на количестве информации в базе данных, можно определить, сколько запросов требуется для деанонимизации данных. На основе этой оценки определяется минимальный размер выборки для таких запросов. +\\ - \subsection{Критерии безопасности} +Критерий безопасности "Consistency" оценивает консистентность данных для методов возмущения данных. Оценивается степень возмущения данных путем создания агрегирующего запроса и измерения его изменений после внесения возмущений. +\\ -Как было сказано, гарантированной безопасности в СДБ не добиться. Поэтому оценивается степень деанонимизированности данных и статистического соответствия исходным данным. +Критерий безопасности "Robustness" оценивает зависимость между возмущением и конкретными записями. Желательно, чтобы возмущение не зависело от данных, однако необходимо сохранить статистические свойства данных. +\\ -Security~--- вероятность раскрыть (в том числе частично) запись в СБД. Для каждого разрешенного агрегирующего запроса оценивается критерий безопасности. На основе количества информации в базе можно подсчитать, сколько тех или иных запросов нужно сделать для деанонимизации. На основе этого расчитывается минимальная выборка для таких запросов. +Критерий безопасности "Costs" определяет конкретную стоимость каждого запроса. Пользователю предоставляется начальная сумма, которую он может использовать для запросов, чтобы предотвратить вывод данных. Этот критерий скорее представляет собой метод управления, а не непосредственный критерий безопасности. +\\ -Consistency -- оценивается консистентность данных для методов возмущения данных. Оценивается степень возмущения данных. Для этого создается агрегирующий запрос и замеряется его изменения после внесенных возмущений. +Таким образом, применение критериев безопасности в СБД позволяет оценивать уровень безопасности, учитывая важность данных, статистическую точность, консистентность, робастность и стоимость запросов. +\\ -Robustness -- оценка зависимости между возмущением и конкретной записью. Необходимо, чтобы возмущение не было зависимо от данных, но при этом нужно сохранить ее статистические свойства. +Исходя из вышеизложенных глав, можем убедиться, что безопасность статистических баз данных является сложной задачей, но существуют различные подходы и методы для обеспечения безопасности данных. Каждый подход имеет свои преимущества и недостатки, и выбор методов безопасности должен основываться на анализе конкретных требований и контекста использования СБД. Оценка важности данных, статистической точности и затрат помогает принять решение о применении конкретных методов обеспечения безопасности. -Costs -- назначение каждому запросу конкретной цены. Пользователю дается начальная сумма, на которую он может делать запросы, такая, чтобы он не смог вывести данные. From 6227f174db1653ddf2a3977cce90feff3d58086f Mon Sep 17 00:00:00 2001 From: VladenaDenisko <136357360+VladenaDenisko@users.noreply.github.com> Date: Wed, 14 Jun 2023 10:05:42 +0300 Subject: [PATCH 2/2] Add files via upload --- assets/text.png | Bin 0 -> 41769 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/text.png diff --git a/assets/text.png b/assets/text.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3d81a3580add27af21ceb67f8cbd76d116b6da GIT binary patch literal 41769 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∾AFz?iVFOop?Kp})kp)@2!8(XA&fy&LL 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