Главная страница
Навигация по странице:

  • Тесты программы

  • отчет по заданию информационной безопасности. Отчет по индивидуальной работе 1 Дисциплина Информационная безопасность Студентка 361 группы


    Скачать 106.68 Kb.
    НазваниеОтчет по индивидуальной работе 1 Дисциплина Информационная безопасность Студентка 361 группы
    Анкоротчет по заданию информационной безопасности
    Дата06.10.2022
    Размер106.68 Kb.
    Формат файлаdocx
    Имя файлаOTChET_1_IB_1.docx
    ТипОтчет
    #718896

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

    РОССИЙСКОЙ ФЕДЕРАЦИИ

    ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

    Государственное образовательное учреждение высшего образования

    Кубанский государственный университет

    Кафедра вычислительных технологий

    ОТЧЕТ

    По индивидуальной работе №1

    Дисциплина: Информационная безопасность


    Выполнила:

    Студентка 36/1 группы

    Халипенко А.А.

    Преподаватель:

    Жуков С. А.

    Краснодар

    2018

    Задача 6

    Составить программу, реализующую политику Chinese Wall (Китайская стена). Входными данными для программы являются: n – количество субъектов s1, s2, … , sn доступа к объектам; m – количество объектов доступа o1, o2, … , om ; f – число фирм F1, F2, . . . , Ff , являющихся собственниками объектов. Каждая фирма представлена своим портфелем, в который входят какие-то из объектов, так, что каждый объект должен входить в портфель только одной фирмы. Фирмы могут быть конкурентами, CI1, CI2, . . . , CIs - классы конфликта интересов; в каждый класс CIj входят номера (или названия) тех фирм Fs , . . . , которые конфликтуют между собой. Какие-то фирмы могут быть членами разных классов CI, какие-то фирмы могут не членствовать ни в каких классах (они ни с кем не конфликтуют) . Программа должна выполнять директивы:

    start - очищает историю выполненных доступов субъектов к объектам;

    read si oj - выполнить чтение объекта oj субъектом si , чтение возможно, если объект oj принадлежит к такому классу CI, к которому si еще не обращался, или oj принадлежит портфелю данных той Ft , к которому si уже обращался; программа должна вывести:

    accepted - подтверждение выполнения

    refused - в случае отказа.

    write si oj - выполнить запись в объект oj субъектом si , запись возможна, если si может выполнить чтение oj согласно правилу чтения и si не читал никакого объекта из портфеля данных другой фирмы (отличной от собственника oj) , которая входит в некоторый в один класс CI с фирмой-собственником oj ; Программа должна вывести:

    accepted - подтверждение выполнения;

    refused - в случае отказа;

    report si - выдать отчет по выполненным операциям субъекта si с указанием объектов и фирм-собственников этих объектов;

    report oj - выдать отчет по операциям, выполненным с этим объектом разными субъектами;

    brief_case Fi - выдать список объектов, находящихся в портфеле фирмы Fi .

    Решение

    Для реализации программы использована среда разработки PyCharm 2017.2, язык программирования Python 3.6.

    Из файла input.txt считываются входные данные (количество субъектов, количество объектов, количество фирм, классы конфликтов интересов). После считывания входных данных пользователь вводит с клавиатуры директивы, описанные в условии задачи, до тех пор, пока не введет 0.

    В программе описаны функции, реализующие политику доступа Chinese Wall (Китайская стена).

    Функции read и write реализуют правила чтения и записи. Когда субъект впервые обращается к какому-либо объекту, то этот субъект записывается в словарь (субъект – ключ, все его операции – значение), где сохраняются все его действия с разными объектами.

    Функция report реализует выдачу отчета по выполненным операциям субъекта над объектами или выдачу отчета по выполненным операциям над объектом различными субъектами. Для вывода в отчет выполненных операций субъекта над объектами происходит поиск в словаре этого субъекта и извлекается значение, в котором хранятся все операции этого субъекта.

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

    Функция brief_case реализует вывод всех объектов, находящихся в портфеле заданной фирмы Fi. Для этого из списка, в каждом элементе которого находятся объекты, принадлежащие каждой из фирм, выбирается элемент с номером заданной фирмы и выводится на экран.

    Код программы на Python 3.6

    with open("input.txt") as f:
    l = f.readlines()
    l = [line.rstrip() for line in l]

    n = int(l[0][2:])
    m = int(l[1][2:])
    f = int(l[2][2:])
    subject = [f's{i + 1}' for i in range(n)]
    dataset = [l[i].split(' ') for i in range(3, 3 + f)]
    s = int(l[3 + f][2:])
    CoI = [l[i].split(' ') for i in range(3 + f + 1, len(l))]
    operation_list = {}
    firm_list = []
    for i in CoI:
    for j in i:
    if dataset[int(j[1:]) - 1] not in firm_list:
    firm_list.append(dataset[int(j[1:]) - 1])

    for i in range(len(dataset)):
    if dataset[i] not in firm_list:
    CoI.append([f'F{i + 1}'])

    def write(r):
    if r[1] not in operation_list:
    for i in range(len(CoI)):
    for j in CoI[i]:
    if r[2] in dataset[int(j[1:]) - 1]:
    firm = j
    operation_list[r[1]] = [[r[0], r[1], r[2], firm]]
    return True
    else:
    for i in range(len(dataset)):
    if r[2] in dataset[i]:
    for j in operation_list[r[1]]:
    if j[0] == 'read' and int(j[3][1:]) - 1 != i:
    return False
    break

    subject_coi = []
    for i in operation_list[r[1]]:
    if len(i) == 5:
    subject_coi.append(i[4] - 1)
    if i[0] == 'read' and r[2] in dataset[int(i[3][1:]) - 1]:
    operation_list[r[1]].append([r[0], r[1], r[2], i[3]])
    return True

    for i in range(len(CoI)):
    if i not in subject_coi:
    for j in CoI[i]:
    if r[2] in dataset[int(j[1:]) - 1]:
    firm = j
    operation_list[r[1]].append([r[0], r[1], r[2], firm])
    return True
    return False

    def read(r):
    if r[1] not in operation_list:
    for i in range(len(CoI)):
    for j in CoI[i]:
    if r[2] in dataset[int(j[1:]) - 1]:
    cl = i + 1
    firm = j
    operation_list[r[1]] = [[r[0], r[1], r[2], firm, cl]]
    return True
    else:
    subject_coi = []

    for i in operation_list[r[1]]:
    if len(i) == 5:
    subject_coi.append(i[4] - 1)
    if i[0] == 'read' and r[2] in dataset[int(i[3][1:]) - 1]:
    operation_list[r[1]].append([r[0], r[1], r[2], i[3]])
    return True

    for i in range(len(CoI)):
    if i not in subject_coi:
    for j in CoI[i]:
    if r[2] in dataset[int(j[1:]) - 1]:
    cl = i + 1
    firm = j
    operation_list[r[1]].append([r[0], r[1], r[2], firm, cl])
    return True
    return False

    def report_s(r):
    with open('operation_s.txt', 'w') as f:
    if r[1] in operation_list:
    for i in operation_list[r[1]]:
    f.write(' '.join(i[:4]) + '\n')

    def report_o(r):
    with open('operation_o.txt', 'w') as f:
    for i in operation_list.keys():
    for op in operation_list[i]:
    if r[1] in op[2]:
    f.write(' '.join(op[:4]) + '\n')
    def operation(command):
    global n, m, f, s
    r = command.split(' ')
    if command == 'start':
    operation_list.clear()
    elif command[:4] == 'read':
    if len(r) == 3:
    presence = False
    for i in dataset:
    if r[2] in i:
    presence = True
    if presence and r[1] in subject and read(r):
    print('accepted')
    else:
    print('refused')
    else:
    print('Неверный формат команды')
    elif command[:5] == 'write':
    if len(r) == 3:
    presence = False
    for i in dataset:
    if r[2] in i:
    presence = True
    if presence and r[1] in subject and write(r):
    print('accepted')
    else:
    print('refused')
    else:
    print('Неверный формат команды')
    elif command[:10] == 'brief_case':
    if len(r) == 2:
    presence = False
    for i in range(len(CoI)):
    if r[1] in CoI[i]:
    presence = True
    try:
    if presence and int(r[1][1:]) > 0:
    object_list = dataset[int(r[1][1:]) - 1]
    print(object_list)
    else:
    raise IndexError
    except ValueError:
    print('Неверный формат команды')
    except IndexError:
    print('Нет такой фирмы')
    else:
    print('Неверный формат команды')
    elif command[:6] == 'report':
    if len(r) == 2:
    presence = False
    for i in dataset:
    if r[1] in i:
    presence = True
    if presence:
    report_o(r)
    else:
    report_s(r)
    else:
    print('Неверный формат команды')
    else:
    print('Нет такой команды')

    while True:
    command = input("Для завершения введите 0.\nВведите команду:\n")
    if command == '0':
    break
    operation(command)
    print('\n')

    Тесты программы

    1. Входной файл input.txt



    Результаты:



    Директива report s1:



    Директива report o1:



    1. Входной файл input.txt:



    Результаты:



    Директива report s3:



    Директива report o6:



    написать администратору сайта