diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-11-13 11:43:52 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-11-13 11:43:52 +0400 |
| commit | bcee37a8dda3ced1c09a671ddf321352bbc284e9 (patch) | |
| tree | 861a6f3909296f4890a96c2499a6461bcb68b242 /reports/lab3/lab3.tex | |
| parent | 9bbc7b8c31458fbf8c639794531e3d324004d8d5 (diff) | |
Добавлены отчёты по 1, 3, 4, 6 и 7 лабам
Diffstat (limited to 'reports/lab3/lab3.tex')
| -rw-r--r-- | reports/lab3/lab3.tex | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/reports/lab3/lab3.tex b/reports/lab3/lab3.tex new file mode 100644 index 0000000..46063aa --- /dev/null +++ b/reports/lab3/lab3.tex @@ -0,0 +1,139 @@ +\documentclass[a4paper,oneside]{article} + +\usepackage[utf8]{inputenc} +\usepackage[T2A]{fontenc} +\usepackage[english,russian]{babel} + +\usepackage{amsmath} +\usepackage{mathtools} +\usepackage{amsfonts} +\usepackage{enumitem} +\usepackage{amsthm} + +\newtheorem{theorem}{Теорема}[subsection] +\newtheorem*{theorem*}{Теорема} + +% --- Определение --- % +\theoremstyle{definition} +\newtheorem{definition}{Определение}[subsection] +\newtheorem*{definition*}{Определение} +% ------------------- % + +\date{} + + +\title{Криптографические методы защиты информации, Лабораторная работа №3} +\author{Гущин Андрей, 431 группа, 1 подгруппа, 2 вариант} + +\begin{document} + +\maketitle + +Факторизацией натурального числа называется его разложение в произведение +простых множителей. Существование и единственность (с точностью до порядка +следования множителей) такого разложения следует из \textbf{основной теоремы +арифметики}. + +Простой перебор множителей является довольно неэффективным алгоритмом, +особенно для достаточно больших чисел. В таком случае необходимо выбрать другой +алгоритм разложения на множители. + +Например, таким является алгоритм Шермана Лемана. + +Пусть $n$ нечётно и $n > 8$. +\begin{enumerate} + \item + Для $a = 2, 3, \dots, \lfloor n^{1/3} \rfloor$ проверить условие + $a | n$. Если на этом шаге не удалось разложить $n$ на множители, + то переходим к следующему шагу. + + \item + Если на предыдущем шаге делитель не найден и $n$ --- составное, то $n = + pq$, где $p, q$ --- простые числа, и $n^{1/3} < p \leq q < n^{2/3}$. + Тогда для всех $k = 1, 2, \dots, \lfloor n^{1/3} \rfloor$ и для всех + $d = 0, \dots, \left\lfloor \frac{n^{1/6}}{4 \sqrt{k}} \right\rfloor + 1$ + проверить, является ли число $(\lfloor \sqrt{4kn} \rfloor + d)^2 - 4kn$ + квадратом натурального числа. Если является, то для $A = \lfloor \sqrt{4kn} \rfloor + d$ и + $B = \sqrt{A^2 - 4kn}$ выполнено сравнение: + \[ A^2 \equiv B^2 \pmod n \text{ или } (A - B)(A + B) \equiv 0 \pmod n \] + + В этом случае для $d^* = \gcd(A - B, n)$ проверяется неравенство + $1 < d^* < n$. Если оно выполнено, то $n = d^* \cdot (n / d^*)$ --- разложение $n$ на два множителя. + + Если алгоритм не нашёл разложение $n$ на два множителя, то $n$ --- простое число. +\end{enumerate} + +Можно заметить, что данный алгоритм имеет временную сложность $O(n^{1/3})$, +что является более эффективным результатом по сравнению с простым перебором +множителей, который имеет временную сложность $O(n^{1/2})$. + +Рассмотрим алгоритм для $n_1 = 21894583143407671$. $\lfloor n_1^{1/3} \rfloor += \lfloor 21894583143407671^{1/3} \rfloor = \lfloor 279755.66757 \rfloor = +279755$. Перебрав все простые числа $a = 2, 3, \dots, 279755$ и проверив +для каждого $(n_1 | a)$, я заметил, что ни одно из них не является простым +множителем числа 21894583143407671. Таким образом, переходим ко второму шагу +алгоритма. + +Снова будем перебирать все числа $k = 1, 2, 3, \dots, 279755$ и для каждого $k$ +вычислим значение $\left\lfloor \frac{n_1^{1/6}}{4 \sqrt{k}} \right\rfloor + +1 = \left\lfloor \frac{21894583143407671^{1/6}}{4 \cdot \sqrt{k}} \right\rfloor ++ 1 = \left\lfloor \frac{528.91934}{4 \cdot \sqrt{k}} \right\rfloor + 1$. + +Далее необходимо перебрать все $d = 0, \dots, \left\lfloor \frac{n_1^{1/6}}{4 +\sqrt{k}} \right\rfloor + 1$. + +Пусть $k = 1$, $d_{max} = \left\lfloor \frac{528.91934}{4 \cdot \sqrt{1}} +\right\rfloor = \left\lfloor \frac{528.91934}{4} \right\rfloor = +\left\lfloor 132.22983 \right\rfloor = 132$ + +Для каждого $d = 0, \dots, 132$ необходимо проверить является ли число +$(\lfloor \sqrt{4kn} \rfloor + d)^2 - 4kn$ полным квадратом натурального числа. + +Для $k = 1, d = 0$ это число равно $(\lfloor \sqrt{4 \cdot 1 \cdot +21894583143407671} \rfloor + 0)^2 - 4 \cdot 1 \cdot 21894583143407671 = +(\lfloor \sqrt{4 \cdot 1 \cdot 21894583143407671} \rfloor + 0)^2 - 4 \cdot 1 +\cdot 21894583143407671 = (\lfloor 295936365.75053 \rfloor)^2 - +87578332573630688 = 295936365^2 - 87578332573630688 = -444217463$. + +Отрицательное число не может быть квадратом натурального числа, поэтому +продолжаем перебор. + +$\dots$ + +Пусть $k = 26304$, $d_{max} = \left\lfloor \frac{528.91934}{4 \cdot \sqrt{26304}} +\right\rfloor = \left\lfloor \frac{528.91934}{162.18508} \right\rfloor = +\left\lfloor 3.26121 \right\rfloor = 3$ + +$\dots$ + +Для $k = 26304, d = 1$ это число равно $(\lfloor \sqrt{4 \cdot 26304 \cdot +21894583143407671} \rfloor + 1)^2 - 4 \cdot 26304 \cdot 21894583143407671 = +(\lfloor \sqrt{2303660460016781511936} \rfloor + 1)^2 - 2303660460016781511936 += (\lfloor 47996462994.858086 \rfloor + 1)^2 - 2303660460016781511936 = +47996462995^2 - 2303660460016781511936 = +2303660460030404370025 - 2303660460016781511936 = 13622858089$. + +Число 13622858089 является полным квадратом числа 116717. + +Вычислим $A = \lfloor \sqrt{4 * k * n} \rfloor + d$ и $B = \sqrt{A^2 - 4kn}$: + +$A = \lfloor \sqrt{4 \cdot 26304 \cdot 21894583143407671} \rfloor + 1 = +47996462995$. + +$B = \sqrt{47996462995^2 - 4 \cdot 26304 \cdot 21894583143407671} = 116717$. + +Выполним сравнение $A^2 \equiv B^2 \pmod n$. + +$47996462995^2 \equiv 116717^2 \pmod {21894583143407671} = +2303660460030404370025 \equiv 13622858089 \pmod {21894583143407671} = +13622858089 \equiv 13622858089 \pmod {21894583143407671}$. + +Так как это выражение верно, вычислим $d^* = \gcd(A - B, n) = +\gcd(47996462995 - 116717, 21894583143407671) = +\gcd(47996346278, 21894583143407671) = 175169147$ + +Для данного $d^*$ выполняется равенство $1 < d^* < n$, значит это число является +множителем числа $n$, а вторым множителем является число $n / d^* = 124991093$. + + +\end{document} |