@12rbah

Правильно ли я понимаю работу защищенных протоколов?

Я начал изучать тему шифрованной связи и написать небольшое приложение для обмена данными. Идея примерно такая:
* Задается одинаковый ключ шифрования на обеих сторонах
* При передаче информации сначала она шифруется ключом и потом передается в таком виде
* другой пользователь принимает эти данные и расшифровывает этим же ключом

Подскажите какие ошибки есть и как можно улучшить эту идею?
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
john36allTa
@john36allTa
alien glow of a dirty mind
Это симметричное шифрование, ассиметричное иначе.
Ассиметричное на примере TLS (https):
Сервер и пользователь имеют(генерируют) по паре ключей - открытый и закрытый(секретный) в момент инициализации соединения. Они обмениваются открытыми ключами. Юзер шифрует открытым ключем сервера и отправляет ему запрос, расшифровать который возможно только секретным ключом сервера. И в обратном порядке также, ответ сервер шифрует открытым ключем юзера...
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
Все правильно, но есть один ньюанс - как сообщить собеседникам находящимся за тысячи километров ключ которым они будут шифровать? При личной встрече передавать? Если вы отправите ключ по открытому каналу - его перехватит злоумышленник.

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

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

Вы передаете открытый ключ вашему собеседнику по незащищенному каналу связи, открытым текстом.
Ваш собеседник придумывает какой нибудь сложный ключ(сеансовый ключ), зашифровывает этот ключ вашим открытым ключом и передает вам получившееся сообщение.
Расшифровать это сообщение можете только вы, поскольку закрытый ключ есть только у вас.
Вы расшифровываете сообщение и видите сеансовый ключ.
В итоге сеансовый ключ известен только вам и вашему собеседнику.
Далее все сообщения шифруются этим сеансовым ключом - обычное симметричное шифрование.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
CityCat4
@CityCat4 Куратор тега Информационная безопасность
Если я чешу в затылке - не беда!
Общая идея правильная - мы так в школе в "разведчиков" играли :) Но тут возникает одна проблема - однокласснику ключ передать не проблема :) А как быть, если чел от Вас за тыщи км?

Нет, конечно можно вот так:
"...— Только не открытым, — насторожилась Юлька. — Закодируй как-нибудь.
Риггельд некоторое время молчал, вычисляя.
— Рома, — сказал он. — Твой день рожденья. Сложи месяц и число. Умножь
на десять. Вычти… э-э-э… Рыцари скольки островов, помнишь?..."
(С) Владимир Васильев "Смерть или слава"

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

Так что, несмотря на то, движемся в верном направлении, идею нужно пересмотреть :)
Ответ написан
Комментировать
pazukdev
@pazukdev
Java Dev
Вы можете безопасно обмениваться данными с кем-то только в том случае, если у Вас обоих есть общий ключ для их шифровки и расшифровки, о котором больше никто не знает. Проблема в том, как сделать так, чтобы он оказался у вас обоих, но при этом никто его не узнал. Т.е. как передать ключ по открытому каналу не скомпроментировав его. Ассиметричное шифрование как раз вот про это.

Алгоритм этой операции такой:

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

2. На основе публичного ключа сервера клиент создает разделяемый (общий) ключ, сохраняет его у себя.

3. Клиент шифрует свой разделяемый ключ и в зашифрованном виде передает серверу.

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

Ассиметричное шифрование свою задачу выполнило - handshake состоялось. Далее клиент и сервер имея разделяемый ключ могут обмениваться уже симметрично зашифрованными данными.
Ответ написан
Комментировать
msHack
@msHack
Нет вы неправильно поняли алгоритмы шифрования бывают разные упомянутый вами алгоритм это алгоритм с открытым ключом есть открытый ключ есть закрытый ключь открытым шифруем закрытым дешифруем это алгоритм RSA есть еще AES

чтобы делать защищенные протоколы не обязательно изучать шифрование можно просто использовать библиотеку функций на присмер openssl
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы