О проекте

PairPhone - кроссплатформенная тестовая утилита для "точка-точка" шифрования дуплексной речи через GSM сжатый голосовой канал. Используются современные криптографические решения, обеспечивающие 128-битный уровень защиты: Triple Diffie-Hellman согласование ключей на эллиптической кривой 25519 и SHA3 Keccak 1600/576 Sponge Duplexing симметричное шифрование, хеширование, MAC, SPRNG. Каждый звонок обеспечивается PSF для шифрования и скрытой идентификации, согласование ключей устойчиво к UKS и KCI атакам. Возможна первичная аутентификация общим паролем и путем сравнения отпечатков секрета, а также скрытое уведомление о принуждении. Устройства спариваются во время первого ‘гостевого’ звонка, сертификаты для каждого конакта помещаются в адресную книгу.
Речь сжимается эффективным и надежным MELPE кодеком, требующим скорость обмена 1200 bps и допускающим BER до нескольких процентов. Потоковое шифрование выполняется в CTR режиме с 67.5 mS блоками (речевыми фреймами) и устойчиво к распространению ошибок. Голосовой детектор позволяет использовать речевые паузы для восстановления потерь синхронизации после временной потери связи.
Особенность пректа является специально разработанный псевдоречевой модем с малыми искажениями несущей тандемом GSM FR кодеков во время GSM голосового звонка. Модем обеспечивает скорость передачи данных 1200 bps с менее чем 1% битовых ошибок  и быструю синхронизацию "на лету" за менее чем 200 ms потока.


Системные требования

MELPE кодек отдельно требует 40 MIPS, поэтому CPU должен обеспечивать как минимум 50 MIPS вычислительной мощности. Для работы PairPhone может быть использован PC (Linux, Windows) на базе Intel Celeron 1000MHz 512RAM, имеющий два аналоговых аудио устройства: одно подключено к гарнитуре и работающее на 8 kHz моно, второе - к линии GSM линка и работающее на 48 kHz моно. В качестве дополнительного интерфейса может быть использовано внешнее USB аудио устройство или Bluetooth аудио гарнитура. Также может быть использован виртуальный аудио кабель  (aloop for Linux or vbcable for Windows), позволяющий подключить PairPhone к любому паралельно запущенному VOIP приложению,  (например, Skype), добавляя слой "точка-точка" шифрования речи.


Установка

Исходный код PairPhone выполнен на С и полностью открыт, проект собиратеся с помощью gcc в *nix (тестировано с Ubuntu и Debian) и mingw в Windows (тестировано от Win98 до Win8), не использует внешних библиотек за исключением  libasound2-dev (Linux alsa audio) или winmm, comctl32 (Windows wave audio). Испольняемый файл статически линован и портейбельный, может быть запущен со съемного носителя или TrueCrypt контейнера, не пишет на диск, кроме как в свою рабочую папку и только во время спаривания.
Сначала запустите программу по умолчанию для получения списка аудиоустройств, инсталированных в системе, затем сконфигурируйте интерфейсы для гарнитуры и линка в 'conf.txt' файле, например:

#headset
AudioInput=plughw:1,0
AudioOutput=plughw:1,0
#line
_AudioInput=plughw:2,0
_AudioOutput=plughw:2,0

Интерфейс

Для начала работы запустите испольняемый файл в рабочей папке. PairPhone будет работать в режиме ожидания и автоматического приема входящего звонка. Для выполнения команд введите необязательную строку-параметр и нажмите F1-F10 для инициализации следующих действий :


  •             F1 - помощь
  •       <имя> F2 - спаривание устройств во время звонка (имя должно быть задано)
  •     {маска} F3 - поиск контактов в книге (маска может быть задана)
  •       {имя} F4 - исходящее соединение (имя может быть задано, иначе 'гость')
  •             F5 - повторение последнего исходящего соединения
  •       {пин} F6 - пин код для доступа к контактам(пока не реализовано)
  •  {пас}{пас} F7 - общий пароль (1 или 2 слова или пустой по умолчанию)
  •             F8 - прерывание активного соединения в режим ожидания (hung up)
  •             F9 - переустановка соединения (согласование новых ключей)
  •             F10 - выход


Другие клавиши, используемые для управления:

  •              Tab - переключатель активации микрофона
  •              Del - очистка строки ввода
  •              Back - удаление последнего введенного символа


Разговор

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


Начальная аутентификация

Первое соединение с новым абонентом устанавливается в "гостевом" режиме нажатием клавиши F4. После установки такого соединения необходимо убедиться в его секретности (отсутствии атаки "человек-посредине", MitM). В случае непосредственного контакта абонентов достаточно сравнить сессионные коды (отпечатки секрета), отображаемые после установки соединения. Если же абоненты впервые контактируют удаленно, то необходимо предварительно согласовать одноразовый пароль, например, используя PGP. После установки соединения абоненты представляются друг другу и вводят общий пароль с нажатием клавиши F7, после чего контролируют уровень аутентификации, обновляемый во время речевых пауз. При достижении порога 80-90% соединение считается надежным для спаривания устройств.


Спаривание устройств

После того, как установлено "гостевое" соединение и проверена его надежность, абоненты выбирают уникальные имена для данного контакта и вводят их с нажатием клавиши F2. При этом создаются долговременные ключевые пары и помещаются в адресную книгу в качестве сертификата для данного контакта.  После спаривания устройств для установки соединения между ними инициатор использует назаначенное для данного контакта имя с нажатим клавиши F4. При приеме входящего соединения от ранее спаренного устройства также будет отображаться назначенное для данного контакта имя. Идентификация и аутентификация выполняется автоматически и защищена от пассивного и активного атакующего с обеспечением совершенной обратной секретности (PFS).


Скрытое уведомление о принуждении

Абоненты могут убедиться в отсутствии принуждения к сотрудничеству противоположной стороны во время текущего звонка. Для этого стороны должны заранее согласовать уникальную для каждого контакта секретную фразу, состоящую из двух слов. Одна из сторон меняет слова местами, фраза запоминается. После установки соединения фраза вводится нажатием F7. Достаточный уровень аутентификации, обновляемый во время речевых пауз, подтверждает аутентичность абонентов. В случае принуждения участник изменяет второе слово в своей фразе на любое другое, подходящее по смыслу. Результат аутентификации для этого участника будет положительный, в то время как на противоположной стороне отсутствии аутентификации свидетельствует о провале. Злоумышленник не может определить валидность использованной фразы,  не смотря на любые предыдущие пассивные или активные действия.


Внимание!

Тестовая версия PairPhone представлена "как есть" и не проверялась никем, кроме разработчика. До проведения тщательного аудита кода не рекомендуется использовать данную программу в случаях "жизни или смерти". Технические детали реализации криптографии и модема смотрите в документе и подробно комментированном исходном коде.

Контакты

 “Van Gegel, 2016” <torfone@ukr.net>,<gegel@umsa.edu.ua>

BTC: 19kUeFQsh72oPzSmGKF5Wny4Jp495NBFcg
LTC: LZaogEahLPFJE5CYrCuXSroVCvHz8NowR9
WMZ: Z299147074259
(проверяйте подпись!)

Русскоязычное сообщество может обсудить проект в теме на форуме PGPRU.


© 2016 Van Gegel   -   Contact Developer