Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
31.01.2021
Размер:
376.83 Кб
Скачать

3 Алгоритм шифрування шаміра

Шифр Шаміра (AdiShamir) був першим, що дозволяє організувати обмін секретними повідомленнями по незахищеній лінії зв'язку без обміну секретними ключами. Шифр Шаміра полягає в наступному. Нехай є два абонента А і В, з'єднані лінією зв'язку, і А хоче передати секретне повідомлення В. А вибирає велике просте число р і відкрито передає його абоненту В. Потім А випадково вибирає два числа х1 i х2, такі, що вони є зворотними один одному по модулю р - 1: (3.1)

Числа х1 і х2 є особистим ключем абонента А він тримає їх у секреті і передавати не буде.Абонент В також випадково вибирає два числа y1 і у2, такі, що: (3.2)

Числа у1 і у2 є особистим ключем абонента В і тримаються в секреті.

Числа х1 і у1 вибираються абонентами випадково так, щоб вони були взаємно простими з р - 1. Причому x1 і y1, слід шукати тільки серед непарних чисел, так як р - 1 - парне. Числа х2 і у2 обчислюються за допомогою розширеного алгоритму Евкліда.

Тепер абонент А може передати своє повідомлення М, використовуючи триступеневий протокол. Повідомлення М розглядається як число. Якщо М <р, то М передається відразу; якщо ж М> р, то перед відправкою повідомлення представляється у вигляді послідовності mv mv ..., т (, де все т<p. Повідомлення mjf i = 1, t передаються послідовно, при цьому для шифрування кожного mi рекомендується випадково вибирати нові пари ключів х1 і х2, y1 і у2; в іншому випадку надійність криптосистеми знижується. Таким чином, не применшуючи спільності, можна розглянути тільки випадок М <p:

1) А обчислює число X, = Mv>mod р, де М - вихідне повідомлення, і пересилає X, абоненту В;

2) У, отримавши X, обчислює число У, = Xf1 mod р і передає У, абоненту А,

3) А обчислює число Х2 = У * 2 mod р і передає його В;

4) У, отримавши Х2, обчислює число У2 = Х22 mod р, У2 і є вихідне повідомлення МЗначення XvX2nY, можуть передаватись відкритим каналом, оскільки отримання на їх основі значень секретних ключейxv X2 та Y1, практично неможливо (твердження базується на труднощі розрахунку дискретних логарифмів). Ніхто інший, окрім абонента В, не зможе розрахувати значення М, завдяки тому, що у розрахунках використовуються секретні ключі абонента В.

4. Асиметричне шифрування

4.1. RSA

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

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

Для того, щоб Боб міг відправити свої секретні повідомлення, Аліса передає свій відкритий ключ (e, n) Бобу через надійний, але не обов'язково секретний маршрут. Секретний ключ d ніколи не розповсюджується.

Алгоритм шифрування:

Взяти відкритий ключ (e, n).

Взяти відкритий текст m.

Зашифрувати повідомлення з використанням відкритого ключа Аліси:

Алгоритм дешифрування:

Прийняти зашифроване повідомлення c.

Взяти свій закритий ключ (d, n).

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

ВИСНОВКИ

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

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

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

Пропонований алгоритм DSA заснований на криптографічного системі Ель-Гамаля. Його надійність основана на практичній нерозв'язності завдання обчислення дискретного логарифма. Одним з головних аргументів проти DSA є те, що, на відміну від загальної задачі обчислення дискретного логарифма , її окремий випадок, використаний у даній схемі, мало вивчений і, можливо, має істотно меншу складність розкриття.

Недоліком алгоритму DSА є те, що при підписуванні і при перевірці підпису доводиться виконувати складні операції ділення по модулю q за формулами (2.4), (2.5), що не дозволяє отримувати максимальну швидкодію.

ПЕРЕЛІК ДЖЕРЕЛ ПОСИЛАНЬ

  1. Горбенко Ю. І. Інфраструктури відкритих ключів. Електронний цифровий підпис. Теорія та практика.

  2. Дегтярьов А. К. Методи сучасної криптографії [Електронний ресурс] / А.К. Дегтярьов.

  3. Вербіцький О.В. Вступ до криптології/ О.В. Вербіцький − Науково-технічна література, 1998. — 248 с.

  4. Системи захисту інформації [Електронний ресурс].

  5. Нечаєв В.І. Елементикриптографії (Основитеоріїзахистуінформації) / За ред. В.А. Садовнича - М.: Вищ. шк., 1999 - 109с.

  6. Алфьоров А.П., Зубов А.Ю., Кузьмін А.С., Черьомушкін А.В. Основи криптографії: Навчальний посібник. 3-тє вид., 2005. - 480с.

  7. Електронний ресурс: Схема Ель Гамаля

http://cryptowiki.net/index.php?title=Схема_Эль-Гамаля

  1. Електронний ресурс: Алгоритми хешування

https://habr.com/ru/post/93226/

  1. Електронний ресурс: Схема розділення секрету Шаміра

https://habr.com/ru/post/431392/

Додаток

SHA 2 – 256 .py code

import time

start_time = time.time()

import hmac

import hashlib

import base64

dig = hmac.new(b'1234567890', msg=b'hello', digestmod=hashlib.sha256).digest()

print(base64.b64encode(dig).decode())

dig = hmac.new(b'1234567890', msg=b'hello', digestmod=hashlib.sha384).digest()

print(base64.b64encode(dig).decode())

dig = hmac.new(b'1234567890', msg=b'hello', digestmod=hashlib.sha512).digest()

print(base64.b64encode(dig).decode())

print("--- %s seconds ---" % (time.time() - start_time))

DSS/DSA part of the .py code

q=13

print("Q:",q)

p=(4*q)+1

print("P:",p)

g= 16

print("G(порождающий элемент группы):",g)

#x=random.randint(2, q-1)

x=8

print("X(подписывающий ключ):",x)

k= 12

print("K(эфемерный ключ):",k)

y= pow(g,x)%p

print("Y(открытыq ключ):",y)

r=(pow(g,k)%p)%q

print("R:",r)

def modInverse(k,q):

k = k % q;

for a in range(1, q):

if ((k * a) % q == 1):

return a

return 1

RSA .py code

def gcd(a,b):

if b==0:

return a

else:

return gcd(b,a%b)

p = int(input('Enter the value of p = '))

q = int(input('Enter the value of q = '))

no = int(input('Enter the value of text = '))

n = p*q

t = (p-1)*(q-1)

for e in range(2,t):

if gcd(e,t)== 1:

break

for i in range(1,10):

x = 1 + i*t

if x % e == 0:

d = int(x/e)

ElGamal part of the .py code

def gcd(a, b):

while b != 0:

a, b = b, a % b

return a

def primRoot(modulo):

roots = []

required_set = set(num for num in range(1, modulo) if gcd(num, modulo) == 1)

for g in range(1, modulo):

actual_set = set(pow(g, powers) % modulo for powers in range(1, modulo))

if required_set == actual_set:

roots.append(g)

return roots[0]

p = 23

print("P:", p)

w = i = p-1

x = random.randint(1, w)

print("X(секретный ключ):", x)

k = o = 5

print("K(сессионный ключ):", k)

g =primRoot(p)

print("G(первообразный корень p):", g)

y = pow (g,x)%p

print ("Y:", y)

print("Открытый ключ:", p,g,y)

Shamir part of the .py code

def recover_secret(shares, prime=_PRIME):

if len(shares) < 2:

raise ValueError("need at least two shares")

x_s, y_s = zip(*shares)

return _lagrange_interpolate(0, x_s, y_s, prime)

def main():

secret, shares = make_random_shares(minimum=19, shares=21)

print('secret: ',

secret)

print('shares:')

if shares:

for share in shares:

print(' ', share)

print('secret recovered from minimum subset of shares: ',

recover_secret(shares[:19]))

print('secret recovered from a different minimum subset of shares: ',

recover_secret(shares[-19:]))