Сам себе Телеграм

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

Предположим, надо тебе секретно отправить фотографию чего-нибудь другу. Я взял фотографию путина. Нет, не того Путина, который Владимир Владимирович, а путина, который национальное канадское хрючево. Но не суть. Передать таким образом можно что угодно, хоть диаграммы подрыва Кремля. Ну да, можно использовать всякие там запароленные RAR-архивы (по сути являющиеся симметричным шифрованием), но возникает проблема с обменом ключами для дешифровки. Как ты будешь сообщать пароль собеседнику? По телефону? Он прослушивается. По электронной почте? Она пишется. А если у тебя уже есть безопасный канал для передачи подобных данных — зачем мучаться с RAR? Поэтому не будем мелочиться, и сделаем всё, как у больших.

У вас обоих стоит Линукс с установленным пакетом OpenSSL. Дальше чисто дело техники, и примерно всё то же самое делает и сам мессенжер Телеграм, просто сама работа алгоритмов от тебя скрыта. Эдакий Протокол Диффи — Хеллмана, только в полностью ручном режиме.

Твой собеседник должен:

Создать пару публичных/приватных RSA ключей:
openssl genpkey -algorithm RSA -out private.key.pem -pkeyopt rsa_keygen_bits:4096

Вытащить публичный ключ и записать его в файл:
openssl rsa -pubout -in private.key.pem -out public.key.pem

Прислать содержимое public.key.pem (оно текстовое) тебе, например, обычной почтой (*). Разглашение публичного ключа никому ничего не даёт — для дешифровки нужна его приватная часть.

Теперь тебе нужно зашифровать данные этим его присланным публичным ключом.

Сходу зашифровать несимметричным алгоритмом RSA большой файл, не разбивая его на мелкие куски невозможно, команда
openssl rsautl -encrypt -inkey public.key.pem -pubin -in poutine.jpeg -out poutine.jpeg.enc
выдаёт ошибку о том, что размер данных слишком большой для данного ключа длиной 4096 бит. Но всё, что меньше 4096 – 11 бит, зашифровать можно. Поэтому делают так: создают ключ для симметричного шифрования, например, AES или Twofish — это уж кому что милее — им кодируют файл, а уже сам ключ несимметрично шифруют публичным ключом, и передают его собеседнику в кодированном виде вместе с данными.

Делаем случайный ключ для симметричного шифрования:
openssl rand 256 -out symm.key

Шифруем фотографию путина алгоритмом AES256 с этим ключом:
openssl enc -aes-256-cbc -salt -in poutine.jpeg -out poutine.jpeg.enc -pass file:./symm.key

Шифруем сам ключ алгоритмом RSA:
openssl rsautl -encrypt -inkey public.key.pem -pubin -in symm.key -out symm.key.enc

Теперь у нас есть два шифрованных файла, в одном данные, шифрованные AES256, в другом — шифрованный ключ к AES256.

Чтобы послать это по обычной почте, переведём все бинарники в текст кодировкой Base64.

cat poutine.jpeg.enc | base64
cat symm.key.enc | base64

Текст присылаем нашему собеседнику.

Фсе. Теперь ни одна живая душа, без владения приватным ключом, не сможет ничего прочитать. И всё делается элементарно, на коленке. В-общем, “террористам”, которых якобы гоняет Роскомгестапо, блокировка Телеги не преграда совершенно. Ну, а страдают, как обычно, непричастные.

PS: Единственный способ передать государству ключи для дешифровки сообщений — это на этапе генерации у клиента несимметричных ключей сливать приватную часть “кому надо”. Т.е. это надо спецом встраивать такую функцию в клиента. А клиент Телеги — опаньки — опенсорсный. Вставка подобной функциональности будет мгновенно засечена.

Поэтому сам запрос на получение ключей — нелеп и смехотворен. Я могу отдать только то, что у меня есть.

PPS: Нынче модно ненавидеть Роскомгестапо за то, что они делают. А меж тем претензия не по адресу. Кто создал Роскомгестапо? Кто принял законы, по которым он работает? Кто подписал эти законы? И кто, вообще, выбрал всех этих людей?

* В реальных применениях публичный ключ ещё дополнительно подписывается центром сертификации, которому доверяют оба участника — иначе сообщения возможно перехватить, и ключи подменить, устроив атаку типа “Человек посередине”.