Проект TFC развивает параноидально защищённую систему обмена сообщениями
В рамках проекта TFC (Tinfoil Chat) предпринята попытка создания прототипа параноидально-защищённой системы обмена сообщениями, которая сохраняла бы тайну переписки даже при компрометации конечных устройств. Для упрощения проведения аудита код проекта написан на языке Python и доступен под лицензией GPLv3.
Распространённые ныне системы обмена сообщениями, использующие сквозное шифрование, позволяют защитить переписку от перехвата на промежуточных серверах и от анализа транзитного трафика, но не защищают от проблем на стороне клиентского устройства. Для компрометации систем на базе сквозного шифрования достаточно на конечном устройстве скомпрометировать операционную систему, прошивку или приложение-мессенджер, например, через эксплуатацию ранее неизвестных уязвимостей, через изначальное внедрение в устройство программных или аппаратных закладок или через доставку фиктивного обновления с бэкдором (например, при оказании давления на разработчика спецслужбами или криминальными группами). Даже если ключи для шифрования находятся на отдельном токене, при наличии контроля за системой пользователя всегда остаётся возможность трассировки процессов, перехвата данных от клавиатуры и отслеживания вывода на экран.
TFC предлагает программно-аппаратный комплекс, требующий применения на стороне клиента трёх отдельных компьютеров и специального аппаратного сплиттера. Весь трафик в процессе взаимодействия участников обмена сообщениями передаётся через анонимную сеть Tor, а программы для обмена сообщениями выполнены в форме скрытых сервисов Tor (пользователи при обмене сообщениями идентифицируются по адресам скрытых сервисов и ключам).
Первый компьютер выступает шлюзом для подключения к сети и запуска скрытого сервиса Tor. Шлюз манипулирует только уже зашифрованными данными, а для шифрования и расшифровки используются два остальных компьютера. Второй компьютер может использовать только для расшифровки и отображения полученных сообщений, а третий только для шифрования и отправки новых сообщений. Соответственно, второй компьютер имеет только ключи для расшифровки, а третий только ключи для шифрования.
Второй и третий компьютеры не имеют прямого подключения к сети и отделены от компьютера-шлюза специальным USB-сплиттером, использующим принцип "диод данных" и пропускающим данные физически только в одном направлении. Сплиттер допускает только отправку данных в сторону второго компьютера и только приём данных от третьего компьютера. Направление данных в сплиттере ограничивается при помощи оптронов (простого обрыва линий Tx и Rx в кабеле недостаточно, так как обрыв не исключает передачи данных в обратном направлении и не гарантирует, что линия Tx не будет использована для чтения, а Rx для передачи). Сплиттер можно собрать из подручных деталей, схемы прилагаются (PCB) и доступны под лицензией GNU FDL 1.3.
При подобной схеме компрометация шлюза не позволит получить доступ к ключам шифрования и не даст возможность продолжить атаку на оставшиеся устройства. В случае компрометации компьютера, на котором размещены ключи для расшифровки, информацию с него не получится передать во внешний мир, так как поток данных ограничен только получением информации, а обратную передачу блокирует диод данных.
Шифрование выполнено на базе 256-разрядных ключей на XChaCha20-Poly1305, для защиты ключей паролем применяется медленная хеш-функция Argon2id. Для обмена ключами применяется X448 (протокол Диффи — Хеллмана на базе Curve448) или PSK-ключи (pre-shared). Каждое сообщение передаётся в режиме совершенной прямой секретности (PFS, Perfect Forward Secrecy) на базе хэшей Blake2b, при котором компрометация одного из долговременных ключей не позволяет расшифровать ранее перехваченный сеанс. Интерфейс приложения предельно прост и включает окно, разбитое на три области - отправка, получение и командная строка с логом взаимодействия со шлюзом. Управление производится через специальный набор команд.