Информационный поток (теория информации) - Information flow (information theory)

Поток информации в теоретическая информация контекст - это передача информации из Переменная к переменной в данном процесс. Не все потоки могут быть желательными; например, система не должна передавать какой-либо секрет (частично или нет) общественным наблюдателям.[Почему? ]

Вступление

Защита данных, обрабатываемых компьютерными системами, была сложной задачей в последние годы. Сегодня существует несколько методов ограничения раскрытия информации, например: списки контроля доступа, брандмауэры, и криптография. Однако, хотя эти методы налагают ограничения на информацию, публикуемую системой, они не дают никаких гарантий относительно информации. распространение.[1] Например, списки управления доступом файловых систем предотвращают несанкционированный доступ к файлам, но они не контролируют, как данные используются впоследствии. Точно так же криптография предоставляет средства для конфиденциального обмена информацией через незащищенный канал, но никаких гарантий конфиденциальности данных не дается после их расшифровки.

При низкоуровневом анализе информационных потоков каждой переменной обычно назначается уровень безопасности. Базовая модель включает два различных уровня: низкий и высокий, что означает, соответственно, общедоступную информацию и секретную информацию. Для обеспечения конфиденциальности нельзя допускать перетекания информации от высоких переменных к низким. С другой стороны, для обеспечения целостности следует ограничить потоки к высоким переменным.[1]

В более общем плане уровни безопасности можно рассматривать как решетка информация течет только вверх по решетке.[2]

Например, учитывая два уровня безопасности и (низкий и высокий), если , вытекает из к , из к , и к будет разрешено, а потоки из к не стал бы.[3]

В этой статье используются следующие обозначения:

  • Переменная (низкий) должен обозначать общедоступную переменную
  • Переменная (высокий) должен обозначать секретную переменную

Где и являются единственными двумя уровнями безопасности в решетка рассматривается.

Явные потоки и побочные каналы

Информационные потоки можно разделить на две основные категории. Самый простой - это явный поток, когда некоторый секрет явно просачивается в общедоступную переменную. В следующем примере секрет в переменной час перетекает в общедоступную переменную л.

вар l, hl: = h

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

В следующем примере злоумышленник может определить, имеет ли значение час один или нет ко времени завершения программы:

вар л, чесли h = 1 тогда    (* выполнять трудоемкую работу *) l: = 0

Другой поток побочного канала - это неявный информационный поток, который заключается в утечке информации через поток управления программой. Следующая программа (неявно) раскрывает значение секретной переменной час к переменной л. В этом случае, поскольку час переменная является логической, все биты переменной час раскрывается (в конце программы, л будет 3, если час верно, иначе 42).

вар л, чесли h = правда тогда    l: = 3еще    l: = 42

Невмешательство

Невмешательство - это политика, которая требует, чтобы злоумышленник не мог отличить два вычисления от их выходных данных, если они отличаются только секретными входными данными. Однако эта политика слишком строгая, чтобы ее можно было использовать в реалистичных программах.[4] Классическим примером является программа проверки паролей, которая для того, чтобы быть полезной, должна раскрывать некоторую секретную информацию: верен ли входной пароль или нет (обратите внимание, что информация, которую злоумышленник узнает, если программа отвергает пароль состоит в том, что введенный пароль нет действительный).

Управление информационным потоком

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

Был разработан как статический, так и динамический анализ для текущих языков программирования. Однако методы динамического анализа не могут отслеживать все пути выполнения, и поэтому не могут быть одновременно надежными и точными. Чтобы гарантировать невмешательство, они либо прекращают выполнение, которое может раскрыть конфиденциальную информацию.[5] или они игнорируют обновления, которые могут привести к утечке информации.[6]

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

Система охранного типа

На языке программирования, дополненном защитой система типов каждое выражение несет как тип (например, логическое или целочисленное), так и метку защиты.

Ниже приводится простая система охранного типа от [1] который обеспечивает невмешательство. означает, что выражение имеет тип . По аналогии, означает, что команда типизируется в контексте безопасности .

Хорошо набранные команды включают, например,

.

И наоборот, программа

неправильно типизирован, так как он раскрывает значение переменной в .

Обратите внимание, что правило является правилом подчинения, что означает, что любая команда безопасного типа так же может быть . Например, может быть как и . Это называется полиморфизм в теория типов. Аналогично тип выражения это удовлетворяет может быть как и в соответствии с и соответственно.

Рассекречивание

Как было показано ранее, политика невмешательства слишком строгая для использования в большинстве реальных приложений.[7] Поэтому было разработано несколько подходов к разрешению контролируемого выпуска информации. Такие подходы называются рассекречиванием информации.

Надежная рассекречивание требует, чтобы активный злоумышленник не мог манипулировать системой, чтобы узнать больше секретов, чем уже известно пассивным злоумышленникам.[4]

Информационные конструкции рассекречивания можно классифицировать по четырем ортогональным измерениям: Что информация выпущена, ВОЗ имеет право доступа к информации, Где информация выпущена, и Когда - это выпущенная информация.[4]

Что

А Какие Политика рассекречивания контролирует, какая информация (частичная или нет) может быть передана в общедоступную переменную.

В следующем примере кода показан рассекречивать построить из.[8] В этом коде значение переменной час программист явно разрешает переходить в общедоступную переменную л.

вар л, чесли l = 1 тогда    l: = рассекречивать(час)

ВОЗ

А ВОЗ Политика рассекречивания контролирует, какие руководители (то есть кто) может получить доступ к заданной информации. Такая политика реализована в компиляторе Jif.[9]

Следующий пример позволяет Бобу поделиться своим секретом, содержащимся в переменной б с Алисой через общедоступную переменную ab.

вар ab (* {Алиса, Боб} *)вар б (* {Боб} *)если ab = 1 тогда    ab: = рассекречивать(б, {Алиса, Боб}) (* {Алиса, Боб} *)

Где

А куда Политика рассекречивания регулирует, где может быть опубликована информация, например, путем контроля, в каких строках исходного кода может быть выпущена информация.

В следующем примере используется поток конструкция предложена в.[10] Эта конструкция принимает политику потока (в этом случае переменные в H могут перетекать в переменные в L) и команду, которая выполняется в соответствии с данной политикой потока.

вар л, чпоток ЧАС  L в    l: = h

Когда

А когда Политика рассекречивания регулирует, когда информация может быть опубликована. Политики такого типа могут использоваться для проверки программ, которые реализуют, например, контролируемое раскрытие секретной информации после оплаты или зашифрованные секреты, которые не должны разглашаться в определенное время с учетом полиномиальной вычислительной мощности.

Подходы к рассекречиванию неявных потоков

Неявный поток возникает, когда код, условное выполнение которого основано на частной информации, обновляет общедоступную переменную. Это особенно проблематично, когда рассматривается множественное выполнение, поскольку злоумышленник может использовать общедоступную переменную для вывода частной информации, наблюдая, как ее значение изменяется с течением времени или с вводом.

Наивный подход

Наивный подход заключается в применении свойства конфиденциальности ко всем переменным, значение которых зависит от других переменных. Этот метод приводит к частичной утечке информации из-за того, что в некоторых экземплярах приложения переменная имеет значение «Низкий», а в других - «Высокий».

Нет чувствительного обновления

Никакое конфиденциальное обновление не останавливает программу всякий раз, когда переменная High влияет на значение переменной Low, эффективно предотвращая утечку информации. Поскольку он просто ищет выражения, в которых может произойти утечка информации, не глядя на контекст, он может остановить программу, которая, несмотря на потенциальную утечку информации, никогда не утекает.

В следующем примере x - High, а y - Low.

вар x, yy: = ложьесли h = правда тогда    у: = правдавозвращаться истинный

В этом случае программа будет остановлена, поскольку она использует значение переменной High для изменения переменной Low, несмотря на то, что программа никогда не пропускает информацию.

Разрешительное обновление

Permissive-upgrade вводит дополнительный класс безопасности P, который будет определять переменные утечки информации. Когда переменная High влияет на значение переменной Low, последняя помечается как P. Если переменная с меткой P влияет на переменную Low, программа будет остановлена. Чтобы предотвратить остановку, переменные Low и P должны быть преобразованы в High с помощью функции приватизации, чтобы избежать утечки информации. В последующих случаях программа будет работать без перерывов.

Вывод о приватизации

Вывод о приватизации расширяет разрешительное обновление, чтобы автоматически применить функцию приватизации к любой переменной, которая может привести к утечке информации. Этот метод следует использовать во время тестирования, когда он преобразует большинство переменных. Как только программа переходит в производство, разрешающее обновление должно использоваться для остановки программы в случае утечки информации, а функции приватизации могут быть обновлены для предотвращения последующих утечек.

Применение в компьютерных системах

Помимо приложений к языку программирования, теории управления информационными потоками были применены к ОС,[11] Распределенные системы [12] и облачные вычисления.[13][14]

Рекомендации

  1. ^ а б c Андрей Сабельфельд и Эндрю К. Майерс. Безопасность информационных потоков на основе языка. Журнал IEEE по избранным областям коммуникаций, 21 (1), январь 2003 г.
  2. ^ Дороти Деннинг. Решетчатая модель защищенного информационного потока. Сообщения ACM, 19 (5): 236-242, 1976.
  3. ^ Смит, Джеффри (2007). «Принципы безопасного анализа информационных потоков». Достижения в области информационной безопасности. 27. Springer США. С. 291–307.
  4. ^ а б c Андрей Сабельфельд и Дэвид Сэндс. Размеры и принципы рассекречивания. В Proc. семинара IEEE по основам компьютерной безопасности, 2005 г.
  5. ^ Томас Х. Остин и Кормак Фланаган. Эффективный чисто динамический анализ информационных потоков, Proc. Четвертого семинара ACM SIGPLAN по языкам программирования и анализу безопасности, ACM, 2009.
  6. ^ Дж. С. Фентон. Подсистемы без памяти, Comput. J. 17 (2): 143-147 (1974).
  7. ^ С. Зданцевич. Проблемы безопасности информационных потоков. В семинаре по языковому вмешательству и зависимости (PLID’04) 2004.
  8. ^ А. Сабельфельд и А. К. Майерс. Модель разграниченного выпуска информации. В Proc. Международного симпозиума по безопасности программного обеспечения (ISSS) 2003.
  9. ^ Jif: информационный поток Java
  10. ^ А. Алмейда Матос и Г. Будоль. О рассекречивании и политике неразглашения. В Proc. Семинар IEEE по основам компьютерной безопасности 2005 г.
  11. ^ М. Крон, А. Йип, М. Бродский, Н. Клиффер, М. Каашук, Э. Колер и Р. Моррис. Управление информационным потоком для стандартных абстракций ОС. На симпозиуме ACM Special Interest Group по операционным системам (SIGOPS) по принципам операционных систем 2007.
  12. ^ Н. Зельдович, С. Бойд-Викизер, Д. Мазьер. Защита распределенных систем с помощью управления информационными потоками. На симпозиуме USENIX по проектированию и внедрению сетевых систем, 2008 г.
  13. ^ Дж. Бэкон, Д. Эйерс, Т. Паскье, Дж. Сингх, И. Папагианнис и П. Пицух. Управление информационными потоками для безопасных облачных вычислений. В IEEE Transactions on Network and Service Management 2014.
  14. ^ Паскье, Томас; Сингх, Джатиндер; Эйерс, Дэвид; Бэкон, Жан (2015). «CamFlow: управляемый обмен данными для облачных сервисов». Транзакции IEEE в облачных вычислениях. 5 (3): 472–484. arXiv:1506.04391. Bibcode:2015arXiv150604391P. Дои:10.1109 / TCC.2015.2489211.