messagePrivateKey_Bob, PublicKey_Bob)
Элис требуется отправить сообщение message Бобу, чтобы никто кроме Боба не мог его прочитать.
PublicKey_Bobmessage_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)
# Боб создает связку 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
# список открытых ключей $ gpg -k # список секретных ключей $ gpg -K
Исходный код сервера см. в git.
# установка 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"
https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/
# Генерируем самоподписанный ключ и сертификат $ 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"
На будущее: в каждом запросе в Telegram Bot API используется секретный token. Это можно делать только в HTTPS!
JavaScript Object Notation
gpg связку ключей. Экспортировать свой публичный ключ в текстовый файл.gpg.