id: Гость   вход   регистрация
текущее время 11:29 12/12/2024
Автор темы: gegel, тема открыта 24/06/2014 23:21 Печать
Категории: криптография, инфобезопасность, протоколы, защита телефонной связи
https://www.pgpru.com/Форум/ПрактическаяБезопасность/АнонсИдеиАппаратногоСкремблера
создать
просмотр
ссылки

Анонс идеи аппаратного скремблера

Параллельно работе над Linux OnionPhone по просьбе трудящихся хочу взяться за разработку аппаратного решения для шифрованной телефонии через обычные акустические каналы со стандартной полосой 300-3000Гц (наземные телефоны, УКВ и КВ, в т.ч. SSB радиоканалы и, возможно, GSM/CDMA). Идея заключается в портировании открытого софта в подходящий DSP: низкобитрейтный кодек, софтверный модем и криптографию. Аппаратно потребуются: DSP (микроконтроллер) с АЦП/ЦАП (ШИМ) стандартной разрядности, производительностью не ниже 50 MIPS и со значительным объемом ПЗУ для кодовой книги аудиокодека, монохромный графический дисплей, подключаемый по трехпроводному SPI-интерфейсу (например, от Nokia 3310) для отображения результатов аутентификации, микроSD для хранения адресной книги (публичных ключей контактов), смарт-карта стандарта ISO7816 (например, GoldWaffer на PIC16F84+24LC16, ранее популярная для клонов сим-карт и карт платного спутникового телевидения) для хранения приватного ключа и возведения в его степень по модулю, и, возможно, внешнее ОЗУ.
В качестве голосового кодека думаю использовать или свободный Codec2, или лицензированный MELPe (стандарт NATO STANAG-4591) на битрейте 1200bps с подавителем шума NPP7, специально адаптированным для условий боя. В качестве модема – FDMDV из проекта Codec2, обеспечивающий битрейт 1450bps, быструю синхронизацию и восстановления после ошибок, устойчивый к частотным и временным сдвигам.
Хочу более подробно озвучить свои соображения по поводу криптографии: не с целью получить експертную оценку и потом ссылаться на форум, но чтобы как минимум исключить явные ляпы и, возможно, услышать конкретные советы по улучшению. Я старался не использовать совсем уж Bleeding edge, хотя все же предпочел Modern. Естественно, данный проект является исключительно образовательным (например, как основа для дипломной работы), так как шифрование гражданской радиосвязи в большинстве стран запрещено.


Задача.
В групповом попарном радиочате выполнять отбор сообщений для себя и их потоковое дешифрование с быстрой синхронизацией после потерь неизвестного количества байт. Индивидуальная аутентификация контаков друг перед другом должна выполняться с помощью уже имеющихся PGP-ключей, обеспечивать PFS и полную отрицаемость в отношении этих ключей, содержимого энергонезависимой памяти (в случае захвата устройства), а также между сеансами связи.
На первом этапе хочу сделать софтварную реализацию под Linux для i386 без использования FPU, приведенное описание протокола сделано под нее.
Планирую использовать ECDH на Бернштейновкой кривой 25519, хеширование Keccak, потоковое шифрование и PRNG с использованием Keccak Duplexing Sponge, для сидирования PRNG использовать HAVEGE (а в аппаратной реализации – RNG на шуме перехода стабилитрона).


Общее описание протокола.
При первичном включении генерируется индивидуальная долговременная ECDH-ключевая пара Aa, приватный ключ a сохраняется на диске (предполагается, что программа будет запускаться с TrueCrypt-контейнера). Публичный ECDH-ключ A (256 бит) дополняется пользовательской информацией I (256 бит) и подписывается с помощью PGP. В качестве публичного ключа используется:
PubKeyA = A | I | PGPSig{A | I}
Для идентификации используется отпечаток ключа в виде его 128-битного хеша:
IDA=H(PubKeyA)
Включение подписи в хеш блокирует UKS, характерную, например, для ранних версий OTR.
При появлении на радиоканале абоненты периодически, используя промежутки радиообмена, публикуют свои ключи, сопровождая их флагом ключа и CRC32. Последняя необходима только для исключения непреднамеренных ошибок передачи и не используется в протоколе. При размере ключа в 150-200 байт публикация займет около секунды. При получении валидного ключа он автоматически добавляется в адресную книгу. Позже в ручном режиме можно просмотреть полученные ключи, удалить лишние, проверить PGP-подпись, используя PGP PKI и пометить ключи как доверенные.
Публикация ключа полностью отрицаемая, т.к. ключ может быть переопубликован кем угодно на любом канале. Наличие ключа в адресной книге также отрицаемо, т.к. ключи принимаются и сохраняются автоматически. Например, приняв ключ на канале террористов, и затем опубликовав его на канале гомосексуалистов, можно всегда утверждать, что приняли его именно там, а ЗАС пользуетесь, т.к. стесняетесь ориентации.


Установка связи.
Для установки связи между A и B необходимо, чтобы оба участника уже имели ключи друг друга. Процедура установки связи сводится к обмену всего двумя посылками: А (инициатор) посылает запрос, а B (вызываемый) отвечает подтверждением. После этого между данными абонентами устанавливается приватный сеанс, и они могут общаться друг с другом без дополнительных согласований в пределах этого сеанса (но без PFS). Для обеспечения PFS абоненты просто переустанавливают сеанс, снова обмениваясь запросом и подтверждением.


A выполняет запрос для B:
– генерирует две DH-пары: аутентификационную и ключевую (Xx и X'x' соответственно);
– подсчитывает префикс:
P AB = H( IDA | Bx),
где IDA-собственный отпечаток, B – публичный DH-ключ получателя. Префикс усекается до 32 бит из соображений снижения битрейта. Он является только идентификатором, и даже если будет совпадение (2-32), то соединение не будет установлено из-за несовпадения ключей. Префикс полностью отрицаемый, т.к. любой может сгенерировать его, используя публичные отпечаток и DH-ключ участников.
– фиксирует таймстемп T, ограничивающий время для подбора злоумышленником и предотвращающий Replay-атаку.
– транслирует запрос в виде: P AB, T, X, X'
– добавляет в список ожидающих соединение запись IDB, T, x, x'
– удаляет слишком старые безответные записи из списка по таймстемпу.


B получает запрос от A и отвечает:
B cлушает канал и, приняв посылку с флагом запроса, сверяет таймстемп, затем "примеряет" ее к каждому контакту из адресной книги:
– однократно подсчитывает Xb, где b – собственный приватный ключ.
– для каждого абонента их адресной книги
извлекает IDn и подсчитывает Pn=H(IDn | Xb)
– при совпадении с префиксом считает, что получил запрос именно для себя предположительно от абонета n, иначе запрос адресован кому-то другому.
– аналогично генерирует две DH-пары (Yy и Y'y') и подсчитывает ответный префикс:
P BA=H( IDB | Ay),
где IDB-собственный отпечаток, A – публичный DH-ключ предполагаемого отправителя.
– транслирует ответ в виде: P BA, Y, Y'
– подсчитывает мастер-ключ данного соединения:
K=X'y'
Мастер-ключ выводится с использованием исключительно DH и не содержит материала долговременных ключей и ключей аутентификации. Это необходимое условие полной отрицаемости, в отличие от "разумной" отрицаемости, которую обеспечивают протоколы с неявной аутентификацией (например, FHMQV).
– подсчитывает аутентификаторы:
M A=H( Xb | Ay | X | Y | X' | Y' )
M B=H( Xb | Ay | X | Y | Y' | X' )
Учитывая идеальность хеширования Keccak, фактически DH-параметры мастер-ключа (X' и Y') подписываются (с перестановкой местами) общим ключом аутентификации. Это в точности соответствует протоколу SKEME, но в нем ключ аутентификации выводится с использованием протокола Abadi (обмен случайными значениями, зашифрованными публичными ключами участников), а в данном случае – с использованием протокла KEA+ (по смыслу то же, но с использованием DH-публичных ключей). SKEME обеспечивает полную отрицаемость и является доказуемо стойкой (по Кравчику). KEA+ также удовлетворяет требованиям отрицаемости, т.к. не использует непосредственой комбинации ключей A и B вне хеширования.
– инициализируется 32-битный счетчик-вектор для шифрования: С=0
– добавляет запись в список открытых соединений: IDA, T, С, K, M A, M B


A получает подтверждение от B:
А слушает канал, и приняв посылку с флагом ответа, аналогично "примеряет" ее к каждому контакту из адресной книги:
– однократно подсчитывает Ya, где a – собственный приватный ключ.
– для каждого абонента их адресной клиги извлекает IDn и подсчитывает
Pn=H(IDn | Ya)
– при совпадении с префиксом считает, что получил ответ именно для себя предположительно от абонета n, иначе ответ адресован кому-то другому.
– находит соответствующую запись в списке ожидающих соединение контактов и сверяет таймстемп получения ответа с таймстемпом отправки запроса, игнорируя ответ при слишком длинном интервале.
– подсчитывает мастер-ключ данного соединения:
K=Y'x'
– подсчитывает аутентификаторы:
M A=H( Xb | Ay | X | Y | X' | Y' )
M B=H( Xb | Ay | X | Y | Y' | X' )
– инициализируется 32-битный счетчик-вектор для шифрования С=0
– добавляет запись в список открытых соединений: IDA, T, C, K, M A, M B
– удаляет запись из списка ожидающих соединение


На данном этапе ни А, ни B пока не могут быть уверены ни в идентичности друг друга, ни в отсутствии MitM, т.к. они еще не обменялись аутентификаторами. Тем не менее они имеют общий мастер-ключ и могут начинать общение. Это исключает прерывание протокола при неудачной аутентификации, что необходимо для полной отрицаемости. Уведомление об аутентичности контакта будет скрытно выдано абоненту при приеме первой же голосовой посылки (любая передача теперь будет начинаться с аутентификатора). Также контролируется интервал времени по таймстемпу от начала протокола до получения первого аутентификатора, в случае слишком длинного интервала достоверность аутентификации снижается (т.к. злоумышленник имел время для вычислений).
Аутентификаторы также усекаются до 26 байт (этого требует низкий битрейт канала). Я старался внимательно проанализировать возможность использования коротких аутентификаторов и прише к выводу, что это допустимо в данной приложении, хотя буду рад услышать другие обоснованные мнения на этот счет и идеи.
При приеме данных с флагом голосового сообщения получатель ищет подходящий аутентификатор в списке открытых соединений. Если он там отсутствует, получатель считает, что сообщение адресовано не ему. Если аутентификатор обнаружен, и он не соответствует последнему контакту, то выводится сообщение о новом контакте в виде контактной информации из публичного ключа контакта и степени доверия, установленной ранее вручную в результате проверки PGP-подписи.
Вместе с аутентификатором в начале каждой передачи, а также с полусекундным интервалом на протяжении передачи, транслируется счетчик С (его младшие 26 бит). При приеме счетчика С его значение восстанавливается до полных 32 бит (только вперед!) и последовательность T | C | K используется для инициализации Keccak Duplexing Sponge. При получении последующих данных выжимается гамма, использующаяся для расшифровки потока. Т.к. транспорт не обеспечивает коррекцию ошибок по соображениям снижения битрейта и минимизации задержки, то регулярная реинициализация с полусекундным интервалом позволяет восстанавливать корректность расшифровки при потерях данных в случае длительной непрерывной передачи.
Также из соображений снижения битрейта и устойчивости связи аутентификация принятых данных не производится. Шнаер допускает такой подход при передаче голоса, т.к. голос сам по себе является достаточным аутентификатором. Такой же подход используется и в PGPFone Циммерманна. Голосовой кодек MELPe является военным стандартом и его рефференс-код тщательно проверен на предмет выполнения произвольного кода при подаче на вход фатальных битовых последовательностей. Любая манипуляция входными битами без знания ключа шифрования может вызвать лишь искажение голоса вплоть до получения шума, но не нарушение криптографии в целом. Преимущество данного подхода очевидно: спонтанное искажение единичных битов приведет лишь к искажению голоса, но не к полному выпадению неаутентифицированных блоков.



 
На страницу: 1, 2, 3, 4, 5, 6, 7, 8 След.
Комментарии
— ZAS (09/02/2015 19:36)   <#>
Насколько реальна проблема с многократными перекодировками?

К сожалению, реальна,


В случае низкоскоростных кодеков, каждая перекодировка – потеря по крайней мере одного фрейма от длины символа.

Принцип модема – генерация и распознавание псевдо-речевых звуков, данные кодируются pitch и формантными частотами.


Такой подход должен быть очень устойчивым. Интересно, сколько бит удается уложить в кадр.

Есть еще мысль добавить пару бит на энергию, но подозреваю, что AGC может эту идею запороть на корню.


Можно кодировать последовательность символов так, чтобы средняя энергия за сколько-то символов была постоянной или изменялась в небольших пределах.

http://www.zas-comm.ru
— gegel (09/02/2015 20:55, исправлен 09/02/2015 21:22)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0
Принцип модема – генерация и распознавание псевдо-речевых звуков, данные кодируются pitch и формантными частотами.

Ровэ после знакомства с проблемой независимо предложил в точности такой же подход.


Интересно, сколько бит удается уложить в кадр.

И какая длина фрейма предполагается?


Ровэ на вскидку предлагает пробовать 9 бит на LPC (3 спектральных пика в 8 возможных позициях каждый) и 5 бит на pitch (в диаппазоне лагов 20-140 сэмплов), и длину фрейма 40-100mS. Обещает помочь с практической реализацией фремворка для модулятора/демодулятора с гибкими настройками параметров для экспериментов с разными типами транскодеров.

— ZAS (09/02/2015 22:29)   <#>
Ровэ на вскидку предлагает пробовать 9 бит на LPC (3 спектральных пика в 8 возможных позициях каждый) и 5 бит на pitch (в диаппазоне лагов 20-140 сэмплов), и длину фрейма 40-100mS.


Пессимистично.

По-хорошему, количество/положение спектральных пиков, и, возможно, длину символа сделать переменными в зависимости от pitch. Сигнал в вокодере устанавливается по-разному.

Пробовал DMT на периоде основного тона при длине символа 60...80ms через AMR-4.75. Порядка 800 bit/s, без транскодинга и с настройкой под кодек. Возможно cделать лучше; но становится тонко и сложно.
— gegel (27/08/2018 14:38)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0
Не прошло и 4-х лет, как дошли руки до практической реализации девайса: гарнитура для стойкой защиты речевого канала аналоговых УКВ радиостанций и мобильных телефонов на STM32F446RE (прототип на отладочной плате Nucleo64):

https://github.com/gegel/jackpair

Режимы работы: PTT (полудуплекс) или полный дуплекс.
Кодек: MELPE-1200+NPP7, переделанный на 800bps и адаптированный к Cortex M4.
Модемы: BPSK для VHF радио, PLS (аналог модема Кондоза) для GSM/AMR.
Криптография:
– симметричная – Shake-128 на базе Keccak800, синхронизация CTR в речевых паузах;
– ассиметричная – SPEKE на X25519 (аутентифицированная DH с нулевым разглашением общего секрета), использует Hash2Point на базе Elligator2.
– TRNG (сидирование) – сборщик энтропии от изменения младшего бита результата АЦП шума резистивного делителя напряжения питания, блочный частотный тест до достижения приемлемой статиcтики накопителя.

Все элементарные криптографические примитивы реализованы в виде неоптимизируемого кода на ассемблере для Cortex M4 архитектуры, с учетом минимизации утечек по побочным каналам
(постоянны по времени выполнения).
— unknsecured (04/10/2018 11:28)   профиль/связь   <#>
комментариев: 17   документов: 1   редакций: 2
gegel, ты где был?! Мы всерьез думали, что тебя либо посадили/убили, либо вербануло СБУ с запретом общаться на эти темы с посторонними! Расскажи, что было эти 4 года с учетом изменений в твоей стране проживания? :)
— gegel (08/10/2018 19:08)   профиль/связь   <#>
комментариев: 393   документов: 4   редакций: 0
Приветствую!
Не, ну не так все плохо :)
Просто сменил работу, не до форумов было.
А что касается изменений, то особых я не увидел – более или менее укладываются в глобальную тенденцию. Политикой я не балуюсь, в горячих точках никогда не был, как и Вы, вижу только по телевизору. К теме у меня только академический интерес.

Смотрю, Вас тоже давно не было слышно. И вообще, впечатление такое, что ресурс мертв.

Я больше читаю конфу modern crypto и уточняю необходимое в личной переписке.
Так, elligator2 (Hash2Point для X25519) с использованием инверсного квадратного корня – от Mike Hamburg
file(paper)
а элементарная математика кривой X25519 на ассемблере для Cortex M4 – получена от Bjorn Haase (public domain), тоже ранее не публиковалась.
file(paper)
Аутентификация с нулевым разглашением, позволяющая использовать короткий общий секрет, также обсуждалась на modern crypto, патент на протокол SPEKE истек в этом году.
Ну, и, собственно, кодек MELPE – адаптация под архитектуру M4 до режима реального времени тоже не было в открытом доступе. Так что, возможно, будет интересно. Хотя больше таким интересуются китайские друзья...
Если что, мой PGP имеется на серверах, да и у меня где-то был Ваш отпечаток (жаль, теперь все убрали с форума).
На страницу: 1, 2, 3, 4, 5, 6, 7, 8 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3