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

Попытаемся объяснить просто на чем строится современное шифрование.

Симметричное шифрование - менее защищенное , ключ известен заранее обоим (Отправителю и Получателю).

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

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

Это на самом деле математический трюк с так называемыми "простыми" числами, возведением в степень и взятием остатка (очень редкое явление, умом почти не постижимое, но тем не менее существующее реально). На это все и строится.


Зачем нужен Хэш и что это такое

Что такое ХЭШ - это просто функция (какой-то алгоритм) , на входе информация произвольного размера , на выходе некий код фиксированного размера (ХЭШ). Получается это какая-то хитрая контрольная сумма (с фиксированной дилиной 16 , 32 байта).

Таким образом защищается содержание , и с очень малой вероятностью одно значение ХЭШ может быть у двух вариантов информации (коллизии). Просто мы верим ,что такого совпадения не случится , а если случится , то не с нами...

Особая миссия алгоритма хэш функции в том , что если изменить хотя бы буковку в данных на входе — ХЭШ будет кардинально другой на выходе, то есть документ претерпел изменение. Поэтому там используются всякие полиномы , члены , многочлены...

отдельный этап - подписывание документа

Подпись документа НЕ скрывает сам документ, а только гарантирует:

неизменность самого документа и
достоверность отправителя документа.

Допустим у Отправителя и получателя есть блок бинарных данных (документ, программа, ...) . По информации в блоке данных вычисляется некий ХЭШ.

И отправитель и получатель при вычислении получают одинаковое значение, то есть алгоритм известен и отправителю и получателю (например md5) .

Отправитель может ОТКРЫТО передать Получателю документ и хэш к нему (просто приложить отдельно). Получатель самостоятельно вычислит хэш документа (таким же алгоритмом, при помощи такой же хэш функции) и получит такое же значение хэша.

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

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

ОК мы гарантировали , что содержание документа не изменилось при передаче от отправителя Получателю.

Зашита содержания документа

Но содержание документа полностью открыто и доступно любому получателю.

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

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

Вот тут и появляются открытые ключи (сертификаты , паспорта, как угодно...) у каждого потенциального участника получателя или отправителя.

Некий главный арбитр выдает всем желающим паспорта (открытые сертификаты).

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

Далее реализуется парадигма , что открытым ключем шифруются данные , а закрытым ключом данные дешифруются.

То есть у каждого получателя должны быть 2 ключа : открытый и закрытый.

Чтобы это работало самые лучшие математики ломали голову над вопросом : как данные (например 1 байт) преобразовать функцией #1 в какое-то значение, чтобы другой функцией #2 гарантированно получить обратно исходные данные.

То есть отправитель открытым ключем получателя (функция #1) преобразовывает данные и только получатель сможет декодировать данные своим закрытым ключом своей (функция #2).

Решений оказалось не одно: применялись простые числа, возведение в степень, остатки от деления и многое другое.

Арбитр должен обеспечить , чтобы функции #1 и #2 были каждый раз уникальными для каждого участника.

Короче есть такие приколы математики , что это возможно. Например RSA алгоритм....

Поэтому потом ХЭШ надо зашифровывать. Хэш шифруется закрытой частью ключа отправителя. Поэтому , чтобы получатель мог расшифровать информацию отправитель и прикрепляет еще и свой открытый ключ.

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

Этап 2 - шифрование документа

СКЗИ (средство защиты криптографическое информации) Отправителя создает одноразовый ключ - симметричный - просто потому, что симметричное шифрование работает намного быстрее, а шифровать тут надо именно сам документ , который может быть Ого-го большим. Итак зашифровали симметричным ключиком документ, а сам ключик-то надо как-то передать (т.к. получатель откуда его узнает?), но не в открытом-же виде. Правильно, зашифруем сам симметричный ключик асимметричным (надежным) шифрованием, используя что? -открытый ключ ПОЛУЧАТЕЛЯ, дабы только он (получатель) своим драгоценным закрытым ключом мог расшифровать наш симметричный ключик. Вот в итоге и получается пакет для получателя :

1. Сам документ, зашифрованный симметричным ключом ОТПРАВИТЕЛЯ.

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

3. Также для идентификации отправителя добавляем «открыто» отрытый ключ ОТПРАВИТЕЛЯ.

4 Отправляем полученный по данным через известную всем хэш функцию ХЭШ документа нашего документа .

Теперь Получатель получает такое письмо и :

1. Своим закрытым ключом расшифровывает и получает симметричный ключик.

2. Полученным симметричным ключиком расшифровывает содержание самого документа.

3. Далее также, как и отправитель (по такому-же открытому алгоритму) получатель вычисляет ХЭШ №1 содержания документа.

4. Далее получатель берет открытый ключ отправителя (услужливо прикрепленный к письму самим отправителем) и расшифровывает прикрепленный ХЭШ (№2) документа (услужливо прикрепленный к письму тем же отправителем), только для того , чтобы удостовериться , что отправитель по прикрепленному открытому ключу и есть в действительности он.

5. Полученный ХЭШ №2 сравнивается с ХЭШом №1. Результат, думаю, должен быть очевиден. То есть , что ХЭШ (№2) и ХЭШ (№1) должны совпасть.

Таким образом к шифрованию информации относятся пункты 1,2 , для проверки достоверности отправителя пункт 4. А для проверки целостности (неизменности) информации используются пункты 3,5.