Засоби односторонньої автентифікації користувачів

Розробка протоколу односторонньої автентифікації з використанням псевдовипадкових чисел і алгоритму геш-функції. Ознайомлення з узагальненим описом криптографічного протоколу. Обгрунтування вибору програмного забезпечення та спеціалізованого процесору.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 06.05.2021
Размер файла 508,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

Вінницький національний технічний університет

Факультет інформаційних технологій та комп'ютерної інженерії

Кафедра захисту інформації

Курсовий проект з дисципліни: «Прикладна криптологія»

На тему: «Засоби односторонньої автентифікації користувачів"

08-20.ПК.020.10.110 ПЗ

Студента 3 курсу 1БС-17 (б) групи

Спеціальність 125 - Кібербезпека

ОПП - Безпека інформаційних і комунікаційних систем

Кухарець Оксани Володимирівни

Керівник ас. каф. ЗІ Остапенко-Боженова А. В.

Вінниця - 2020

Вінницький національний технічний університет

Факультет інформаційних технологій та комп'ютерної інженерії

ЗАТВЕРДЖУЮ

Зав. кафедри ЗІ, д. т. н., проф. В.А. Лужецький

Індивідуальне завдання на курсовий проект з дисципліни "Прикладна криптологія"

студенту групи 1БС-76б факультету ІТКІ Кухарець Оксана Володимирівна

Тема: Засоби односторонньої автентифікації користувачів

1. Проаналізувати криптографічний алгоритм, визначити аналогічні та виконати порівняльний аналіз з ними.

2. Виконати аналіз криптографічного протоколу з використанням BAN-логіки.

3. Розробити структуру спеціалізованого процесора, що реалізує криптографічний протокол. Результати виконання даного етапу формалізувати у вигляді схем електричних структурних.

4. Для спеціалізованого процесора визначити:

- час реалізації криптографічного протоколу (в умовних одиницях);

- складність апаратури (в умовних одиницях);

- обсяг пам'яті.

5.Розробити алгоритм, що реалізує протокол та реалізувати його у вигляді програмного засобу. Результати виконання даного етапу формалізувати у вигляді схем програми.

Вихідні дані:

криптографічний алгоритм - ключового гешування SHA-3;

метод рандомізації - псевдовипадкові числа;

довжина ключа - 256 біт.

Керівник А. В. Остапенко-Боженова

Завдання отримав О.В. Кухарець

Анотація

УДК 004.056

Кухарець О. В. Засоби односторонньої автентифікації користувачів. Курсовий проект/ О. В. Кухарець Вінниця. ВНТУ, 2020. - 26 ст.

Українською мовою. Рисунків - 9, бібліографій - 10.

Курсовий проект присвячений розробці протоколу односторонньої автентифікації з використанням псевдовипадкових чисел і алгоритму геш-функції SHA-3. У проекті проведено аналіз розробленого криптопротоколу з використанням BAN-логіки. Реалізовано спеціалізований процесор, для криптопротоколу та розроблено програмний засіб, який реалізує процес проходження автентифікації за допомогою протоколу односторонньої автентифікації на основі алгоритму геш-функції SHA-3 та псевдовипадкових чисел.

Abstract

Kukharets O. V. One-way authentication tools for users. Course project / O. V. Kukharets Vinnitsya. VNTU, 2020. - 26 pages.

In ukrainian. Figures - 9, bibliographies - 10.

The course project is dedicated to the development of one-sided authentication protocol using pseudorandom numbers and the SHA-3 hash algorithm. The project analyzes the developed cryptocurrency using BAN-logic. A specialized processor for cryptocurrency has been implemented and a software tool has been developed that implements the process of authentication using a one-sided authentication protocol based on the SHA-3 hash algorithm and pseudorandom numbers.

Зміст

Індивідуальне завдання

Анотація

1. Розробка криптопротоколу

1.1 Одностороння автентифікація

1.2 Алгоритм геш-функції SHA-3

1.3 Узагальнений опис криптографічного протоколу

2. Аналіз криптопротоколу

2.1 Постулати і правила BAN-логіки

2.2 Аналіз криптопротоколу з використанням BAN-логіки

3. Розробка структури спеціалізованого процесора

3.1 Розробка операційного автомату спеціалізованого засобу

3.2 Розробка структурної схеми спеціалізованого процесора

3.3 Визначення технічних характеристик спеціалізованого процесора

4. Розробка програмного застосунку

4.1 Обґрунтування вибору програмного забезпечення

4.2 Реалізація основних функцій програми

4.3 Тестування програмного засобу

Висновки

Перелік використаних джерел

Додатки

Графічна частина

Вступ

Кількість об'єктів, на яких функціонують системи контролю доступу з незахищеною технологією ідентифікації досягають десятків тисяч. Цінність інформації, постійні загрози інформаційній безпеці роблять процес автентифікації важливим в будь-який час.

Сьогодні особлива увага приділяється інформаційній безпеці, основним завданням якої є створення системи заходів, які спрямовані на недопущення несанкціонованого доступу сторонніми особами до інформації, або порушення її цілісності.

Основним методом забезпечення захисту інформації від несанкціонованого доступу є використання криптографічних протоколів. В основі протоколів лежать математичні перетворення, які забезпечують стійкість до зламу [1]. Реалізація такого захисту неможлива без використання програмного та апаратного забезпечень.

Метою курсового проекту є покращення процесу автентифікації користувачів та збільшення стійкості до зламу шляхом розробки програмного та апаратного засобів, що реалізують протокол односторонньої автентифікації на основі геш-функції SHA-3 та псевдовипадкових чисел.

Для досягнення поставленої мети необхідно розв'язати такі задачі:

- проаналізувати види протоколів автентифікації;

- здійснити аналіз алгоритму геш-функції SHA-3;

- виконати опис криптопротоколу односторонньої автентифікації з використанням псевдовипадкових чисел та геш-функції SHA-3;

- провести аналіз криптопротоколу з використанням BAN-логіки;

- розробити структуру спеціалізованого процесора для протоколу;

- розробити програмний засіб, що реалізує протокол односторонньої автентифікації на основі геш-функції SHA-3 та псевдовипадкових чисел.

1. Розробка криптопротоколу

1.1 Одностороння автентифікація

Криптографічний протокол - це абстрактний чи конкретний протокол, що включає набір криптографічних алгоритмів [1]. В основі протоколу лежить набір правил, що регламентують використання криптографічних перетворень та алгоритмів в інформаційних процесах.

Автентифікація - процедура перевірки автентичності користувача, що входить в систему суб'єкта і який показав свій ідентифікатор [2]. Автентифікацію не слід плутати з авторизацією (процедурою надання суб'єкту певних прав).

Протокол автентифікації - криптографічний протокол, в ході якого одна сторона переконується: 1) в ідентичності іншої сторони, залученої до протоколу; 2) в активності іншої сторони під час або безпосередньо перед моментом придбання доказу [2].

Протоколи типу «запит - відповідь» - це протоколи у яких претендент доводить свою ідентичність перевіряючому шляхом демонстрації знання деякого секрету [2]. У деяких протоколах секрет відомий перевіряючому і використовується для перевірки відповіді, в інших - взагалі немає необхідності, щоб секрет був відомий перевіряючому. При виконанні протоколу претендент повинен відповісти на запит, який змінюється від сеансу до сеансу, причому відповідь повинна залежати і від запиту, і від відомого йому секрету. Запит - це зазвичай деяка змінна величина, обрана перевіряючим на початку протоколу. Якщо лінія зв'язку між учасниками протоколу прослуховується противником, то відповідь претендента не повинна постачати противнику будь-яку корисну для нього інформацію, яка може бути використана в наступних сеансах протоколу. Для цього всі запити перевіряючого обов'язково повинні відрізнятися один від одного. Мінливі запити перевіряючого використовуються для протидії атакам на протокол методами повтору сеансу і включення в канал. Вони забезпечують гарантії унікальності і актуальності кожного сеансу протоколу. У криптографічних протоколах широко використовується таке поняття як свіжість тієї чи іншої величини. Воно має на увазі, що значення цієї величини було згенеровано на початку або в ході виконання поточного сеансу протоколу.

В даному проекті використовується одностороння автентифікація. Це означає, що клієнт доводить серверу свою особу. В якості змінюваних від сеансу до сеансу параметрів запиту можуть використовуватися три типи величин: випадкові числа, числові послідовності і мітки часу. При цьому важливо, щоб була гарантована цілісність цих одноразових величин, що зазвичай реалізується шляхом криптографічної прив'язки їх до інших використовуваних в протоколі даних. В розробці проекту використано генератор псевдовипадкових чисел. Випадкові числа легко генерувати всім сторонам протоколу, при цьому від учасників не потрібна підтримка будь-якої додаткової інформації. Їх зазвичай позначають символами r з відповідними індексами [2].

Одностороння автентифікація з використанням випадкових чисел в якості запиту перевірки використовує випадкове число, тому необхідний генератор псевдовипадкових чисел. Отримавши запит, претендент обчислює відповідь на нього, використовуючи алгоритм симетричного шифрування, випадкове число п ідентифікатор V. Перевіряючий розшифровує отриманий шифртекст і перевіряє структуру запиту. Якщо вона вірна, він приймає претендента. автентифікація криптографічний програмний

Одним з найбільш відомих атак на протокол автентифікації є заміна - спроба підмінити одного користувача іншим. Порушник, виступаючи від імені однієї зі сторін і повністю імітуючи її дії, отримує у відповідь повідомлення певного формату, необхідних для підробки окремих кроків протоколу.

Протидіяти даній атаці можна за допомогою таких методів:

- збереження в таємниці від противника інформації, яка визначає алгоритм ідентифікації;

- використання різних форматів повідомлень, переданих на різних етапах протоколу;

- вставка в них спеціальних ідентифікаційних міток і номерів повідомлень.

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

1.2 Алгоритм геш-функції SHA-3

SHA-3 (Secure Hash Algorithm Version 3), також іменований Keccak, є односпрямованою функцією для створення цифрових відбитків обраної довжини (в стандарті прийняті 224, 256, 384 або 512 біт) з вхідних даних будь-якого розміру, розробленим групою авторів на чолі з Йоаном Дайменом в 2008 році і прийнятим в 2015 в якості нового стандарту має відповідати довжині вхідного блоку функції стиснення до обраного розміру "криптографічного губкою" .

Конструкція "криптографічної губки" - це відображення вхідних даних змінної довжини в вихідні дані також змінної довжини [4]. Перетворення (або перестановка) оперує з фіксованою кількістю біт, де називається бітової швидкістю, а ємністю. На початковому етапі, вхідні дані розширюються відповідно до заданого алгоритму, після чого розбиваються на блоки по біт. Далі біт стану ініціалізуються нулями.

Конструкція включає дві фази (рис. 1.1). В першій фазі (абсорбування) -бітові блоки повідомлення підсумовуються (операція XOR) з першими бітами внутрішнього стану - результату перетворення . Коли ця операція виконана для всіх блоків повідомлення, фаза завершується. Далі, на фазі «віджиму» перші біт внутрішнього стану повертаються в якості вихідних блоків . Ця дія повторюється, поки не буде отримана бажана довжина хеш-суми.

Рисунок 1.1 - Структура перетворення криптографічної губки[4]

Функція перестановок включає в себе функції , і . Функція використовується для рядків довжини 2 ступеня, тобто . Стан можна уявити у вигляді тривимірного масиву розміром . Тоді елемент масиву має вигляд - біт рядка стану . Є п'ять кроків за якими працює функція .

Алгоритм SHA-3 має підтримувати для всіх біт хеш-суми виконання наступних умов:

- стійкість до знаходження прообразу для біт;

- стійкість до знаходження другого прообразу для біт, де перший прообраз має довжину не більше блоків;

- стійкість до колізій для біт;

- стійкість до атак доповненням повідомлення;

- для будь-якого будь-яка підмножина з біт хеш-суми довжиною в біт має задовольняти вище названі умовам.

В порівняні з алгоритмами SHA-1 та SHA-2 робота SHA-3 в апаратних засобах набагато швидша, проте в програмному забезпечені він програє. SHA-3 можна реалізувати в мініатюрних вбудованих приладах (наприклад, USB-флеш-накопичувач). Оскільки алгоритм роботи SHA-3 значно відрізняються від SHA-2, то і вразливості різні. Таким чином, атаки попереднього алгоритму не спрацюють з SHA-3.

У травні 2014 року на сайті конкурсу по криптоаналізу Keccak з'явилася новина про атаку з практичної складністю на 6 раундів Keccak

в режимі потокового шифру або для обчислення коду автентифікації. У режимі потокового шифру Keccak був атакований з параметрами і , складність пошуку 128-бітного ключа склала 236. В фазі приготування імітованої вставки 80-бітний ключ був зламаний за 235.

1.3 Узагальнений опис криптографічного протоколу

Розглянемо протокол односторонньої автентифікації з використанням псевдовипадкових чисел та алгоритму геш-функції SHA-3. Оскільки геш-функцію неможливо розшифрувати, то даний криптографічний протокол не міститиме операції розшифрування та секретного ключа. Кожна з сторін проведе гешування за допомогою алгоритму SHA-3 і сторона, що отримає геш від іншої сторони, зрівняє свій результат з отриманим.

Для представлення протоколу введемо наступні позначення:

- суб'єкти, що встановлюють зв'язок;

- ідентифікатор сторони ;

- ідентифікатор сторони ;

- псевдовипадкове число сторони ;

- функція гешування сторони ;

- функція гешування сторони .

Для роботи протоколу необхідне виконання умови, згідно до якої ідентифікатори сторін, що використовується для ідентифікації кожної з сторін, заздалегідь розподілені між учасниками криптопротоколу.

Ініціатором встановлення зв'язку будемо вважати суб'єкта . Процес автентифікації розпочинається з генерування стороною псевдовипадкового числа . Сторона надсилає псевдовипадкове число по відкритому каналу стороні .

(1)

Суб'єкт , після отримання від сторони псевдовипадкового числа гешує його та ідентифікатори сторін:

(2)

Суб'єкт , після відправлення псевдовипадкового числа, додає до нього свій ідентифікатор та ідентифікатор сторони , робить відповідні обчислення та надсилає таке повідомлення:

(3)

Після отримання повідомлення від сторони порівнює своє гешоване значення з отриманими даними від :

(4)

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

Отже при реалізації криптопротоколу односторонньої автентифікації з використанням псевдовипадкових чисел та алгоритму геш-функції SHA-3 потрібно виконати гешування даних зі сторони , а також для перевірки співпадіння гешів виконується гешування стороною .

2. Аналіз криптопротоколу

2.1 Постулати і правила BAN-логіки

BAN-логіка - це логіка розроблена для аналізу властивостей «знання» і «довіри» роботи криптопротоколу в цілому чи його окремих частин [5]. Зокрема BAN-логіка допомагає своїм користувачам, визначити чи є інформація, що бере участь в обміні справжньою та захищеною від прослуховування. Перше, про що говорить BAN-логіка - це те, що конфіденційність і автентичність інформації, переданої в будь-якому середовищі, знаходяться під загрозою. Звичайна послідовність даної логіки складається з трьох кроків:

1) перевірка джерела повідомлення;

2) перевірка свіжості повідомлення;

3) перевірка достовірності джерела.

Основна ідея BAN-логіки полягає в тому, що при аналізі подібних протоколів в першу чергу слід звернути увагу на те, як сторони, що беруть участь в процесі автентифікації, сприймають інформацію - що вони приймають на віру, а що достеменно їм відомо або може бути виведено логічним шляхом з достовірних для них фактів.

Аналіз протоколу за допомогою BAN-логіки дозволяє з'ясувати:

- чи містить досліджуваний протокол надлишкові кроки, які не впливають на безпеку криптопротоколу;

- чи необхідно включити у криптопротокол додаткові кроки;

- чи необхідно зашифровувати повідомлення, чи достатньо його передавати у відкритому вигляді;

- основний результат, якого можна досягти з використанням криптопротоколу.

Основні постулати, що застосовуються у BAN-логіці:

1) P believes X - Р вірить у те, що Х - істинно;

2) P sees X - хто-небудь послав Р повідомлення, що містить Х і Р може прочитати і повторити Х (можливо після розшифрування);

3) P said X - Р коли-небудь посилав повідомлення, що містить Х і при цьому Р довіряв Х, в момент його передавання;

4) P control X - Р має права на Х;

5) #(X ) - Х не було використано в попередніх ітераціях протоколу;

6) - P i Q розділяють між собою ключ К і відповідно P i Q довіряють один одному;

7) - Р має відкритий ключ К, що відповідає секретному ключу К-1, який ніколи не буде розкритий іншими учасниками криптопротоколу;

8) - секретна формула Х відома тільки P i Q і вони можуть використовувати її для ідентифікації один одного;

9) {X}K from P - Х зашифровано на ключі К, що належить Р.

Правила BAN-логіки:

1) - Р вірить, що Q і Р розділяють між собою секретний ключ К, і Р бачить повідомлення Х, зашифроване на ключі К, тому Р вірить, що Q послав Х.

2) - Р вірить, що Q має право на Х і Р вірить Q , що Q вірить Х , тому Р довіряє Х.

3) - Р вірить у те, що Х до цього не використовувалося і Q послав Х, тому Р може думати, що Q довіряє Х.

2.2 Аналіз криптопротоколу з використанням BAN-логіки

Порядок аналізу:

1) представлення протоколу в ідеалізованій формі;

2) присвоєння початкових значень;

3) застосування логічних формул до станів протоколу, для одержання тверджень про стани системи після кожного кроку протоколу;

4) застосування логічних постулатів до початкових значень і послідовності тверджень, для вивчення довіри частинам протоколу.

Виконаємо аналіз односторонньої автентифікації з використанням псевдовипадкових чисел та алгоритму гешування SHA-3.

Для представлення протоколу в ідеалізованій формі вилучимо з нього кроки, на яких дані передаються в незашифрованому вигляді і застосуємо правила BAN-логіки до даних, які шифруються:

Сторона відправляє стороні зашифровані за допомогою геш-функції псевдовипадкове число та ідентифікатори сторін.

Введемо позначення, замінивши зашифровані стороною та стороною значення:

;

.

Після введення позначень представимо даний протокол використовуючи постулати BAN-логіки:

- вірить, що дійсно зашифрувала ;

- після знаходження геш-значення , сторона може переконатися в рівності з ;

- якщо та рівні між собою, то довіряє .

Представимо протокол в ідеалізованій формі, для цього використаємо правила BAN-логіки:

Сторона вірить, що сторона має права на , і в те, що та рівні між собою. Звідси отримуємо, що сторона довіряє .

За результатами аналізу можна зробити висновок, що протокол є стійким та дозволяє виявити несанкціоноване втручання сторонньої особи. За результатом BAN-логіки було з'ясовано, що протокол односторонньої автентифікації з використанням геш-функції SHA-3 та псевдовипадкових чисел надійний, оскільки дозволяє переконати сторону у автентичності сторони . Попередній обмін ідентифікаторами сторін між собою дає можливість кожній з сторін знати про існування одна одної та усвідомлювати від кого приходять запити. Так як, стороні відомі ідентифікатори сторін та псевдовипадкове число і сторона має ті ж самі дані, то при спробі третьої сторони підмінити надіслане від повідомлення, втручання буде виявлено. Оскільки, обидві сторони гешують однакові дані, то сторона з легкістю може впевнитися в автентичності , якщо геш співпаде з отриманим повідомленням. Досліджений протокол не містить надлишкових кроків, оскільки використовує одну операцію гешування при виконанні односторонньої авторизації.

В даному розділі представлено ідеалізований вигляд протоколу з використанням правил BAN-логіки. Дане представлення використовуватиметься для розробки протоколу односторонньої автентифікації з використанням псевдовипадкових чисел та алгоритму геш-функції SHA-3.

3. Розробка структури спеціалізованого процесора

3.1 Розробка операційного автомату спеціалізованого засобу

Складовою частиною спеціалізованого процесора, що реалізує криптографічний протокол, є операційний автомат. Математично операційний автомат описується таким набором множин: , де:

- множина вхідних станів;

- множина вихідних станів;

- множина проміжних станів;

- множина функцій перетворення станів;

- множина логічних умов.

Визначимо для протоколу автентифікації множини, що входять до складу операційного автомату для сторін і згідно криптопротоколу:

= ;

= ;

= ;

= ,

де - ідентифікатор сторони ;

- ідентифікатор сторони ;

- псевдовипадкове число сторони ;

- обраховане геш-значення сторони ;

- обраховане геш-значення сторони ;

- функція гешування;

- функція генерації випадкових чисел;

- функція порівняння гешів;

- результат автентифікації.

Отже, визначивши основний набір функцій, що реалізує спеціалізований процесор, перейдемо до розробки його структурної схеми.

3.2 Розробка структурної схеми спеціалізованого процесора

Для побудови структурної схеми спеціалізованого процесора використано канонічний метод синтезу. Відповідно до цього методу кожному математичному елементу наведених множин поставлено у відповідність структурний елемент. Елементам множин відповідають входи процесора. Елементам множин відповідають виходи процесора. Елементам множин S відповідають регістри для збереження даних. Врахувавши дані правила, розробимо схему спеціалізованого процесора для реалізації криптопротоколу [7].

Размещено на http://www.allbest.ru/

Рисунок 3.1 - Структурна схема спеціалізованого засобу для реалізації криптопротоколу

Ідентифікатори між сторонами уже розподілені, вони знаходяться в регістрах Рг1 та Рг2. Генератор псевдовипадкових чисел генерує для сторони число, яке надсилається стороні і зберігається в регістрі Рг3. За допомогою функції гешування заснованій на алгоритмі гешування SHA-3 сторона гешує значення і воно записується в регістр Рг4. Сторона , також гешує ці самі значення. Отримані геш-значення порівнюємо за допомогою функції порівняння (див. рис. 3.1). Також необхідні регістри для зберігання таких даних: швидкість і ємність функції, розмір ключа (256 біт).

Алгоритм гешування SHA-3 складається з двох частин: «абсорбування» (рис. 3.2) та «віджимання».

Рисунок 3.2 - Структурна схема спеціалізованого засобу для реалізації етапу «абсорбування»

На етапі «абсорбування» повідомлення розбивається на блоки довжини , за допомогою функції доповнення. Кожен блок повідомлення додається по модулю два до - блок швидкості, в якому виконується запис і зчитування, також є блок - блок ємності, який не бере участь в введені/виведені. Обидва блоки утворюють рядок стану. Спочатку обидва блоки стану заповнені нулями: розмір блоку швидкості 1088 біт, а блоку ємності - 512 біт. Отримані дані підлягають дії функції перестановки. Результат на виході функції перестановки знову додається по модулю два уже з наступним блоком, отриманим внаслідок функції доповнення. Ці дії продовжуються до того моменту, поки не відбудеться дія з останньою частиною утвореною за допомогою цієї ж самої функції доповнення. Наступний етап - «віджимання» (рис. 3.3).

Рисунок 3.3 - Структурна схема спеціалізованого засобу для реалізації етапу віджимання

Після отримання результату на етапі абсорбування, результат додається з блоком, який міститиме геш, його початковий стан заповнений нулями. Результат додавання порівнюється з розміром гешу , який має бути на виході. Якщо результат менший, то виконується функція перестановки і результат знову додається, а потім порівнюється. Дії будуть продовжуватися до того часу, поки кількість бітів результату не перевищуватиме кількість бітів очікуваного гешу. Потім отримані дані обрізаються до розміру заданого гешу.

3.3 Визначення технічних характеристик спеціалізованого процесора

Для розробленого процесора визначаються такі технічні характеристики:

– час реалізації криптопротоколу;

– складність апаратури для обчислень;

– ємність пам'яті.

Час реалізації криптопротоколу () буде визначатися в таких умовних одиницях:

– час виконання операції порівняння - ;

– час генерації псевдовипадкового числа - ;

– час виконання функції гешування - ;

– час виконання етапу абсорбації - ;

– час виконання додавання за модулем два - ;

– час виконання функції перестановки - ;

– час виконання етапу віджимання - ;

– час виконання блоку додавання - ;

– час виконання функції обрізання - .

Час реалізації криптопротоколу - це час, який потрібен для виконання

процесу автентифікації сторонам і .

Значення обчислюється за формулою , де 2. Так для b = 1600, Кількість раундів дорівнює 24. Загальний час, який необхідно витратити на реалізацію криптопротоколу дорівнює:

Для визначення складності апаратури для обчислень, необхідно вирахувати розмірність всіх пристроїв, які присутні на схемі та виконують дії. Отже, для засобу потрібно: чотири 32-розрядних, два 128-розрядних регістри, три 32-розрядних функціональних блоки, один 64-розрядний функціональний блок та по одному 128-розрядних і 256-розрядних блоки. Тому складність апаратури дорівнює розрядів регістра.

4. Розробка програмного застосунку

4.1 Обґрунтування вибору програмного забезпечення

Для розробки протоколу автентифікації обрано мову програмування JavaScript, а точніше бібліотеки цієї мови - React.

React - це інструмент для створення користувацьких інтерфейсів. Його головне завдання - забезпечення виведення на екран того, що можна бачити на веб-сторінках. React значно полегшує створення інтерфейсів завдяки розподіленню кожної сторінки на невеликі фрагменти. Дані фрагменти називаються компонентами. React може використовуватися для розробки односторінкових і мобільних додатків. Його мета - надати високу швидкість, простоту і масштабованість [8].

Для реалізації алгоритму гешування використовується TypeScript. Він заохочує більш декларативний стиль програмування через такі речі, як інтерфейси і статичну типізацію, пропонує модулі і класи, а найголовніше, досить добре інтегрується з популярними бібліотеками та кодом JavaScript.

Будь-який сайт не можливо реалізувати без HTML та CSS. Вони є основою кожної сторінки. Засіб для пошуку фейкової інформації не став винятком.

HTML - це не мова програмування [9]. Це форма збереження даних. Чим відрізняється мова програмування від мови розмітки? Глобально - мова програмування програмує дещо на виконання деяких дій, а мова розмітки готує певним чином деякий документ для того, щоб абияка програма могла його використовувати. Розмітка - лише розмітка і тільки розмітка - ніякого програмування.

CSS (абревіатура від Cascading Style Sheets, що в перекладі означає каскадні таблиці стилів) - це спеціальна мова (мова стилів), за допомогою якої описують вигляд документів (як і де відображати елементи вебсторінки), написаних мовами розмітки даних.

Основна ідея CSS в тому, щоб відокремити дизайн документа від його вмісту. CSS відповідає за оформлення і зовнішній вигляд, а XHTML/HTML - за зміст і логічну структуру документа.

4.2 Реалізація основних функцій програми

Для автентифікації користувачів за допомогою криптопротоколу з використанням алгоритму SHA-3 та псевдовипадкових чисел було розроблено програмний засіб.

Перш за все необхідна функцію, яка згенерує випадкове число. Метод Math.random() не надає криптографічно стійкі випадкові числа. Не потрібно використовувати його ні для чого, пов'язаного з безпекою. Замість нього краще підходить Web Crypto API і більш точний метод window.crypto.getRandomValues()[10].

Після генерування числа сторона відправляє його стороні . Після чого воно разом з ідентифікаторами сторін гешується. Етап абсорбування реалізується за допомогою даного фрагменту коду:

const w = 64;

const blocksize = r / w * 8;

for (let i=0; i<msg.length; i+=blocksize) {

for (let j=0; j<r/w; j++) {

const lo = (msg.charCodeAt(i+j*8+0)<< 0) + (msg.charCodeAt(i+j*8+1)<< 8)

+ (msg.charCodeAt(i+j*8+2)<<16) + (msg.charCodeAt(i+j*8+3)<<24);

const hi = (msg.charCodeAt(i+j*8+4)<< 0) + (msg.charCodeAt(i+j*8+5)<< 8)

+ (msg.charCodeAt(i+j*8+6)<<16) + (msg.charCodeAt(i+j*8+7)<<24);

const x = j % 5;

const y = Math.floor(j / 5);

state[x][y].lo = state[x][y].lo ^ lo;

state[x][y].hi = state[x][y].hi ^ hi;

}

Функція перестановок складається з п'яти кроків, які реалізовані в функції

keccak_f_1600(a). Вона складається з 24 раундів. Після проходження всіх раундів алгоритм переходить до етапу віджимання:

let md = transpose(state).map(plane => plane.map(lane => lane.toString().match(/.{2}/g).reverse().join('')).join('')).join('').slice(0, l/4);

if (opt.outFormat == 'hex-b') md = md.match(/.{2}/g).join(' ');

if (opt.outFormat == 'hex-w') md = md.match(/.{8,16}/g).join(' ');

return md;

Після виконання етапу віджимання отримується геш-значення. Коли геші обох сторін сформовані, вони порівнюються і в разі співпадіння автентифікація пройдена успішно.

Отже, розроблено програмний засіб, який реалізує протокол односторонньої автентифікації на основі алгоритму гешування SHA-3 та псевдовипадкових чисел. Перейдемо до тестування засобу.

4.3 Тестування програмного засобу

Інтерфейс програмного засобу досить простий та зрозумілий (рис. 4.1).

Рисунок 4.1 - Вигляд програмного засобу

При натисненні на кнопку «Згенерувати число», згенерується псевдовипадкове число. «Згенерувати геш» - відповідає за генерацію гешу стороною . Після натиснення на кнопку «Відправити», псевдовипадкове число відправляється стороні , яка гешує його та ідентифікатори сторін (рис. 4.2).

Рисунок 4.2 - Вигляд роботи програмного засобу на стороні

Відправивши псевдовипадкове число, сторона генерує геш-значення для перевірки на співпадіння (рис. 4.3).

Рисунок 4.3 - Вигляд вікна генерації гешу стороною

Після генерації гешів на обох сторонах, вони порівнюються і в разі рівності випливає таке вікно (рис. 4.4).

Рисунок 4.4 - Вигляд вікна про успішну автентифікацію

При правильно згенерованих гешах користувач пройде автентифікацію. Тепер необхідно зробити перевірку чи реагує розроблений засіб на ситуацію коли геші на сторонах різні. Для цього згенеруємо нове випадкове число, але не відправимо його стороні , натиснувши кнопку «Автентифікувати» отримаємо даний результат (див. рис. 4.5). Все тому, що на сторона має нове значення, з іншим псевдовипадковим числом, а на стороні залишився старий геш, сформований попередньо.

Рисунок 4.5 - Вигляд вікна про невдалу автентифікацію

Отже, можна зробити висновок, що даний програмний засіб працює коректно: дані гешуються і порівнюються правильно, в результаті чого успішна автентифікація можлива. Також при формуванні обома сторонами зовсім різних гешів, засіб спрацьовує і повідомляє, що автентифікацію не пройдено.

Висновки

В результаті виконання курсового проекту було проаналізовано основні існуючі протоколи односторонньої автентифікації та розроблено новий протокол односторонньої автентифікації на основі алгоритму гешування SHA-3 та псевдовипадкових чисел. Було проведено дослідження даного алгоритму гешування та стійкості розробленого протоколу.

У ході роботи над курсовим проектом було поставлено ряд проміжних завдань. Результати виконання кожного з них дозволили реалізувати криптопротокол, який цілком відповідає вимогам, поставленим у технічному завданні.

Відбувся аналіз криптографічного протоколу з використанням BAN-логіки. За результатом аналізу було з'ясовано, що протокол односторонньої автентифікації з використанням алгоритму гешування SHA-3 та псевдовипадкових чисел є надійним, оскільки дозволяє переконати сторону у автентичності сторони , тим самим забезпечити безпеку передавання даних.

Для розробленого протоколу автентифікації побудовано структуру спеціалізованого процесора та обчислено його технічні характеристики. В результаті з'ясовано, що спеціалізований процесор не потребує великого об'єму пам'яті. Особливістю протоколу є його стійкість, отримана у зв'язку з складністю дослідження алгоритму гешування SHA-3.

Розроблено програмний засіб, який виконує процес односторонньої автентифікації на основі алгоритму гешування SHA-3 та псевдовипадкових чисел. Дані гешуються правильно і на виході отримано результат заданого розміру. Засіб запрограмовано за допомогою бібліотеки мови JavaScript - React.

Було проведено тестування програмного засобу. У ході тестування було з'ясовано, що засіб працює правильно і відповідно до поставленого завдання. При роботі засобу помилок не було виявлено.

Перелік використаних джерел

1. Основні види криптографічних протоколів [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: http://infoprotect.net/varia/kriptograficheskie-_protokolyi/, вільний - Назва з екрана.

2. Протоколи автентифікації [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: https://helpiks.org/4-30239.html , вільний - Назва з екрана.

3. Г. Бертоні, Дж. Демен, М. Пітерс «SHA-3 довідник» (PDF) - 2011, 69 c.

4. Черемушкин А. В. Криптографічні протоколи: основні властивості і вразливості навчальний посібник. М.: Вид. центр «Академія», 2009. 272 c.

5. Авезова Я. Е. Сучасні підходи до побудови геш-функцій [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: https://cyberrus.com/wp-content/uploads/2015/09/vkb_11_8.pdf , вільний - Назва з екрана.

6. Verification of Security Protocols [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: http://cs.ru.nl/~chaack/teaching/2IF02-Spring08/-chapter06-print.pdf , вільний - Назва з екрана.

7. Лужецький В. А. Методичні вказівки до виконання курсового проекту з дисципліни “Прикладна криптологія” / В. А. Лужецький, Ю. В. Баришев, А. В. Остапенко-Боженова. - Вінниця: ВНТУ, 2016. - 40 с.

8. Keccak, новый стандарт хеширования данных [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: https://habr.com/ru/post/159073/, вільний - Назва з екрана.

9. Основи React [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: https://habr.com/ru/company/ruvds/blog/343022/, вільний - Назва з екрана.

10. DOMDocument::loadHTMLFile[Електронний ресурс] : [Вебсайт]. - Режим доступу: URL: https://www.php.net/manual/ru/domdocument. loadhtmlfile.php, вільний - Назва з екрана.

Додатки

Додаток А

Технічне завдання

Вінницький національний технічний університет

Факультет інформаційних технологій та комп'ютерної інженерії

Кафедра захисту інформації

ЗАТВЕРДЖУЮ

Керівник, ас. каф. ЗІ

А. В. Остапенко-Боженова

2020 р.

Технічне завдання на курсовий проект з дисципліни "Прикладна криптологія"

На тему: “Засоби односторонньої автентифікації користувачів”

08-20.ПК.020.10.110 ТЗ

Вінниця 2020

1. Назва та галузь використання

Спеціалізовані засоби для реалізації протоколу односторонньої автентифікації з використанням псевдовипадкових чисел та алгоритму геш-функції SHA-3, що призначені для захисту автентичності джерела даних, що зберігаються та передаються інформаційно-комунікаційними мережами.

2. Основа для розробки

Робоча навчальна програма дисципліни "Прикладна криптологія".

3. Мета та призначення розробки

Покращення процесу автентифікації користувачів комп'ютерної системи шляхом розробки спеціалізованих засобів, що реалізує протокол односторонньої автентифікації з використанням псевдовипадкових чисел та алгоритму геш-функції SHA-3.

Спеціалізовані програмні та апаратні засоби призначені для перевірки автентичності користувача комп'ютерної системи.

4. Джерела розробки

1. Протоколи автентифікації [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: https://helpiks.org/4-30239.html , вільний - Назва з екрана.

2. Г. Бертоні, Дж. Демен, М. Пітерс «SHA-3 довідник» (PDF) - 2011, 69 c.

3. Лужецький В. А. Методичні вказівки до виконання курсового проекту з дисципліни “Прикладна криптологія” / В. А. Лужецький, Ю. В. Баришев, А. В. Остапенко-Боженова. - Вінниця: ВНТУ, 2016. - 40 с.

4. Авезова Я. Е. Сучасні підходи до побудови геш-функцій [Електронний ресурс]: [Веб-сайт]. - Режим доступу:URL: https://cyberrus.com/wp-content/uploads/2015/09/vkb_11_8.pdf , вільний - Назва з екрана.

5. Вимоги до системи

5.1 Параметри розроблюваної системи:

- криптографічний алгоритм - геш-функція SHA-3;

- метод рандомізації - псевдовипадкові числа;

- довжина ключа - 256 біт;

- метод криптоаналізу - BAN-логіка.

5.2 Результати розробки:

- детальний опис протоколу;

- аналіз протоколу за допомогою BAN-логіки;

- структурна схема спеціалізованого процесора, що реалізує розроблений протокол;

- програмний засіб, що реалізує розроблений протокол.

6. Вимоги до супровідної документації

6.1 Графічна і текстова документація повинна відповідати діючим стандартам України.

6.2 Засоби повинні супроводжуватись:

- текстом програми;

- результатами тестування роботи програмного засобу;

- схемою електричною структурною спеціалізованого процесора односторонньої автентифікації з використанням псевдовипадкових чисел та геш-функції SHA-3;

- схемою роботи програмного засобу односторонньої автентифікації з використанням псевдовипадкових чисел та геш-функції SHA-3.

7. Стадії та етапи розробки

Робота з теми виконується у 7 етапів:

Етап

Зміст

Початок

Закінчення

Результат

1

Аналіз протоколів автентифікації

07.02.2020

06.03.2020

Чорновий варіант розділу 1

2

Узагальнений опис протоколу односторонньоїї автентифікації. Його криптоаналізу з використанням BAN-логіки.

13.03.2020

20.03.2020

Чорновий варіант розділу 2

3

Розробка структури спеціалізованого апаратного засобу.

20.03.2020

27.03.2020

Схема електрична структурна, чорновий варіант розділу 3

4

Розробка алгоритмів роботи програмного засобу.

27.03.2020

03.04.2020

Схема роботи програми, чорновий варіант розділу 4

5

Розробка програми.

03.04.2020

10.04.2020

Текст програми, чорновий варіант розділу 4

6

Тестування роботи програмного засобу

10.04.2020

17.04.2020

Результати тестування, чорновий варіант розділу 4

7

Оформлення пояснювальної записки.

17.04.2020

24.04.2020

Пояснювальна записка

8. Порядок контролю та прийому.

До прийому і захисту курсового проекту подається:

- заключний звіт;

- текст програми;

- спеціалізований апаратний засіб для односторонньої автентифікації користувачів з використанням псевдовипадкових чисел та шифру SHA-3. Схема електрична структурна;

- програмний засіб для односторонньої автентифікації користувачів з використанням геш-функції SHA-3. Схема роботи програми.

Розробив студент групи 1БС-17б О. В. Кухарець

Додаток Б

Текст програми

App.js

import React, { useState, useEffect } from "react";

import "./styles/index.css";

import { Sender } from "./components/Sender";

import { Receiver } from "./components/Receiver";

import { Modal } from "./components/Modal";

import { Body, Main, Footer } from "./styles/Styled";

export const App = () => {

const [message, setMessage] = useState(null);

const [isOpenModal, setIsOpenModal] = useState(null);

const [hashSideA, setHashSideA] = useState(null);

const [hashSideB, setHashSideB] = useState(null);

const [status, setStatus] = useState(null);

useEffect(() => {

!!hashSideA && !!hashSideB && setStatus(hashSideA === hashSideB);

}, [hashSideA, hashSideB]);

return (

<Body>

<Main>

<Sender

getMessage={setMessage}

setIsOpenModal={setIsOpenModal}

setHashSideA={setHashSideA}

/>

<Receiver message={message} setHashSideB={setHashSideB} />

</Main>

<Modal

isOpenModal={isOpenModal}

status={status}

onClose={setIsOpenModal}

/>

<Footer>@Oksana_Kukharets</Footer>

</Body>

);

};

Sender.js

import React, { useState } from "react";

import Sha3 from "../utils/sha3";

import {

SenderStyled,

YellowText,

HashStyled,

YellowBlock,

Button,

SendButton,

} from "../styles/Styled";

export const Sender = ({ getMessage, setIsOpenModal, setHashSideA }) => {

const [randomValue, setRandomValue] = useState(null);

const [hash, setHash] = useState(null);

const idSideA = "sideA";

const idSideB = "sideB";

console.log();

return (

<SenderStyled>

<h1>

Сторона <YellowText>А</YellowText>

</h1>

<p>

Псевдовипадкове число: <YellowText>{randomValue}</YellowText>

</p>

<Button

onClick={async () =>

setRandomValue(window.crypto.getRandomValues(new Uint8Array(1))[0])

}

>

Згенерувати <YellowBlock>число</YellowBlock>

</Button>

<p>

Геш: <HashStyled>{hash}</HashStyled>

</p>

<Button

onClick={async () =>

setHash(Sha3.hash256(randomValue + idSideA + idSideB))

}

>

Згенерувати <YellowBlock>геш</YellowBlock>

</Button>

<SendButton

onClick={() => {

getMessage(randomValue);

setIsOpenModal(true);

setHashSideA(hash);

}}

>

Відправити

</SendButton>

</SenderStyled>

);

};

Receiver.js

import React, { useState, useEffect } from "react";

import Sha3 from "../utils/sha3";

import { ReceiverStyled, YellowText, HashStyled } from "../styles/Styled";

export const Receiver = ({ message, setHashSideB }) => {

const [hash, setHash] = useState(null);

useEffect(() => {

setHash(Sha3.hash256(message + idSideA + idSideB));

setHashSideB(hash);

}, [hash, message, setHashSideB]);

const idSideA = "sideA";

const idSideB = "sideB";

return (

<ReceiverStyled>

<h1>

Сторона <YellowText>В</YellowText>

</h1>

<p>

Псевдовипадкове число: <YellowText>{message}</YellowText>

</p>

<p>

Геш: <HashStyled>{message && hash}</HashStyled>

</p>

</ReceiverStyled>

);

};

SHA3.js

class Sha3 {

static hash256(message, options) {

return Sha3.keccak1600(1088, 512, message, options);

}

static keccak1600(r, c, M, options) {

const defaults = {

padding: "sha-3",

msgFormat: "string",

outFormat: "hex",

};

const opt = Object.assign(defaults, options);

const l = c / 2;

let msg = null;

switch (opt.msgFormat) {

default:

case "string":

msg = utf8Encode(M);

break;

case "hex-bytes":

msg = hexBytesToString(M);

break;

}

const state = [[], [], [], [], []];

for (let x = 0; x < 5; x++) {

for (let y = 0; y < 5; y++) {

state[x][y] = new Sha3.Long(0, 0);

}

}

const q = r / 8 - (msg.length % (r / 8));

if (q == 1) {

msg += String.fromCharCode(opt.padding == "keccak" ? 0x81 : 0x86);

} else {

msg += String.fromCharCode(opt.padding == "keccak" ? 0x01 : 0x06);

msg += String.fromCharCode(0x00).repeat(q - 2);

msg += String.fromCharCode(0x80);

}

const w = 64;

const blocksize = (r / w) * 8;

for (let i = 0; i < msg.length; i += blocksize) {

for (let j = 0; j < r / w; j++) {

const lo =

(msg.charCodeAt(i + j * 8 + 0) << 0) +

(msg.charCodeAt(i + j * 8 + 1) << 8) +

(msg.charCodeAt(i + j * 8 + 2) << 16) +

(msg.charCodeAt(i + j * 8 + 3) << 24);

const hi =

(msg.charCodeAt(i + j * 8 + 4) << 0) +

(msg.charCodeAt(i + j * 8 + 5) << 8) +

(msg.charCodeAt(i + j * 8 + 6) << 16) +

(msg.charCodeAt(i + j * 8 + 7) << 24);

const x = j % 5;

const y = Math.floor(j / 5);

state[x][y].lo = state[x][y].lo ^ lo;

state[x][y].hi = state[x][y].hi ^ hi;

}

Sha3.keccak_f_1600(state);

}

let md = transpose(state)

.map((plane) =>

plane

.map((lane) => lane.toString().match(/.{2}/g).reverse().join(""))

.join("")

)

.join("")

.slice(0, l / 4);

if (opt.outFormat == "hex-b") md = md.match(/.{2}/g).join(" ");

if (opt.outFormat == "hex-w") md = md.match(/.{8,16}/g).join(" ");

return md;

function transpose(array) {

return array.map((row, r) => array.map((col) => col[r]));

}

function utf8Encode(str) {

try {

return new TextEncoder()

.encode(str, "utf-8")

.reduce((prev, curr) => prev + String.fromCharCode(curr), "");

} catch (e) {

return unescape(encodeURIComponent(str));

}

}

function hexBytesToString(hexStr) {

const str = hexStr.replace(" ", "");

return str == ""

? ""

: str

.match(/.{2}/g)

.map((byte) => String.fromCharCode(parseInt(byte, 16)))

.join("");

}

}

static keccak_f_1600(a) {

const nRounds = 24;

const RC = [

"0000000000000001",

"0000000000008082",

"800000000000808a",

"8000000080008000",

"000000000000808b",

"0000000080000001",

"8000000080008081",

"8000000000008009",

"000000000000008a",

"0000000000000088",

"0000000080008009",

"000000008000000a",

"000000008000808b",

"800000000000008b",

"8000000000008089",

"8000000000008003",

"8000000000008002",

"8000000000000080",

"000000000000800a",

"800000008000000a",

"8000000080008081",

"8000000000008080",

"0000000080000001",

"8000000080008008",

].map((c) => Sha3.Long.fromString(c));

for (let r = 0; r < nRounds; r++) {

const C = [],

D = [];

for (let x = 0; x < 5; x++) {

C[x] = a[x][0].clone();

for (let y = 1; y < 5; y++) {

C[x].hi = C[x].hi ^ a[x][y].hi;

C[x].lo = C[x].lo ^ a[x][y].lo;

}

}

for (let x = 0; x < 5; x++) {

const hi = C[(x + 4) % 5].hi ^ ROT(C[(x + 1) % 5], 1).hi;

const lo = C[(x + 4) % 5].lo ^ ROT(C[(x + 1) % 5], 1).lo;

D[x] = new Sha3.Long(hi, lo);

for (let y = 0; y < 5; y++) {

a[x][y].hi = a[x][y].hi ^ D[x].hi;

a[x][y].lo = a[x][y].lo ^ D[x].lo;

}

}

// с + р [Keccak §2.3.4]

let [x, y] = [1, 0];

let current = a[x][y].clone();

for (let t = 0; t < 24; t++) {

const [X, Y] = [y, (2 * x + 3 * y) % 5];

const tmp = a[X][Y].clone();

a[X][Y] = ROT(current, (((t + 1) * (t + 2)) / 2) % 64);

current = tmp;

[x, y] = [X, Y];

}

for (let y = 0; y < 5; y++) {

const C = [];

for (let x = 0; x < 5; x++) C[x] = a[x][y].clone();

for (let x = 0; x < 5; x++) {

a[x][y].hi =

(C[x].hi ^ (~C[(x + 1) % 5].hi & C[(x + 2) % 5].hi)) >>> 0;

a[x][y].lo =

(C[x].lo ^ (~C[(x + 1) % 5].lo & C[(x + 2) % 5].lo)) >>> 0;

}

}

a[0][0].hi = (a[0][0].hi ^ RC[r].hi) >>> 0;

a[0][0].lo = (a[0][0].lo ^ RC[r].lo) >>> 0;

}

function ROT(a, d) {

return a.rotl(d);

}

function debugNist(s) {

const d = transpose(s)

.map((plane) => plane.join(""))

.join("")

.match(/.{2}/g)

.join(" ")

.match(/.{23,48}/g)

.join("\n");

console.info(d); }

function debug5x5(s) {

const d = transpose(s)

.map((plane) => plane.join(" "))

.join("\n");

console.info(d);

}

function transpose(array) {

return array.map((row, r) => array.map((col) => col[r]));

}

}

}

Sha3.Long = class {

constructor(hi, lo) {

this.hi = hi;

this.lo = lo;

}

static fromString(str) {

const [hi, lo] = str.match(/.{8}/g).map((i32) => parseInt(i32, 16));

return new Sha3.Long(hi, lo);

}

clone() {

return new Sha3.Long(this.hi, this.lo);

}

rotl(n) {

if (n < 32) {

const m = 32 - n;

const lo = (this.lo << n) | (this.hi >>> m);

const hi = (this.hi << n) | (this.lo >>> m);

return new Sha3.Long(hi, lo);

}

if (n == 32) {

return new Sha3.Long(this.lo, this.hi);

}

if (n > 32) {

n -= 32;

const m = 32 - n;

const lo = (this.hi << n) | (this.lo >>> m);

const hi = (this.lo << n) | (this.hi >>> m);

return new Sha3.Long(hi, lo);

}

}

toString() {

const hi = ("00000000" + this.hi.toString(16)).slice(-8);

const lo = ("00000000" + this.lo.toString(16)).slice(-8);

return hi + lo;

}

};

Графічна частина

Размещено на http://www.allbest.ru/

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.