"Привет. Мне 21 год и я живу в Санкт-Петербурге." Сейчас я передал вам это сообщение по открытому каналу связи, и, вообще говоря, это не очень хорошая идея - передавать секретные сообщения по открытым каналам.
Любое ваше письмо или сообщение, на бумажном или электронном носителе может быть перехвачено, и его получателем может быть не один человек, как вы изначально предполагали, а куда больше.
История криптографии насчитывает более 4000 лет, и не нужно думать, что она все это время развивалась как наука: были теоремы, гипотезы. Нет! Она больше развивалась как искусство скрытия информации и имела следующую периодизацию:
1. Древний мир, когда криптография использовалась действительно как искусство, когда не было понятия ключа шифрования.
2. XX век. Появляются моно алфавитные шифры поли алфавитный шифры, появляются способы вскрытия шифров причем вскрытие не просто методом угадайки, а вполне конкретными научными подходами получения открытого текста.
Сейчас я кратко познакомлю вас с азами криптографии и расскажу об алгоритмах ассиметричного шифрования.
С появлением письменности появилось много личной информации, зафиксированной на бумаге. Эту информацию нужно было как то прятать, и люди начали придумывать первые шифры.
Одним из первых документально зафиксированных шифров является шифр Цезаря. На самом деле его придумал совсем не цезарь, но так как первыми найденными зашифрованными письмами были переписки цезаря, то так этот шифр и было решено назвать. Его принцип был очень прост: каждая буква исходного текста заменялась на другую, отстоящую от нее по алфавиту на определенное число позиций. Зная это число, можно был разгадать шифр и узнать, какие тайны Цезарь передавал своим генералам. Соответственно, мы имеет исходный текст, зашифрованный текст, и ключ шифрования, которым выступает количество букв смещения.
Для нашего времени этот шифр очень ненадежен, и куда более актуальным стал алгоритм ассиметричного шифрования.
Перед тем, как начать общение, два наших собеседника выбирают один ключ, которым будут шифровать, и другой, которым они будут расшифровывать. Далее, перед тем как начать общаться по открытому каналу связи, собеседники передают друг другу ключи, которыми нужно шифровать. В итоге собеседники имеют ключи для шифрования, шифруют сообщения, передают, но. Ключ, которым можно расшифровать сообщение есть только у одного. Так выглядит алгоритм асимметричного шифрования или шифрования открытым ключом.
Но у данного алгоритма есть существенный минус. А что, если ключ для шифрования по пути будет перехвачен, и любой другой человек запишет и зашифрует сообщение? Нам нужно как то распознать, кто именно прислал нам зашифрованное сообщение.
Для этого в криптографии придумана электронная подпись. Ее смысл одновременно прост и сложен на первый взгляд: у нас есть пара ключей для шифрования и расшифрования. Соответственно, мы можем сообщить всем не тот ключ, которым нужно зашифровать сообщение от нас, а тот, которым можно расшифровать это сообщение. Соответственно, получатель нашего сообщения пробует наш ключ, и если он подошел, значит сообщение пришло от нас, собеседник в нас уверен.
Но здесь возникает новая проблема: Отправляемые файлы могут быть куда более объемными, чем один простой текстовый документ. Могут быть объемные видеофайлы, аудиофайлы, или целые тома текста. И здесь постоянно шифровать и расшифровывать до боли длинные сообщения бесконечное множество раз становится очень неудобным занятием.
Для этого было придумано хэширование. Хэш функция позволяет нам получить, например, из буквы А – шестизначную комбинацию символов, или из буквы Б - другую шестизначную комбинацию. Точно так же на вход мы можем загрузить целый том из книги “Война и мир”, и точно так же получить какую то уникальную шестнадцатизначную последовательность символов. То есть, любое большое сообщение мы можем преобразовать в маленькую комбинацию символов.
Но у хэш функции есть одно очень интересное и полезное свойство. Она является односторонней. Это значит, что она вычисляется только в одну сторону. Элементарный пример: умножим число 5 на число 10, получится 50. Так же умножим 25 на 2. Или например умножим число 500 на 0,1.
Во всех случаях как итог мы получаем 50, но мы не можем узнать, как именно мы получили это число. Это и есть односторонняя функция.
Таким образом мы имеем один общий результат
У нас есть первый том Войны и МИРА в 448 листах. Мы его преобразовываем в хэш функцию из 16уникальных символов. Далее, мы своим закрытым ключом шифруем эти 16 символов и отправляем нашему адресату этот том. Наш собеседник получает эту хэш функцию, и расшифрует ее нашим открытым ключом. Сравнивает, убеждается что значения совпали, значит это сообщение действительно было отправлено нами, текст не был изменен, всё подлинно и нам можно доверять.
На этих трёх китах и держится наша современная криптография
Это ассиметричное шифрование, хэширование и электронная подпись.