User Tools

Site Tools


chat-bots:zaschischennaja_peredacha_dannyx._prosmotr_trafika._json

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
chat-bots:zaschischennaja_peredacha_dannyx._prosmotr_trafika._json [2025/09/23 02:28] – created olegsklyarovchat-bots:zaschischennaja_peredacha_dannyx._prosmotr_trafika._json [2025/09/24 07:25] (current) – [Заметки лектора] olegsklyarov
Line 1: Line 1:
 ====== Защищенная передача данных. Просмотр трафика. JSON. ====== ====== Защищенная передача данных. Просмотр трафика. JSON. ======
 +
 +===== Защищенная передача данных =====
 +
 +
 +==== Дано ====
 +
 +  * Alice — отправитель сообщения ''message''
 +  * Bob — получатель (''PrivateKey_Bob'', ''PublicKey_Bob'')
 +
 +==== Задача ====
 +
 +Элис требуется отправить сообщение ''message'' Бобу, чтобы никто кроме Боба не мог его прочитать.
 +
 +==== Алгоритм ====
 +
 +
 +  - Элис запрашивает у Боба его ''PublicKey_Bob''
 +  - Элис шифрует свое сообщение ''message_encrypted = Encrypt(message, PublicKey_Bob)''
 +  - Элис отправляет ''message_encrypted'' Бобу по незащищенному каналу
 +  - Боб расшифровывает ''message_decrypted = Decrypt(message_encrypted, PrivateKey_Bob)''
 +
 +На выходе имеем: ''message == message_decrypted''
 +
 +То есть ''message == Decrypt(Encrypt(message, PublicKey_Bob), PrivateKey_Bob)''
 +
 +==== Правила безопасности ====
 +
 +  * Открытый ключ можно и нужно опубликовать в открытом доступе для всех желающих. Например см. https://keys.openpgp.org
 +  * Приватный ключ храним в секрете!!!
 +
 +
 +
 +===== Практика шифрования файла при помощи GNU Privacy Guard (GPG) =====
 +
 +https://gnupg.org
 +
 +<code bash>
 +# Боб создает связку GPG ключей: name = Bob, email = bob@example.com
 +(Bob) $ gpg --full-gen-key
 +> (1) RSA and RSA
 +> 4096
 +> Bob Ivanov
 +> bob@example.com
 +> 8312 (ваша группа в ННГУ)
 +> придумать, запомнить и ввести Passphrase
 +
 +# Боб экспортирует открытый ключ, чтобы передать его Элис
 +(Bob) $ gpg --export -a bob@example.com > PublicKey_Bob.gpg
 +
 +# Боб отправляет файл PublicKey_Bob.gpg Элис доступным способом (почта, telegram, флешка и тп)
 +
 +# Элис импортирует ключ Боба в GPG
 +(Alice) $ gpg --import PublicKey_Bob.gpg
 +
 +# Элис делает ключ Боба доверенным
 +(Alice) $ gpg --edit-key bob@example.com
 +> trust
 +> 5
 +> quit
 +
 +# Элис шифрует файл с сообщением при помощи открытого ключа Боба
 +# результат сохраняется в message.txt.asc (aka message_encrypted)
 +(Alice) $ gpg -e -a -r bob@example.com message.txt
 +
 +
 +# Элис отправляет зашифрованный файл message.txt.asc Бобу
 +
 +# Боб расшифровывает message.txt.asc (aka message_encrypted)
 +(Bob) $ gpg -d -o message_decrypted.txt message.txt.asc
 +</code>
 +
 +==== Полезные команды ====
 +
 +
 +<code bash>
 +# список открытых ключей
 +$ gpg -k
 +
 +# список секретных ключей
 +$ gpg -K
 +</code>
 +===== Просмотр сетевого трафика =====
 +
 +==== Замечания про HTTP ====
 +
 +  * Сетевая модель OSI: стек протоколов, инкапсуляция ("матрешка")
 +  * Первоисточник: стандарты RFC, публикуются организацией https://www.ietf.org. Сайт https://www.rfc-editor.org. Примеры:
 +    * [[https://www.rfc-editor.org/info/rfc793|RFC 793 Transmission Control Protocol, September 1981]]
 +    * [[https://www.rfc-editor.org/info/rfc791|RFC 791 Internet Protocol, September 1981]]
 +
 +==== Смотрим HTTP трафик ====
 +
 +Исходный код сервера [[https://github.com/olegsklyarov/unn-http-api-bots|см. в git]].
 +
 +<code bash>
 +# установка wireshark
 +$ sudo apt install wireshark
 +$ sudo dpkg-reconfigure wireshark-common
 +$ sudo chmod +x /usr/bin/dumpcap
 +
 +# запускаем wireshark
 +$ wireshark
 +
 +# запускаем HTTP сервер
 +$ python3 http-server.py
 +
 +# отправляем HTTP запрос
 +$ curl "http://127.0.0.1:8000?login=user&password=passwd"
 +</code>
 +
 +https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/
 +
 +
 +==== Смотрим HTTPS трафик ====
 +
 +<code bash>
 +# Генерируем самоподписанный ключ и сертификат
 +$ openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
 +
 +# запускаем HTTPS сервер
 +$ python3 https-server.py
 +
 +# отправляем HTTPS запрос (ошибка curl: самоподписанный сертификат)
 +$ curl https://127.0.0.1:8443
 +
 +# отправляем HTTPS запрос (разрешаем самоподписанный сертификат)
 +$ curl --insecure "https://127.0.0.1:8443?login=user&password=passwd"
 +</code>
 +
 +На будущее: в каждом запросе в Telegram Bot API используется секретный **token**. Это можно делать только в HTTPS!
 +
 +
 +===== JSON =====
 +
 +JavaScript Object Notation
 +  * human-readable
 +  * https://docs.python.org/3/library/json.html
 +  * https://jsonpath.com
 +  * https://jqlang.org
 +
 +
 +===== Д/З =====
 +
 +  - Создать про помощи ''gpg'' связку ключей. Экспортировать свой публичный ключ в текстовый файл.
 +  - Отправить [[https://t.me/olegsklyarov|Олегу Андреевичу]] файл, содержащий Ваш публичный ключ.
 +  - Получить в ответ зашифрованное сообщение, расшифровать его при помощи ''gpg''.
 +  - Отправить [[https://t.me/olegsklyarov|Олегу Андреевичу]] расшифрованное сообщение.
 +
 +
 +==== Заметки лектора ====
 +  * Данный контент занял примерно час, остальное время принимали GPG зачет. Можно добавлять ещё материал.
 +  * Идея: написать [[chat-bots/projects/gpg-checker-bot#бот для приема GPG зачета]]
 +  * Открытые ключ можно смело слать в общий чат, отмечать выполненные реакцией emoji. Это добавит реальной атмосферы незащищенного канала связи (общий чат), но информация читается только получателем.
 +
  
chat-bots/zaschischennaja_peredacha_dannyx._prosmotr_trafika._json.1758583728.txt.gz · Last modified: by olegsklyarov