a, b, c, d, e, f, – робочі змінні для проміжних значень хешу;
Wt – допоміжні змінні на основі повідомлення;
Ki – шістдесят чотири 32-бітних констант, кожна з яких являється першими 32-ма бітами дробової частини кубічних коренів перших шістдесяти чотирьох простих чисел.
Наступним етапом є розрахунок і-го проміжного значення хешу H(i). Розрахунок здійснюється за наступними формулами (1.1.9):
(1.1.9)
Після повторення цих кроків N разів, тобто повної обробки M(N), отримуємо результуючий 256-бітовий цифровий відбиток повідомлення М за допомогою конкатенації за формулою (1.1.10):
(1.1.10)
В алгоритмі SHA-384 розмір блоку повідомлення дорівнює 1024 біт. Алгоритм оперує словами довжиною в 64 біти. Довжина цифрового відбитку складає 384 біт.
Алгоритм знаходження цифрового відбитку аналогічний алгоритму SHA-512, за виключенням двох моментів:
1) Початкові значення хешу H(0) , на відміну від попередніх алгоритмів, отримують шляхом взяття перших 64 біт двійкового представлення дробової частини квадратних коренів з дев’ятого по шістнадцяте простих чисел.
2) 384-бітовий цифровий відбиток отримують шляхом скорочення кінцевого значення хешу H(N) для SHA-512, тобто за формулою (1.1.11):
(1.1.11)
В алгоритмі SHA-512 розмір блоку повідомлення дорівнює 1024 біт. Алгоритм оперує словами довжиною в 64 біти. Довжина цифрового відбитку складає 512 біт.
SHA-512 використовує шість логічних операцій, кожна з яких оперує 64-бітними словами. Результатом кожної функції являється 64-бітне слово. Функції Ch і Maj аналогічні функціям SHA-256, а інші перевизначені і описуються наступними формулами (1.1.12),(1.1.13),(1.1.14),(1.1.15):
(1.1.12)
(1.1.13)
(1.1.14)
(1.1.15)
де x,y,z – 64-бітні слова;
ROTRk(x) – обертання вправо слова x на k бітових позицій;
SHRk(x) – зсув вправо слова x на k бітових позицій.
Починається етап первинної обробки. Нехай довжина повідомлення L біт. Початкове повідомлення розбивається на блоки по 1024 біт в кожному. Останній блок доповнюється до довжини, кратної 1024 біт. Спочатку додається 1, а потім нулі у кількості k так, щоб довжина блоку була на 128 біт менше числа, кратного 896. В 128 біта, що залишилися, записується довжина вихідного повідомлення в бітах. Якщо останній блок має довжину понад 896, але менше 1024 біт, то додаток виконується наступним чином: спочатку додається 1, потім нулі аж до кінця 1024-бітного блоку, після цього створюється ще один 1024-бітний блок, який заповнюється до 896 біт нулями, після чого в 128 біт, що залишилися, записується довжина вихідного повідомлення в бітах. Доповнення останнього блоку здійснюється завжди, навіть якщо повідомлення вже має потрібну довжину. Після цього кожне повідомлення можна представити у вигляді послідовності N 1024-бітових блоки M(1), M(2), …, M(N). Потім встановлюємо початкові значення хешу H(0). Ці слова отримують шляхом взяття перших 64 біт двійкового представлення дробової частини квадратних коренів перших восьми простих чисел.
На наступному кроці відбувається підготовка допоміжних змінних на основі повідомлення {Wt}. Wt обчислюють із чергового блоку повідомлення по наступній формулі (1.1.16):
(
1.1.16)
Далі відбувається ініціалізація восьми робочих змінних a, b, c, d, e, f, , h, які слугують для (i-1)-го проміжного значення хеш-коду.
На наступному кроці відбувається нелінійні перетворення блоків. Основою алгоритму являється модуль, що складається з 80 циклічних обробок кожного блоку. Такий модуль циклічних обробок визначається наступними формулами (1.1.17):
(1.1.17)
де T1 і T2 - тимчасові змінні;
a, b, c, d, e, f, – робочі змінні для проміжних значень хешу;
Wt – допоміжні змінні на основі повідомлення;
Ki – вісімдесят 64-бітних констант, кожна з яких являється першими 64-ма бітами дробової частини кубічних коренів перших восьмидесяти простих чисел.
Наступним етапом є розрахунок і-го проміжного значення хешу H(i). Розрахунок здійснюється за наступними формулами (1.1.18):
(1.1.18)
Після повторення цих кроків N разів повної обробки M(N), отримуємо результуючий 256-бітовий цифровий відбиток повідомлення М за допомогою конкатенації за формулою (1.1.19):
(1.1.19)
В даній роботі були досліджені хеш-функції , детально розглянуті хеш-функції SHA-2: SHA-256, SHA-384, SHA-512. Були реалізовані алгоритми обчислення хеш-коду SHA-256, SHA-384, SHA-512. Швидкість обчислення хеш-коду для повідомлень будь-якої довжини, є швидким процесом підбору нескладного пароля до хеш-коду, але з ростом кількості використовуваних символів трудоємність цього процесу швидко зростає а ще більше із збільшенням кількості символів в паролі. Тому набагато вигідніше для підвищення стійкості пароля збільшувати його довжину.
Складність пошуку колізій полягає в питанні часу. Для вирішення цієї проблеми можуть застосовуватися або апаратне прискорення, або математичний підхід, або ж їх комбінація. В якості першого зазвичай застосовується розпаралелювання процесу, в якості другого застосовуються диференційний метод, метод модифікації змішаних повідомлень.
Так, як від стійкості хеш-функції до знаходження колізій залежить безпека електронного цифрового підпису з використанням даного хеш-алгоритму і безпека зберігання хешів паролів для цілей аутентифікації. З огляду на алгоритмічної схожості SHA-2 з SHA-1 і наявності в останньої потенційних вразливостей прийнято рішення, що SHA-3 буде базуватися на зовсім іншому алгоритмі.У 2012 року NIST затвердив SHA-3. Але і на сьогоднішній день не було запропоновано жодної досить серйозної атаки на SHA-2
Системи в яких для шифрування інформації та її подальшого розшифрування використовуються різні ключі називаються, асиметричні
відкритий ключ K використовуються для шифрування, вираховується із секретного;
секретний ключ k використовується для розшифрування інформації, зашифрованої з допомогою парного йому відкритого ключа К.
Відкритий ключ К може вільно передаватися по каналах зв'язку. Так, як за допомогою обчислень не можна вивести секретний ключ з відкритого ключа К. Відкритий ключ повинен використовуватися як ключ шифрування одержувача, а в якості ключа дешифрування - його секретний ключ.
Секретний і відкритий ключі генеруються попарно. Секретний ключ повинен залишатися у його власника і бути надійно захищений від несанкціонованого доступу. Копія відкритого ключа повинна знаходитися у кожного абонента криптографічного мережі, з яким обмінюється інформацією власник секретного ключа.
Узагальнена схема асиметричної криптосистеми шифрування з відкритим ключем зображена на рисунку 2.1
Рисунок 2.1.- Узагальнена схема асиметричної криптосистеми шифрування з відкритим ключем
Процес передачі зашифрованої інформації в мережах виглядає так:
абонент В генерує пару ключів: секретний ключ kв і відкритий ключ Kв;
відкритий ключ Кв посилається абоненту А та іншим абонентам;
абонент А зашифровує повідомлення за допомогою відкритого ключа Кв абонента В та відправляє шифрoтекст С абоненту В;
абонент В розшифровує повідомлення за допомогою свого секретного ключа kв. Ніхто інший не може розшифрувати дане повідомлення, оскільки не має секретного ключа абонента В.
Захист інформації в асиметричній криптосистемі заснована на секретності ключа kв отримувача повідомлення.
Вимоги, що забезпечують безпеку асиметричних криптосистем
Обчислення пари ключів (KB, kB) отримувачем В на основі початкової умови повинно бути простим.
Відправник A, знаючи відкритий ключ КB і повідомлення M, може легко обчислити криптограму, за формулою (2.1.1).
(2.1.1)
Одержувач В, використовуючи секретний ключ kB і криптограму С, може легко відновити вихідне повідомлення, за формулою (2.1.2).
(2.1.2)
Противник, знаючи відкритий ключ KB, при спробі обчислити секретний ключ kB наштовхується на непереборну обчислювальну проблему.
Противник, знаючи пару (KВ, С), при спробі обчислити вихідне повідомлення М наштовхується на непереборну обчислювальну проблему.
Перевагою алгоритмів з відкритим ключем є можливість передачі відкритого ключа по незахищеному каналу передачі данних, а також для створення електронного цифрового підпису для перевірки автентичності.
Хоча алгоритми асиметричного шифрування мають ряд недоліків у порівнянні з симетричним шифруванням:
В алгоритм складніше внести зміни;
Більша довжина ключів;
В порівнянні з симетричним шифруванням, асиметричне істотно повільніше;
Необхідно захищати відкриті ключі від підміни
Потрібні суттєво більші обчислювальні ресурси, тому на практиці асиметричні криптосистеми використовуються в поєднанні з іншими алгоритмами.
Схема Ель-Гамаля (Elgamal) – криптосистема з відкритим ключем, заснована на труднощі обчислення дискретних логарифмів в кінцевому полі. Криптосистема включає в себе алгоритм шифрування і алгоритм цифрового підпису. Схема Ель-Гамаля лежить в основі колишніх стандартів електронного підпису в США (DSA) і Росії (ГОСТ Р 34.10-94). Схему наведено на рис. 2.2
Рисунок 2.2 – Схема шифрування Ель-Гамаля
Повідомлення шифрується таким чином:
Вибирається випадкове ціле число x таке, що 1< k < p-1
Обчислюються числа a і b, за формулою (2.1.3) і (2.1.4)
(2.1.3)
де - відкритий ключ;
k- випадкове ціле число;
p- відкритий ключ.
(2.1.4)
де p, - відкритий ключ
Пара чисел (a, b) є шифротекстом.
Неважко бачити, що довжина шифротекста в схемі Ель-Гамаля довша вихідного повідомлення M вдвічі.
Розшифрування
Знаючи закритий ключ x , вихідне повідомлення можна обчислити з шифротекста (a, b) по формулі (2.1.5)
(2.1.5)