Ssl
Про шифрование и ssl кратко¶
Важные понятия:¶
Обмен идет сертификатами - не ключами !
Public keys: могут шифровать даннные(Encrypt) и проверять(Verify) подпись
Private keys: могут расшифровывать(Decrypt) данные и подписывать(Sign)
В шифровании данных данные шифруются публичным ключом для защиты, и только обладатель закрытого ключа может их расшифровать.
В цифровой подписи закрытый ключ используется для подписания данных (шифрования хэша), и любой, у кого есть публичный ключ, может проверить подпись, расшифровав этот хэш.
Хэширование — это процесс применения хэш-функции к данным с целью получения уникального "отпечатка" или "хэш-суммы" для этих данных.
Конечный результат всегда имеет фиксированную длину вне зависимости от того какого размера было исходное сообщение. Хэширование – это односторонний процесс, то есть из хэша невозможно получить обратно исходное сообщение.
Цифровая подпись: - это хэш на передаваемое сообщение, и этот хэш зашифрован закрытым ключом сервера например
В механизме цифровой подписи задействованы 2 алгоритма: хэширование и ассиметричное шифрование.
Сертификат - это ключ, подписанный кем-то(сервером - самоподписанный, CA - PKI), когда CA => подписывает server.key = на выходе server.crt
Про механизмы криптографии:
На 3 этапе когда сервер отправляет сертификат он состоит из публичного ключа сервера и цифровой подписи(hash на передаваемое сообщение(любые данные), и hash зашифрован приватным ключом CA)
За счет чего происходит проверка подлинности сообщений например на этапе 4
1) как мы уже знаем отправитель прежде, чем отправить сообщение, генерирует его хэш.
2) Затем, используя закрытый ключ, который известен только ему, шифрует хэш и добавляет его в конец передаваемого сообщения. Это и есть цифровая подпись.
3) Далее сформированное сообщение с подписью передается получателю. Так как канал связи не защищен, то вполне вероятно, что хакер может подделать сообщение. Однако он не сможет сгенерировать подпись, потому что у него нет закрытого ключа отправителя.
4) На приеме получатель проводит с помощью открытого ключа, который известен всем, он расшифровывает подпись и получает оригинальный хэш.
5) Затем он генерирует хэш из уже полученного сообщения.
6) Оба хэша сравниваются и, если они одинаковы, то полученное сообщение подлинное, в противном случае удаляется.
Интересен пункт 5:
Клиент генерирует симметричный ключ шифрования.
Затем, используя открытый ключ сервера, шифрует сгенерированный ключ и передает серверу.
На этом этапе канал связи уязвим для перехвата злоумышленником, однако, даже перехватив зашифрованные данные, их сложно взломать, не имея закрытого ключа.
Поэтому для повышения сложности раскрытия или, иначе говоря, криптостойкости, используют длинные ключи и сложные алгоритмы шифрования.
Сервер, приняв сообщение, расшифровывает его своим закрытым ключом. С этого момента оба участника обладают одинаковым сеансовым ключом.
Обладая общим ключом клиент и сервер устанавливают защищенный канал связи.
Ассиметричный нужен так как данный алгоритм требует значительных вычислительных ресурсов и к тому же гораздо медленнее, чем симметричный.
Наглядный пример¶
У нас есть два персонажа: Боб (сервер) и Алиса (браузер пользователя). Боб передает Алисе навесной замок. Открыть этот замок может только Боб, так как ключ есть только у него.
Замок = публичный (открытый) ключ.
Ключ от замка = приватный (закрытый) ключ.
Получив замок - если лично от Боба тут все просто доверяем - если через посыльного(тут надо еще проверить замок то пришел от Боб или нет - это можно сделать через - fingerprint как при ssh (ну допустим литой замок вскрыть который нельзя и картинку с печатью на нем нам показал Боб или нам лично передал замок Боб) - цифровую подпись выданную Доверенным центром по выпуску замков, как при https
далее Алиса надевает его на ящик, в котором содержится некая секретная информация, и посылает обратно Бобу. Аналогично, браузер шифрует сообщение публичным ключом и отдает серверу.
Ящик с замком попадет к Бобу, тот откроет замок своим ключом и узнает секретную информацию. Так, сервер расшифровывает сообщение закрытым ключом, который есть только у него.