Вопрос

Это то, чему я всегда хотел научиться.Когда я проектирую систему (программную или аппаратную), в которой несколько компонентов взаимодействуют друг с другом, как я могу реализовать какое-нибудь простое шифрование или другие функции в протоколе для обеспечения некоторой базовой безопасности?

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

Редактировать: Меня интересует встроенное программирование, простое шифрование по проводам для обеспечения безопасности протокола.

Это было полезно?

Решение

Вы говорите "базовая безопасность" но это мало что значит. Какая у вас модель угрозы? От какой атаки вы защищаетесь? Если вы передаете данные кредитной карты, вам понадобится надежное шифрование, например, RSA. Но я не могу вспомнить пример, который нуждается в "меньшем количестве" защита. Если вы беспокоитесь о том, что хакеры могут разобрать ваш код, игра уже окончена - если это интересно или ценно, они взломают ее. Если нет, то вы потратили время на его реализацию.

Другие советы

На сегодняшний день самое простое решение - просто использовать сокет SSL вместо обычного, в стиле HTTPS / FTPS.

Нет никакой разницы в протоколе между HTTP и HTTPS, единственное отличие состоит в том, что они работают на разных портах (обычно 80 против 443), и один использует обычный сокет, а другой использует сокет с шифрованием SSL.

Не внедряйте базовое шифрование в том смысле, что разрабатываете его с нуля.ОЧЕНЬ сложно правильно реализовать шифрование.

Вместо этого сосредоточьтесь на использовании шифрования, доступного на вашей платформе...какова ваша платформа?

Редактировать:

Видишь это ТАК что публикуйте ниже приведен список альтернатив шифрования, некоторые из которых должны достаточно хорошо работать во встроенной среде (например КриптоПП и TomCrypt - Шифрование).

OAuth может быть интересным для вас, чтобы разрешить контроль доступа между различными API.

Если вы просто хотите зашифрованный канал данных, лучше просто наложить слой поверх вашего протокола; перейти на SSL или SSH.

Если вы занимаетесь встроенным программированием, то где проблема шифрования?

Например, если вы работаете на одном процессоре, шифрование бесполезно.

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

Если вы хотите быстро, то вам лучше всего использовать симметричный алгоритм, и есть много хороших способов, таких как Blowfish или IDEA. Вы можете хранить уникальный симметричный ключ, поэтому, если они могут разобрать устройство, будет обнаружен только один ключ, но у каждого устройства должен быть свой собственный ключ.

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

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

Есть много вещей, которые необходимо учитывать при проектировании защищенной системы.Просто упомяну некоторые из них:

  • Выбор схем симметричного/асимметричного шифрования
  • Алгоритм шифрования (AES, Blowfish, DES)
  • Выбор известных протоколов (например,SSL)
  • Управление ключами и их распределение
    • Один главный ключ (в случае взлома вся система будет скомпрометирована)
    • Ключ для каждого устройства (распределение ключей может быть более сложным)
    • Защита ключевых каналов распространения
  • Будет ли потенциальный хакер иметь легкий доступ к образцам устройств?Например.потребительский продукт, такой как X-box, против ящика, запертого на телефонной станции.Сложнее защититься от взлома, если у хакера есть физический доступ.
  • Человеческий фактор —социальная инженерия и т.д.
  • Система безопасна настолько, насколько безопасно ее самое слабое звено.

Я предлагаю вам прочитать Bruce Schneier's материал для начала.

OAuth, безусловно, является соображением. Кроме того, вы можете рассмотреть вопрос о WS-Security . Передавая данные через веб-службу, вы сохраняете независимость от платформы и языка, а добавление WS-Security означает, что шифрование и дешифрование находятся на прикладном уровне (сквозной). Таким образом, если вы уверены, что сообщения безопасны после того, как они покинут отправителя, вы знаете, что они будут оставаться в безопасности до тех пор, пока клиент фактически не получит сообщение (это означает, что оно не будет расшифровано сервером, а затем передано клиенту / получатель, но ПОСЛЕ того, как получающее приложение получает сообщение).

Таким образом, в основном вы должны использовать OAuth для защиты / аутентификации различных приложений и WS-Security для защиты сообщений, передаваемых между ними.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top