Перейти к содержимому

Поиск по сайту

Результаты поиска по тегам 'TLS'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • ДубоБлог
  • Дача Игоря

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Предложения по улучшению игрового процесса
    • Моды и плагины
    • Жалобы на игроков
    • Ивенты
  • Общение
    • Вопрос-ответ
    • Беседка программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Багтрекер
    • Архив

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 1 результат

  1. Не так давно @LeshaInc выкладывал свою программку, фтп клиент-то, и кто-то сказал про ssh. Это, конечно, задача интересная, но речь не об этом. Уже тогда на протяжении дней трёх я изучал вот этот документец. И с тех пор, добавив более 4 тысяч, удалив более двух тысяч строк кода, перечитав этот RFC вдоль и поперёк, исписав 22 страницы моего настольно-напольного блокнота, погуглив 183 запроса про тлс (надо же, гугловская статистика иногда бывает полезна для себя), чуть не потратив 2500 рублей на 12 страниц, описывающих формат десятичных чисел ( ) и даже найдя один баг в Computronics, который мне не давал покоя часов двенадцать, а то и больше, в общем случае... Я наварил TLS сокеты в OpenComputers. Что такое TLS? В нашей ирке спрашивавшим я отвечал так: это такая штука, из-за которой появляется замочек в адресной строке браузера. Фактически, это корректно, и им этого достаточно, но позволю немного поглубже объяснить. В девяностых годах компания Netscape разработала концепцию и реализацию безопасной передачи данных через недоверенное соединение. Назвалось это чудо SSL, что означает Secure Sockets Layer — слой безопасных сокетов, и выпущено было две версии: 2.0 и 3.0. Версия 1.0 была настолько дырявой, что даже не была никогда выпущена в публичный доступ. Но и, как это неудивительно, ни 2.0, ни 3.0 сейчас мало того, что не считаются безопасными, их поддержку уже исключают из всяких популярных подуктов типа Firefox или Chrome. Netscape, впрочем, недолго держала это изобретение. Ребята из Internet Engineering Task Force (IETF) в 1999 году выпустили свою, 3.1 версию SSL, которая хоть и имела некоторую совместимость с прошлой версией, но имела много нового и исправляла некоторые проблемы безопасности в прошлом протоколе. Версия SSL от IETF с тех пор называется TLS. Все версии, для справки: ?: SSL 1.0 1992: SSL 2.0 1995: SSL 3.0 1999: SSL 3.1 // TLS 1.0 2006: SSL 3.2 // TLS 1.1 2008: SSL 3.3 // TLS 1.2 И хоть сейчас SSL и TLS используются взаимозаменяемо, правильнее, всё же, говорить TLS. И всё же, что это за штука такая? TLS и его предшественник, SSL, — это протокол-прослойка между слоем данных приложений и слоем TCP. Как-то так: Слой данных приложений [Application Data]. Слой безопасности [Transport Layer Security, TLS]. Слой протокола контроля передачи данных [TCP]. Таким образом, переход на TLS не требует огромных изменений в код, достаточно заменить обычную имплементацию сокетов на защищённую и сгенерировать ключи. Данные с верхнего слоя шифруются и передаются по низшему слою к адресату, где данные снова расшифровываются, сверяются и обрабатываются. Как работает TLS. Перед тем, как передавать данные, неплохо было бы договориться с другим концом соединения, какой набор шифрования использовать, передать некоторые дополнительные данные, подтвердить подлинность сервера (для защиты от встраивания в соединение) и, конечно, обменяться ключами, которыми будет шифроваться информация. Для этого предназначена процедура рукопожатия — Handshake. Клиентом генерируется рандомная информация, шифруется асимметричным шифратором (ECDH-RSA или RSA) и передаётся серверу. Перед этим сервер предоставляет цепочку сертификатов, каждый последующий сертификат которого подтверждает предыдущий. В конце цепочки получается самоподписанный сертификат, которому надо доверять (есть целые списки таких корневых сертификатов). После того, как рандомные байты переданы, сервер и клиент из них генерируют ключи: два ключа проверки валидности информации (на сервер и клиент отдельно для защиты от атаки), два ключа симметричного шифрования данных и, если того требует шифратор, два инициализирующих вектора. В конце рукопожатия отправляют финальное сообщение, которое уже шифруется. Оно содержит хэш всех сообщений рукопожатия, чтобы предотвратить перехват трафика. Каждое шифрованное сообщение имеет специальный код авторизации (MAC), который включает хэш пересылаемых данных и номер последовательности, который имеется отдельно для приёма и отдачи, начинается с 0 и увеличивается на 1 с каждым отосланным сообщением. Таким образом, если сообщение было перехвачено и позже отослано, или трафик был перепутан, то и сервер, и клиент после проверки кода авторизации закрывают соединение. Как видно, протокол этот отнюдь не простой, а потому я ещё больше ценю свою программку. Она не полностью соответствует стандартам, в ней нет проверки сертификата, да и сиферы пока только с RSA, но уже позволяет создать соединение с GitHub, Google, да и другими HTTPS-сайтами. Оно работает для меня как-то нестойко, шатко, долго, в общем, неустойчиво. Но ведь работает! На скрине выше успешно была получена информация длиной в 27763 байта. Библиотека предоставляет таблицу с одной функцией: tlsSocket(host: string[, port: number]). Возвращает она обёрнутый сокет: таблицу с функциями: socket.write(data: string) — посылает данные на сервер. socket.read(): string or nil, string — читает данные с сокета. socket.close() — закрывает сокет (делает это правильным способом, оповещая сервер). socket.id(): string — возвращает ID сокета. socket.isClosed(): boolean — говорит, закрыт ли сокет. socket.setTimeout(to: number) — устанавливает предельное время ожидания данных с сокета, в общем, таймаут соединения. Все функции вызываются с ., не с :! Зависимости: Компоненты Карта данных второго уровня. Она предоставляет получение рандомных данных и HMAC. Улучшенный шифратор (Advanced Cipher Block) из Computronics. RSA шифрование. Интернет-карта, чтобы, очевидно, посылать запросы. Библиотеки libder-decoder — моя собственная библиотека, которая парсит сертификаты. libbigint — либа БОЛЬШИХ чисел (сначала была библиотека от @Zer0Galaxy, но работала она жутчайше медленно: более минуты против пары секунд). lua-lockbox — либа с криптофункциями. К сожалению, не все они работают на Lua 5.3, но есть рабочий AES-128 шифратор. Lua 5.3. На прошлой версии работать не будет! OpenOS 1.6. OpenComputers 1.6. Установка из OPPM: oppm install libtls. Исходный код. P. S. Прошло достаточно много времени, и теперь уже на дворе (с 2018) выкачен TLS 1.3, который как-то слишком разительно отличается от TLS 1.2, который я изучал и имплементировал. Но 1.2 должен пока (минимум ещё годов 4-5) работать.
×
×
  • Создать...