Easyelectronics.ru

Электроника для всех
Текущее время: 29 сен 2020, 03:56

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
 Заголовок сообщения: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 12:54 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 507
Прошу помощи опытных в криптографии товарищей в следующей ситуации.

У нас в производстве уже скопилось приличное количество приборов разного назначения, подключаемых к хосту с помощью Ethernet. В основно все было некритично, некоторые приборы вместе с хостом вообще подключались азернетом только из соображений удобства и никогда не "светились" в каких-либо других сетях. Поэтому используемый нами самодельный протокол был довольно прост и отсылал данные по udp в удобном для наших устройств формате. Но сейчас уже возник вопрос того, что сеть из приборов может подключаться к хосту, который сам тоже может подключаться в какую-нибудь другую сеть, соответстаенно стоит вопрос безопасности протокола. В протоколе на прикладном уровне есть несколько режимов передачи - специально было заложено про запас, чтобы в будущем можно было насширить функционал. Режим по умолчанию читает и пишет пачками данные в словарь вроде CANOpen OD. Теперь есть интерес сделать режим передачи заранее оговоренной телеметрии в одну сторону и команд в другую, и собственно хотелось бы их хотя бы наприкладном уровне зашифровать, чтобы по сети UDP-пакет гулял с шифрованным содержимым. Естественно, вариант отправкой пароля/ключа шифрования по сети отметается - нужен какой-нибудь способ заложить ключи шифрования внутрь устройств и хоста, чтобы их нельзя было вычислить. Пока что самый тупой вариант, который приходит в голову - это заложить внутрь устройств прошиваемый при производстве ключ шифрования, а при поставке ПО также передавать, скажем, ключи на физ. носителе - банально на флешке (можем себе такое позволить, т.к. каждому заказчику отдельно поставляем). Но лично мне кажется такой вариант не лишенным недостатков - а если произойдет ситуация, что придется заказчику поменять по гарантии или добавить еще один прибор - значит, надо опять флешку с ключами тащить ему, да и все-равно риск того, что пароль подберут, остается - в основном, в устройстве, подключаемом по азернету, стоит arm-cortex m4 или что-либо аналогичной производительности, так что не все стойкие алгоритмы криптографии будут под силу. В общем, я тут дуб-дерево, поэтому извиняюсь, если размышления выглядят глупо, прошу подсказать, в общем, каким образом обмениваться ключами шифрования между устройством и хостом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:32 
Старожил

Зарегистрирован: 28 янв 2015, 16:31
Сообщения: 248
Никак не надо этого делать. Проще взять готовые копеечные роутеры и сделать vpn тоннель https://yandex.ru/search/?text=vpn%20%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D1%8C%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%80%D0%BE%D1%83%D1%82%D0%B5%D1%80%D0%B0%D0%BC%D0%B8&clid=2186620&lr=46&redircnt=1581668895.1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:45 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4729
Откуда: КЧР, поселок Нижний Архыз
Можно не рутеры использовать, а OrangePI zero или им подобные одноплатники по цене 600..800 рублей за штучку. Получаем практически полноценный компьютер с линуксом и решаем проблемы безопасности: авторизацию в вебе делаем по https, а локальные передачи данных оборачиваем в туннель ssh! Те же простейшие приложения, которые раньше просто открывали сокет всем подряд, будут теперь открывать сугубо локальный сокет, доступ к которому будет иметь лишь туннель ssh. И ничего нового выдумывать не придется, как и переделывать глобально софт.
Вот на МК такое не вкорячить, увы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:50 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
Ну отвечая прямо на ваш вопрос из темы - протокол Diffie-Hellman. Простая и гениальная штука для обмена секретным ключом по открытой сети. До сих пор вся большая криптография использует этот протокол.
Но вам правильно подсказывают - мало смысла шифровать на прикладном уровне в своем протоколе. Ну или как минимум брать готовое решение - TLS. Где и DH, и авторизация с аутентификацией есть, и симметричное шифрование. Всё сразу, для того и сделано было. Лепить "свою криптографию" - почти гарантированно допустить там ошибку.
Другой вариант, как уже советуют - туннелировать ваши ус-ва внутри уже зашифрованного канала. VPN, IPSec и т.д. И это более правильный вариант. Такие вещи настраиваются на уровне сети, раз есть сеть. Плюс я бы еще порекомендовал почитать про VLAN'ы. Это способ изолировать логически одну сеть от другой, оставив существующие физические подключения. Коммутаторы правда должны его поддерживать, чтобы был в этом смысл.
Если подробнее про структуру сети расскажете, а лучше еще и нарисуете, смогу подробнее подсказать более удобное решение. Потому что фраза "сеть из приборов может подключаться к хосту, который сам тоже может подключаться в какую-нибудь другую сеть" мне не совсем понятна. Что такое "хост" тут у вас? Если хост имеет несколько физических сетевых интерфейсов, с разными подсетями за ними, чтобы пакеты из одной сети в другую ходить начали, он еще должен уметь их машрутизировать, т.е. выполнять функционал маршрутизатора. Может его надо просто отключить? Слишком много вопросов )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:52 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
На "серьезном" МК (а там где поддержка сети есть в самом МК, "серьезности" и для TLS должно хватить) можно вкорячить embedded TLS: axTLS, BearSSL, CycloneSSL, PolarSSL, wolfSSL и т.д.


Последний раз редактировалось NStorm 14 фев 2020, 13:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:52 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3569
Откуда: Китай, Пекин
во-первых, да как тут выше предлодижили тунеляку и вперёд.

но самое оптимальное - в железку вставляете любой понравившийся легковесный алгоритм шифрования по ключу..

ключ по желанию меняется в любой момент.
в железке по UART.
на удалёной точке тем же браузером через HTTPS

хоть вручную, хоть автоматом(скрипт 5 сек написать)

глупо всякий SSL в микроконтроллер пихать.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:57 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 507
Nstorm, понятно, спасибо за развернутый ответ. Чуть позже в личку напишу по вопросу - нарисовать сеть и не нарисую, может, но постараюсь подробнее пояснить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 13:58 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
Цитата:
глупо всякий SSL в микроконтроллер пихать.

Цитата:
на удалёной точке тем же браузером через HTTPS

Глупо глупости говорить и костыли придумывать, не разбираясь в криптографии. HTTPS что, не SSL? Только правильно - TLS, устарел SSL давным давно уже.
И подобный подход со статическим ключем уязвим ко множеству видов атак. Да и просто это какой-то убогий костыль. С DH элементарно каждый раз создавать новый сессионный произвольный ключ. И DH такие копеечные накладные расходы несет для ресурсов, что смешно его не использовать. В STMовкой либе для куба даже ECDH есть.
TLS придумали не глупые люди, сессионные ключи в криптографии придумали тоже не зря. Не надо себя считать умнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 14:54 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3569
Откуда: Китай, Пекин
Цитата:
сессионные ключи в криптографии придумали тоже не зря

оспидя, можно подумать тут ядерным реактором управляют...

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

Цитата:
со статическим ключем уязвим

а перечитать моё сообщение,
а подумать и ещё перечитать... где там предлогался статический ключ?

просто механизм согласования ключей выносится наружу. вот и всё. хочешь каждую минуту ключ меняй.

опять таки всё зависит от жырноты микроконтроллера... позволяют рессурсы? пихай полный стэк...

хочется конкурентов на болту покрутить... ищи более эффективные пути.

_________________
unirail.org


Последний раз редактировалось cheblin 14 фев 2020, 15:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 15:02 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 507
Не ядерный реактор, нет. Но и не игрушки какие-нибудь.
Были бы игрушки - я бы вообще такой вопрос не поднимал.

В общем, тему можно считать закрытой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 15:13 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
cheblin писал(а):
а перечитать моё сообщение,
а подумать и ещё перечитать... где там предлогался статический ключ?

просто механизм согласования ключей выносится наружу. вот и всё. хочешь каждую минуту ключ меняй.

Я ж говорю - не разбираешься в криптографии - не надо лезть. Твой костыль называется статическим ключом, как ни крути от ручной замены хоть каждую секунду, он не станет сессионным. А ручная замена вносит прекрасную лепту человеческого фактора и социальной инженерии.
И еще раз глупость про удаленную замену по HTTPS - если есть HTTPS, значит есть TLS. Почему бы его не использовать тогда?! Этот как выгружать на зашифрованный диск, в защищенном датацентре, фоточку бумажки с паролем.

Цитата:
опять таки всё зависит от жырноты микроконтроллера... позволяют рессурсы? пихай полный стэк...

Снова чушь про "полный стек". Ты хоть в курсе, что у TLS много разных режимов работы?

Цитата:
хочется конкурентов на болту покрутить... ищи более эффективные пути.

Какой ты мне конкурент? Я в Китай не лезу, за деньги тут ничего не предлагал. Это вы там в Китае только о бабках в каждом месте думаете. Чушь просто противно видеть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 14 фев 2020, 15:40 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
По теме, еще как вариант вспомнил про SRP и соб-но нагуглил, что его поддержка уже какое-то время есть из коробки в wolfSSL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 00:34 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1643
Откуда: Курск
SSH с парой ключей, ED25519
Недавно уже давал ссылку, посмотрите:
https://youtu.be/UYadbGMS9sg


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 01:04 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2079
NStorm писал(а):
По теме, еще как вариант вспомнил про SRP и соб-но нагуглил, что его поддержка уже какое-то время есть из коробки в wolfSSL.

В mbedtls есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 13:55 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
В mbedTLS не "из коробки" вроде, дополнение на гитхабе валяется: https://github.com/dwimberger/mbedtls-csrp


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 14:40 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 507
Так, я правильно понимаю, что это все протокол сессионного уровня, он должен стоять над UDP, а мои собственные изобретения уже над ним?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 16:03 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3569
Откуда: Китай, Пекин
TSL,SSH, SSL...забудь про UDP. тчк. иначе только тунеляка.
я уже говорил про. ищи более эффективные пути? самое время.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 16:14 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2879
sdv_cyborg писал(а):
Так, я правильно понимаю, что это все протокол сессионного уровня, он должен стоять над UDP, а мои собственные изобретения уже над ним?

TLS - он уровня представления. Но сути это не меняет, да, данные "внутри" него, уровнем выше. Поэтому он не совсем в модель OSI вкладывается, т.к. внутри него можно не только прикладной уровень запихнуть. По-сути его используют как протокол транспортного уровня. После установки handshake, он позволяет передавать полезную нагрузку в любом виде. Всю инкапсуляцию и прочее должна обеспечивать либа самого TLS. Интерфейс у всех известных либ прозрачный в этом плане.
SRP - это отдельный протокол прикладного уровня для авторизации и обменом ключами. После авторизации дальше уже работать самостоятельно можно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно обмениваться ключамиишифрования по сети
СообщениеДобавлено: 16 фев 2020, 18:50 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 507
Понял, спасибо за разъяснения.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB