Шифрование (Part 1) На первый взгляд достаточно понятная тема | Beer::PHP 🍺
Шифрование (Part 1)
На первый взгляд достаточно понятная тема, но реалии столкнули меня с тем, что далеко не все знают как это работает, зачем нужны ключи и почему в наш мир с ноги ворвался https, как работает JWT. Но обо всём по порядку.
Думаю, всем понятно зачем мы шифруем данные — чтобы скрыть информацию от посторонних лиц. Для этого нам нужно:
1. Выбрать какой-то алгоритм шифрования, то есть договориться по какому принципу мы будем преобразовывать наши данные.
2. Ключ (шифр) — тайная информация (набор цифр и букв) которая используется выбранным алгоритмом для шифрования и расшифровки.
Чем шифрование отличается от хеширования?
Хеширование мы уже рассматривали ранее. Зашифрованные данные мы можем вернуть в исходное состояние, а захешированные нет.
Используя шифрование мы хотим обеспечить передачу всех данных (целостность) конкретному получателю или от него (идентифицируемость), скрыв её от посторонних лиц (конфиденциальность). Хеширование служит не для передачи информации, а для разного рода проверок, об этом чуть позже.
Симметричное и асимметричное шифрование
Симметричное — использует один ключ, который служит и для шифрования и для расшифровывания ваших данных.
Неоспоримым преимуществом такого подхода является его скорость т.к. он требует малое количество вычислительной мощности.
Основная проблема — безопасная передача того-самого ключа. Передавать его по открытым каналам нельзя, иначе любой, кто им завладеет сможет расшифровать ваши сообщения. Также стоит учитывать, что для приватного общения с каждым отдельным участником вам необходимо создавать свой отдельный ключ.
Асимметричное — использует два ключа, открытый (публичный / public) и закрытый (приватный / private). Асимметричным оно называется потому, что данные шифруются с помощью одного ключа (как правило открытого), а расшифровываются с помощью второго (закрытого).
Таким образом вы можете создать пару ключей и отправить другим участникам свой открытый ключ, с помощью которого они смогут шифровать свои сообщения и отправлять вам.
Чтобы вы могли отправлять зашифрованные сообщения адресату — он должен сгенерировать себе свою отдельную пару ключей и отправить открытый ключ вам.
Только обладатель закрытого ключа может расшифровать зашифрованное сообщение. Таким образом решается проблема передачи ключей по открытому каналу, ведь не важно сколько человек обладает открытым ключем — зашифрованную им информацию они получить не смогут.
Однако у этого подхода есть и свой минус — он требует намного больше вычислительной мощности.
Можно ли зашифровать данные закрытым ключом, а расшифровать открытым? — Можно. Но зачем это делать и как это используется напишу в следующей части.
—————
Для тех кому интересно поиграться накидал на коленке пример того, как работает RSA. Да, на PHP. Да, страдал. Но надеюсь вышло понятно.
Протестируем открытие комментариев. Ну и не забывайте кидать реакции, чтобы я понимал насколько тема интересна и полезна.
#php #crypto #middle Все буде Україна