Получи случайную криптовалюту за регистрацию!

Шифрование (Part 1) На первый взгляд достаточно понятная тема | Beer::PHP 🍺

Шифрование (Part 1)

На первый взгляд достаточно понятная тема, но реалии столкнули меня с тем, что далеко не все знают как это работает, зачем нужны ключи и почему в наш мир с ноги ворвался https, как работает JWT. Но обо всём по порядку.

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

1. Выбрать какой-то алгоритм шифрования, то есть договориться по какому принципу мы будем преобразовывать наши данные.
2. Ключ (шифр) — тайная информация (набор цифр и букв) которая используется выбранным алгоритмом для шифрования и расшифровки.

Чем шифрование отличается от хеширования?

Хеширование мы уже рассматривали ранее. Зашифрованные данные мы можем вернуть в исходное состояние, а захешированные нет.

Используя шифрование мы хотим обеспечить передачу всех данных (целостность) конкретному получателю или от него (идентифицируемость), скрыв её от посторонних лиц (конфиденциальность). Хеширование служит не для передачи информации, а для разного рода проверок, об этом чуть позже.

Симметричное и асимметричное шифрование

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

Неоспоримым преимуществом такого подхода является его скорость т.к. он требует малое количество вычислительной мощности.

Основная проблема — безопасная передача того-самого ключа. Передавать его по открытым каналам нельзя, иначе любой, кто им завладеет сможет расшифровать ваши сообщения. Также стоит учитывать, что для приватного общения с каждым отдельным участником вам необходимо создавать свой отдельный ключ.

Асимметричное — использует два ключа, открытый (публичный / public) и закрытый (приватный / private). Асимметричным оно называется потому, что данные шифруются с помощью одного ключа (как правило открытого), а расшифровываются с помощью второго (закрытого).

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

Чтобы вы могли отправлять зашифрованные сообщения адресату — он должен сгенерировать себе свою отдельную пару ключей и отправить открытый ключ вам.

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

Однако у этого подхода есть и свой минус — он требует намного больше вычислительной мощности.

Можно ли зашифровать данные закрытым ключом, а расшифровать открытым? — Можно. Но зачем это делать и как это используется напишу в следующей части.

—————
Для тех кому интересно поиграться накидал на коленке пример того, как работает RSA. Да, на PHP. Да, страдал. Но надеюсь вышло понятно.

Протестируем открытие комментариев. Ну и не забывайте кидать реакции, чтобы я понимал насколько тема интересна и полезна.

#php #crypto #middle Все буде Україна