id: Гость   вход   регистрация
текущее время 18:41 22/10/2018
Автор темы: gegel, тема открыта 24/06/2014 23:21 Печать
Категории: криптография, инфобезопасность, протоколы, защита телефонной связи
http://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)   профиль/связь   <#>
комментариев: 391   документов: 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)   профиль/связь   <#>
комментариев: 391   документов: 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)   профиль/связь   <#>
комментариев: 391   документов: 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 имеется на серверах, да и у меня где-то был Ваш отпечаток (жаль, теперь все убрали с форума).
— Аусвайс (11/10/2018 14:03)   профиль/связь   <#>
комментариев: 6   документов: 0   редакций: 0
Правильно – в очередной раз всё тупо удаляй:) Правда – она такая.
— Аусвайс (11/10/2018 14:08)   профиль/связь   <#>
комментариев: 6   документов: 0   редакций: 0
Скриньте кусок угара мая 2015. Пока SATtva опять не удалил всё, как сейчас в прошлые разы. Твой внутренний spinore всё никак не успокоится и маниакально рвётся удалять сообщения – забань меня, чего уж:)

Всем ad hominem, пацаны!

Да, нехило пуганули одного чела здесь. Но именно к подобным последствиям и приходят рано или поздно все тролли-кверулянты. Но я бы хотел о другом вот что сказать, товарищи. В это непростое, прямо скажем, сложное время, надо оставатся людьми, объединятся в профсоюзы, отстаивать свои права, так сказать, боротся с капитализмом и узурпатороми на всех уровнях, товарищи! Да. О борьбе с узурпаторами. Передайте микрофон вон тому товарищу, ага.

Вон тот товарищ:
— Определенная доля околопанических настроений одного из модеров-узурпаторов вполне объяснима: ставя во главу угла уберанонимность, завязанную на доказуемые концепты и заточенную под стремление к 100%, в реальности имеется огромная дыра, которая перечеркивает всё и вся одним росчерком. Речь, естественно, о том, что все знают кто есть кто, помнят во многом не хуже самого подсудимого модератора что, где, когда и с кем было, при каких обстоятельствах и т. д.
Единственное, от чего хотелось бы предостеречь — это от подлянок человеку. Я думаю, все поняли, что не стоит опускать опускаться до стукачей, их никто и нигде не жалует. Вот. А зафигачить обзорчик, темку, сайтик с деанонимизирующими данными описанием сабжа в карикатурном виде — это можно, а теперь даже нужно, товарищи, если человек не панимат па-другом. Но деликатно, тактично, легко и изящно, это поспособствует росту производства попкорна, след. кукуруза -> Хрущев -> подъем с/х и профит, профит и еще раз профит, товарищи. У меня все, спасибо. Заберите микрофон.
Мир, Труд, Май!

Дню Победы над спинором посвящается!

С чего начинается Hominem,
С коммента в браузере,
С баек о связях с детишками,
Дающими Живущими в нашем дворе.

А можит быть он начинается,
С той темы, что форсил спинор?
С того, что теперь доигрался он,
Став мемом и выпав в игнор...

С чего начинается Hominem...

© Так бывает: выставляя других дураками, в конечном итоге оказываешься дураком самсам в дураках.


[рок с элементами кора, рваный ритм как попа мода]

У меня есть CV, и степень, и дар,
Я очень крутой спе-ци-а-лист,
Но только на форумах спускаю я пар
Ведь я математик и тролль-онанист перфек-ционист!

короткий проигрыш

Люблю я задеть и обосрать,
Возвысившись над быдлотолпой,
Никто б***ь не хочет меня понимать,
Потому что я слегка не такой!?

короткий проигрыш

И что же мне делать, скажите, друзья,
Куда мне пристроить свой маленький спин?
Ничего не могу поделать здесь я,
Бултыхаюсь в грязи — не поросёнок, но свин!

Уже как кабан, хряк, кнур и кирноз,
Валяюсь в болоте коментов своих,
Истачаю и дальше словесный понос,
Не видя, не слыша ни себя, ни других!

короткий проигрыш + соло

К буковке буковка, к строчке строка,
Уверенно мышку держит рука,
Счас всем докажу, во мне мыслей река,
Стоять всем и слушать меня-дурака!

Сначала был спин, а после был квант,
Слушайте, что изрек отец-кверулянт,
Послушали? Ответили? Что-о!?! Пустячок!?
Считайте, что бросили дрожжи в толчок!

соло

Бурление говен, ad hominem, срач,
Все это генерит наш клоун-циркач,
Весь форум в свою простыню завернул,
Загнал всех туда, а потом перданул!

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

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

Вторая часть.

Выходят девственный юноша 38 лет и непорочная девочка 81 кг с веточками сирени в руке. Издалека доносится шестая симфония Вагнера.
Девочка играет на флейте, юноша смотрит в бинокль и онанирует.
Спустя минтуту выходит карлик и начинается адчайшая содомия!

Юноша с девочкой начинают петь!

Угрюмый и жадный, толстый кабан,
Скорей выходи к нам, грязный чурбан!
Мы тебя не боимся, сраный кирноз,
И не страшен нам вовсе твой словесный понос!

Достал мальчик пэнис, а девочка грудь,
Хотели кирноза слегка пугануть,
Не знали бедняги, что он педофил,
Он рассвирепел и им засадил!

Но дети подкованы, они непросты,
И их не пугают педо-понты,
Их ведь напутствовал правильный Гость,
Он в них зарядил силу, гнев и злость!

Собрав свою волю и ярость в кулак,
Прокричал мальчик с девочкой:
Сдохни! Мерзкий! Хряяяяк!
И что было сил ударили в пах,

Пах впрах разлетелся и мерзко запах!
Второй удар, третий — хряку кранты,
Ура, победили!
Во имя света и доброты!

Теперь везде царят любовь и добро,
А мир чист и светел, светел и чист,
Анигилирован тролль перфек-ционист!

Теперь на сковородке он потеет в аду,
Теперь вместе с ним готовят черти еду,
Теперь он в царстве покоя и тьмы,
Теперь избавлись от него мы!

[/рок с элементами кора, рваный ритм как попа мода]
— cypherpunks (11/10/2018 15:16)   профиль/связь   <#>
комментариев: 296   документов: 33   редакций: 12
Необходимость модерации обоснована полностью.
— Аусвайс (11/10/2018 16:38)   профиль/связь   <#>
комментариев: 6   документов: 0   редакций: 0
Модерации spinore? Который не просто удалял сообщения, но и редактировал их, с целью обелить себя и не дать другим прочитать, что и зачем удалял. Но мы-то знаем-с.. :)
Про модерацию в целом – речи не идёт, с ней SATtva c unknown справлялись весьма неплохо и проблем не было.
— cypherpunks (11/10/2018 19:36)   профиль/связь   <#>
комментариев: 296   документов: 33   редакций: 12
спиноре плохой но он умный и талантливый человек и давно живет в европе с нормальными людьми а ты долбоеб и неудачник им обиженный и твой удел теперь только беситься в игнор тебя
— Аусвайс (11/10/2018 21:54)   профиль/связь   <#>
комментариев: 6   документов: 0   редакций: 0
Давайте сыграем в игру. Кто есть кто под новыми никами.
spinore, выходи!:)
Хотя ты уже и так вышел;)
На страницу: 1, 2, 3, 4, 5, 6, 7, 8 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3