
- •Методические указания
- •Пояснительная записка
- •Литература для подготовки к выполнению лабораторных работ.
- •Содержание
- •Лабораторная работа №1 Булевы преобразования двоичных последовательностей
- •Теоретические пояснения
- •1.Постановка задачи
- •3.Минимизация слабо определенных булевых функций
- •4.Использование булевых преобразований двоичных последовательностей в криптографии
- •Использованные источники
- •Порядок выполнения лабораторной работы
- •Лабораторная работа №2 Элементы теории чисел
- •Теоретические пояснения
- •1.Представление чисел в канонической форме
- •2.Нахождение количества делителей числа n
- •3.Нахождение нок и нод чисел
- •4.Нахождение евклидовых чисел
- •Порядок выполнения лабораторной работы
- •Лабораторная работа n3 Исследование схем разделения секрета
- •Теоретические пояснения
- •1. Мажоритарный принцип.
- •2.Принцип с произвольным порогом
- •Использованные источники
- •Порядок выполнения лабораторной работы
- •Лабораторная работа №4 Исследование криптографической системы rsa
- •Теоретические пояснения
- •1. Идея криптосистемы rsa
- •2.Использование систем с открытым распределением ключей для абонентских сетей
- •3.Криптографические протоколы
- •4.Банки и клиенты
- •Использованные источники
- •Порядок выполнения лабораторной работы
Содержание
Булевы преобразования двоичных последовательностей ............................................….3
Элементы теории чисел ………….................................................................................…...9
Исследование схем разделения секрета ............................................................................11
Исследование криптографической системы RSA ............................................................17
Лабораторная работа №1 Булевы преобразования двоичных последовательностей
Цель работы: Ознакомить студентов с методами преобразования двоичных последовательностей булевыми функциями и использованием этих преобразований для решения некоторых задач защиты информации в компьютерных сетях.
Теоретические пояснения
1.Постановка задачи
Пусть имеются две двоичные последовательности A(a1,a2,…,an) и B(b1,b2,…,bn), При этом ai,bi {0,1}, i = 1,2,3,…,n. Элементы последовательности B будем получать булевым преобразованием последовательности A, при этом bi будет результатом булевого преобразования, зависящего от ai и некоторых элементов из окружения ai. Максимальное число аргументов булевой функции F равно N= 2n-1. Так для n = 3 , N = 5, для n = 4, N = 7, для n = 5, N = 9. Здесь и далее ai = 0 при 0> i >n-1.
2.Теорема о преобразованиях двоичных последовательностей.
Сформулируем теорему, на основании которой можно строить булевы функции, преобразующие одну последовательность в другую. Эта теорема является аналогом теоремы, доказанной в [1].
Теорема: Для того, чтобы существовали булевы функции F, преобразующие произвольную последовательность А в произвольную последовательность В необходимо и достаточно, чтобы А была бы ненулевой последовательностью. Число аргументов F не превышает 2n –1.
Необходимость следует из того, что при нулевой последовательности А все элементы последовательности В будут либо нулями, либо единицами и в этом случае В не может быть произвольной последовательностью.
Для доказательства достаточности построим часть таблицы истинности функции F , в которой функция определена:
-
a1 a2 … an
b1
a1 a2 … an
b2
a1 a2 … an
b3
………………...................
....
a1 a2 … an+1
bn
Если хотя бы один элемент последовательности А не равен 0, то все наборы, на которых функция определена будут различными, поэтому не существует ни одной одинаковой пары наборов, на которой функция должна принимать одновременно значение 0 и 1.
Пример. Пусть A (101), B(011). Функции F будут зависеть от аргументов F(ai-2,ai-1,ai,ai+1,ai+2). Таблица истинности этих функций (точнее только та ее часть, на которой функции определены) будет иметь вид:
ai-2 |
ai-1 |
ai |
ai+1 |
ai+2 |
B |
|
|
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
1 |
|
|
1 |
Функции пяти аргументов задается на 32 наборах. Однако эта функция задана в примере всего на трех наборах. На остальных 29 наборах функция неопределена и ее можно доопределить 229 способами. Диаграмма Вейча этой функции будет иметь вид:
-
-----------------------------------
ai-2
-----------------------------------
ai-1
----------------
----------------
ai
--
--
--
--
--
--
0
--
|
|
--
--
--
--
--
--
--
--
|
|
--
--
--
--
1
--
--
--
ai+2
--
1
--
--
--
--
--
--
ai+1
Доопределить
и минимизировать данную функцию
достаточно просто:
.
Действительно, применив булево
преобразование F к A, получим B. При длинах
векторов A и B равных n, булева функция
будет задаваться на n наборах, а на
2(2n-1)
– n наборах функция будет не определена.
Доопределение и минимизация булевой
функции не однозначны.
Определение. Два набора Ai и Aj длины n будем называть связанными сдвигом, если при некотором сдвиге одного набора относительно другого у этих наборов совпадают позиции всех единиц. Например, A = 1 0 0 1 0 1 1 0 0 0 и B = 0 0 1 0 0 1 0 1 1 0 – наборы, связанные сдвигом. Из приведенной выше теоремы сформулируем следствия.
Следствие 1. Если Ai, i = 1,2,3,…,k – двоичные векторы не связанные сдвигом и В – произвольный вектор, то существуют булевы функции F, преобразующие любой вектор Ai в вектор В, т.е. B = F(Ai), i = 1,2,3,…,k.
Пример 1. Пусть A1 = 1011; A2 = 1001; A3 = 0110; B = 0111. Построим часть таблицы истинности функции F, выписывая только те наборы, на которых функция определена.
-
a b c d e g h
F
1 0 1 1
0
1 0 1 1
1
1 0 1 1
1
1 0 1 1
1
1 0 0 1
0
1 0 0 1
1
1 0 0 1
1
1 0 0 1
1
0 1 1 0
0
0 1 1 0
1
0 1 1 0
1
0 1 1 0
1
Упражнение.
Постройте
диаграмму Вейча функции F, и убедитесь
в том, что при некотором способе
доопределения функция будет иметь вид:
.
Проверьте, что эта функция из любой приведенной последовательности Ai (i = 1,2,3) строит одну и ту же последовательность В.
Следствие 2. Если Ai и Bi – произвольные векторы, причем Ai не связаны сдвигом, то существуют булевы функции F, преобразующие каждый вектор Ai в соответствующий ему вектор Bi.
Пример 2. Пусть требуется найти функцию F, преобразующую векторы
A1 = 1011 в вектор B1 = 0110,
A2 = 0111 в вектор B2 = 1001,
A3 = 0101 в вектор B3 = 1110.
Построим часть таблицы истинности функции F, выписывая только те наборы, на которых функция определена.
-
a b c d e g h
F
1 0 1 1
0
1 0 1 1
1
1 0 1 1
1
1 0 1 1
0
0 1 1 1
1
0 1 1 1
0
0 1 1 1
0
0 1 1 1
1
0 1 0 1
1
0 1 0 1
1
0 1 0 1
1
0 1 0 1
0
Упражнение.
Постройте
диаграмму Вейча функции F, и убедитесь
в том, что при некотором способе
доопределения функция будет иметь вид:
.
Следствие 3. Если Ai, i = 1,2,3,…,k – произвольные двоичные векторы, не связанные сдвигом, то существуют булевы функции F, преобразующие A1 в любой вектор Ai, т.е. A2=F(A1), A3 = F(A2), …, Ak = F (Ak-1) и A1 = F(Ak)
Пример 3. Пусть требуется найти булеву функцию F, обеспечивающую следующие преобразования: A1 A2 A3 A4 A5 A6 A1, где A1 = 1011, A2 = 0110, A3 = 0111, A4 = 1001, A5= 0101, A6 = 1111.
Упражнение. Используя описанную выше методику, выпишите часть таблицы истинности, постройте диаграмму Вейча и найдите один из вариантов решения (в диаграмме Вейча в пустых клетках должны стоять прочерки, т.е. на этих наборах функция не определена). Диаграмма Вейча этой функции будет иметь вид:
------------------------------------------- d |
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
------------------------------------------- c |
|
|
|
|
|
|
||||||||
|
|
-------------------- |
|
|
|
|
-------------------- b |
|
|
|
|
|||||||
|
-------- |
|
|
-------- |
|
|
-------- |
|
|
-------- a |
|
|
|
|||||
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | g |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | f |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0 |
|
|
|
|
|
|
1 |
0 |
|
|
|
|
|
|
|
|
||
1 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
| | e |
|
|
1 |
|
|
|
0 |
|
|
0 |
1 |
|
|
1 |
1 |
|
|
|
|
||
|
0 |
0 |
1 |
0 |
1 |
|
1 |
|
1 |
1 |
0 |
|
|
|
|
|
|
Одно из возможных решений: F = a c e e g a b ac c d c d e b c e f g. (знак «» означает унарную операцию отрицания).
Представляет интерес
определить количество наборов длины n
не связанных сдвигом и их долю в общем
числе двоичных наборов длины n. Расчет
произведем для наборов длины n веса q
(т.е. содержащих ровно q единиц). Для этого
заметим, что если в младшем (например,
левом) разряде поставить 1, а остальные
q-1 единиц на оставшихся n- 1 позициях
расставить так, чтобы получить разные
двоичные коды, то мы получим все наборы,
не связанные сдвигом, содержащие ровно
q единиц. Тогда число таких наборов будет
равно
.
Поскольку общее число наборов длины n
веса q равно
,
то доля наборов не связанных сдвигом
составляет q/n. Так, например, при n = 20, q
= 10 S(20,10) = 92378.