Симметричное шифрование – это шифрование с использованием одного ключа. Мы уже про него говорили в первом посте
Асимметричное шифрование подразумевает использование двух типов ключей: публичного и приватного.
Публичный ключ доступен всем, а приватный, только у того, кто расшифровывает данные.
Симметричное шифрование имеет уязвимость ко взлому. Если злоумышленник получит ЗП и ключ, то он спустя какое-то время (даже тупо перебором – брутфорсом, от англ. 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.
А также очень медленная скорость работы алгоритма, но возможно, этому поспособствовал мой старенький компьютер.
И ещё, проблема односторонней функции до сих пор открыт; не известно всегда ли мы можем зашифровать и нерасшифровать сообщение публичным ключом.