В очередной раз обдумываю тему защищенного соединения с сервером для сверхмаленьких устройств "умной пыли". Такое ощущение, что все не так сложно, как кажется, а программисты распустились и расслабились :) ОК, troll mode off
( Read more... )
если один из концов цепи полностью в руках злоумышленника, то всё бесполезно - злоумышленник может действовать от имени пыли.
если мы эту дыру какими-то внешними способами закрыли (типично, отзывом сертификатов тех, кто уже известно что скомпрометирован), то 1. в каждую пылинку свой закрытый ключ, его открытую половинку на сервер 2. на сервере свой закрытый ключ, его открытые половинки в пылинки 3. пылинка и сервер генерируют рандом+метку, шифруют своими закрытыми, обмениваются, расшфровывают, проверяют метку 4. после п3 оба два видят, что оппоненты владеют закрытыми частями ключей 5а. после п4 сервер пылинке может слать данные, зашфрованные открытым ключом пылинки, а пылинка серверу - на ключе сервера 5б. после п4 сервер посылает пылинке временный ключ, зашифрованный на открытом ключе пылинки. после этого идет обычное гаммирование на этом ключе - оно менее ресурсоёмко.
Теперь делаем п. 3 надо найти "ту самую шифровальную функцию на с/с++", в той же openssl или чем-нибудь потоньше, чтобы сделать попытку хендшейка из пылины к компу
По первому пункту давно сказано: не изобретайте свою криптографию.
В остальном все тоже придумано до нас, надо просто сделать протокол a-la SSL, пусть даже на ограниченном подмножестве шифров. Там nicka выше описывает примерно как оно работает. Но опять же, лучше не изобретать, а взять что-то где уже прошлись по граблям.
если комп большой - то да, лучше готовый пакет поставть.
а если это мелочь типа автосигналки, то иногда имеет смысл взять готовые криптоалгоритмы (или даже либы) для генерации ключевых пар, для двухключевых игрищ и для гаммирования, самому их в кучу объединить.
Если это автосигналка, то наверное. Но если я правильно расшифровал откуда эта тема возникла, то тут речь про ESP82xx, там уже есть TCP-стек и некое подобие операционной системы. TLS-стеков под эмбед гугл уже находит некоторое количество, думаю, можно и openssl заточить, оторвав все лишнее.
я когдато думал на похожую тему. пришел к выводу, что только линукс, только впн. как минимум, если маленьких в округе много, то нужет гейтвей хотя бы с опенврт. но я ленивый и не хочу ничего изобретать.
а вот я считаю, что линукс тут не то чтобы не нужен, а даже вреден - embedded-принципы позволяют делать неуниверсальные вещи типа заранее сохраненного сертификата, оптимированных под определенный тип шифрования функций, предвычисленных значений и прочего - мы ж не собираемся "пылью" ходить, скажем, в онлайн-банкинг?
Ну, впн решает не только проблему приватности, но и проблему нат. пыль же может использовать любой возможной тип соединения с интернетом. мобильный, прямое соединение, через роутер. для впн клиента не важно, всегда можно связаться с устройством(для меня это важно). Но я повторюсь, это я от лени и нехватки времени всё стараюсь упростить. К тому же линукс уже пихают во всё что можно и нельзя, железки стоят копейки. Нужен интернет датчик ? вот тебе мр3020 за 2 копейки. несколько ИО и сразу корпус или 100500 аналогов которе даже дешевле стояит и и имеют аналогичное железо. там тебе сразу и вайфай, и лан, и усб, и пара уарт
Comments 23
Reply
Reply
Reply
Reply
если мы эту дыру какими-то внешними способами закрыли (типично, отзывом сертификатов тех, кто уже известно что скомпрометирован), то
1. в каждую пылинку свой закрытый ключ, его открытую половинку на сервер
2. на сервере свой закрытый ключ, его открытые половинки в пылинки
3. пылинка и сервер генерируют рандом+метку, шифруют своими закрытыми, обмениваются, расшфровывают, проверяют метку
4. после п3 оба два видят, что оппоненты владеют закрытыми частями ключей
5а. после п4 сервер пылинке может слать данные, зашфрованные открытым ключом пылинки, а пылинка серверу - на ключе сервера
5б. после п4 сервер посылает пылинке временный ключ, зашифрованный на открытом ключе пылинки. после этого идет обычное гаммирование на этом ключе - оно менее ресурсоёмко.
Reply
Reply
Reply
поставить где-нибудь openssl и сделать ключи и сертификаты вроде должно быть так:
openssl genrsa -out server.key 2048
openssl req -new -key server.key -batch -days 3650 -x509 -out server.crt
Теперь делаем п. 3
надо найти "ту самую шифровальную функцию на с/с++", в той же openssl или чем-нибудь потоньше, чтобы сделать попытку хендшейка из пылины к компу
Reply
В остальном все тоже придумано до нас, надо просто сделать протокол a-la SSL, пусть даже на ограниченном подмножестве шифров. Там nicka выше описывает примерно как оно работает. Но опять же, лучше не изобретать, а взять что-то где уже прошлись по граблям.
Reply
а если это мелочь типа автосигналки, то иногда имеет смысл взять готовые криптоалгоритмы (или даже либы) для генерации ключевых пар, для двухключевых игрищ и для гаммирования, самому их в кучу объединить.
Reply
Reply
Reply
Reply
Reply
Reply
Leave a comment