Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 1 год назад.
Задача такая: нужно сделать генератор лицензий, в который мы заносим некую информацию с разрешениями для нашего ПО, которая зашифровывается в ключ. Далее ключ передается на удаленную железку, на которой вертится наш софт, софт этот ключик распознает и становится работоспособным. Читал про асимметричное шифрование с открытым ключом, но примеров реализации на java нашел очень мало, в основном все они были завязанные на алгоритме RSA. Коллега подсказал что алгоритм RSA для этого дела не подойдет, т.к. имея закрытый ключ можно и шифровать и дешифровать сообщение.
Кажется вы не очень понимаете принципы и задачи ассиметричного шифрования.
Вы генерируете на сервере 2 ключа: открытый и закрытый. Открытый ключ, что ясно из названия, распространяется свободно. Любой желающий его получает и использует, чтобы зашифровать свои данные перед отправкой на ваш сервер. То есть зашифровать данные для вашего сервера может кто угодно. Но расшифровать эти данные можно только имея закрытый(приватный) ключ, который хранится на вашем сервере как можно дальше от от загребущих рук интернетов. Таким образом любой желающий может слать данные на ваш сервер, не боясь что их расшифруют по дороге.
Использовать ассиметричное шифрование в системе лицензий можно как элемент, но им одним не обойдешься. В том формате, о котором вы говорите, вам нужно научится отличать программно одно устройство от другого, это целое дело, понадобится с этим помощь - гуглите и пишите отдельные вопросы.
Процесс получается такой: 1) софт ставится на компьютерЮ, пользователь вводит свой ключ/логин с паролем 2) на сервер отправляется так называемый цифровой отпечаток устройства и регистрационные данные. Эти данные должны быть защищены 3) сервер проверят для этого ключа/юзера число установок, и если можно активировать новое устройство дает добро клиенту. Эти данные уже могут быть не защищены, т.к. полученный ответ должен быть актуален только для конкретного устройства 4) юзер должен иметь возможность "отцепить" лицензию от конкретного устройства - либо через личный кабинет, сказав "вот на этом ккомпе лицензию деактивируй", либо на самом устройстве сделать возможность открепить лицензию
Допустим, вы хотите использовать сокеты. Вы делаете ключи для сервера, отдаете их клиенту и клиент может отослать серверу в шаге 2 данные, защищенные RSA. Обратно данные идут в чистом виде, т.к. актуальны только для конкретного устройства. Выглядит неплохо. Но! Как клиент получает открытый ключ сервера? Если он загружает его с сервера перед началом общения, то кто-то омжет сделать свою версию сервера и ваша программа будет общаться с подставным сервером, буду уверенной что общается с реальным. Если вшить ключ в программу, то а) злоумышленник может найти его в в исполняемом файле и поправить на свой, что возвращает нас к варианту с подставным сервером, и б) если вы потеряете свой приватный ключ или он утекет в общий доступ, то его придется сменить -> создать новый публичный ключ -> доставить новый ключ на всех клиентов, а сделать это неясно как...
Решение - ssl. Он позволяет заверять сертефикаты безопасности третьими серверами, что сильно усложняет подмену. Я бы рекомендовал сделать так: сервер делаете поверх http, простого api вам должно быть достаточно. На севрере настраиваете использование ssl. В теле запросов к серверу шлете всю нужную ему информацию. ssl обеспечит актуальность ключей и безопасность передаваемых данных.
Остается лишь вопрос как создать отпечаток устройства и как должно выглядеть подтверждение активации. И этот вопрос надо решать самостоятельно, чем меньше идей из вами реализованных есть в интернете - тем лучше
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Написал веб приложение на spring bootЧерез Intelij Idea (встроеный в spring boot tomcat) все запускается и работает
У меня такая проблема, сделал свой первый сайт ves-shinyru, и как недавно выяснил сделал не так как хотел
Подскажите, как можно реализовать скачивание в браузере средствами js, файлов по ссылке, например https://s3eu-west-1
Вопрос: при выборе года и месяца календарь заполняется данными о выходе сотрудника на работу по плану и факту за определенный месяц