Найти тему
ProMath

Криптография. Симметричное и асимметричное шифрование.

Симметричное шифрование – это шифрование с использованием одного ключа. Мы уже про него говорили в первом посте

-2

Асимметричное шифрование подразумевает использование двух типов ключей: публичного и приватного.

Публичный ключ доступен всем, а приватный, только у того, кто расшифровывает данные.

-3

Симметричное шифрование имеет уязвимость ко взлому. Если злоумышленник получит ЗП и ключ, то он спустя какое-то время (даже тупо перебором – брутфорсом, от англ. Brute Force – грубая сила) взломает наш шифр.

Асимметричное шифрование усложняет жизнь хакерам, но это не точно🤭

Как же оно работает?

Допустим, у нас есть Вася и Петя, которые хотят передать секретики между собой.

Вася создает публичный и приватный ключ. Публичный ключ он отдает Пете. Петя шифрует сообщение публичным ключом и отправляет обратно Васе.

Вася расшифровывает сообщение приватным ключом.

В данном случае шифрование будет происходить по односторонней функции, т.е. мы можем зашифровать публичным ключом, но обратно, применяя этот же ключ мы не сможем получить исходное послание. Вся необходимая информация находится в приватном ключе, который никто не видел, кроме Васи.

Представьте себе шкатулку с самозакрывающимся замком. 

Вася отдал ее Пете открытой, Петя положил записку и захлопнул её.

Ни Петя, никто другой больше не сможет получить эту записку, кроме Васи, у которого есть ключ от неё. (публичный ключ в данном случае самозакрывающийся замок😉)

Самый популярный пример асимметричного шифрования – RSA, который используется в протоколе HTTPS (да, те самые зелёные буковки в адресной строке браузера)

Разберемся с RSA поподробнее.

Теория чисел во всей красе😎

1.Возьмем два простых числа p и q.

2. Перемножим: N=p*q

3 Вычисляем функцию Эйлера: φ(N) = (p-1) * (q-1)

4. Выбираем число e, взаимно простое с φ(N), т.е. они не имеют общих делителей.

5. Ищем такое число d, которое даст остаток 1 при делении e*d на φ(N) или e*d =1 mod( φ(N))

Получили: 

(e, N) – публичный ключ

(d, N) – приватный ключ

И как шифровать то? 🤔

Петя пишет сообщение.

Сообщение для компьютера это набор битов, т.е. число(или набор чисел). Это число возводим в степень e по mod(N). – шифрование открытым ключом.

Отправляем ЗП Васе.

Вася полученное число возводит в степень d (modN) – получает исходное сообщение.

 Может показаться сложным, но RSA устарел, и имеет уязвимости.

К примеру, мы(злоумышленники 🏴‍☠️😎) можем дать свой публичный ключ. Петя, уверенный в безопасности, зашифрует сообщение, и мы перехватим зашифрованное послание, откроем своим приватным ключом и прочитаем сообщение 😎

UPD: решил сам написать код RSA, нашёл еще два минуса🫠

 Сообщение должно быть меньше произведения p*q, т.е. если вы хотите зашифровать несколько предложений, вам понадобятся очень большие простые числа p и q.

 А также очень медленная скорость работы алгоритма, но возможно, этому поспособствовал мой старенький компьютер.

 И ещё, проблема односторонней функции до сих пор открыт; не известно всегда ли мы можем зашифровать и нерасшифровать сообщение публичным ключом.