Nano Hash - криптовалюты, майнинг, программирование

Расшифровка RSACryptoServiceProvider с использованием только закрытого ключа

Мне нужно сгенерировать лицензионный ключ для приложения. Я думал об использовании RSACryptoServiceProvider, но заметил, что закрытый ключ, сгенерированный с помощью ToXmlString(true), также содержит открытый ключ. Проблема в том, что приложение будет храниться на серверах клиентов, и я не хочу, чтобы они могли генерировать свой собственный лицензионный ключ, используя часть открытого ключа из ключа, который я сгенерировал.

Например, если у меня есть этот закрытый ключ

<RSAKeyValue>
  <Modulus>mqZY4yfKdHJ6gl/5elFgSXnDLztsj6fpCmjNymYyeWa/4qVA66fydrAE5Rl2OVoNCRUTpCUM8paZxh2eqza5lETYRdfRw+4FNu2rO13synPTKirck0JucCDXytQBZZnD4SFCljJr3NDlYveuEk7NsdeIsHYypXvPtURhkDtDGG8=</Modulus>
  <Exponent>AQAB</Exponent>
  <P>zD53GW+HevT5SaWsvLwoT/qUO5MZXgbg7ME1OLwmzd99nRZuIayhLrkYZ9MWNnL2BWLGcRbj7GlOXUY2ouqsfQ==</P>
  <Q>wdamjYch6EQgXDe6lA/zb8lAWxO+Djjkrtda2cjwXrMoLbJUKVo3z/pmWCnNX9I3v5PtM8YoL4Pp6zXcVuloWw==</Q>
  <DP>L7goe3jjXob994cN5MrRYF5bY8/qjV1uD+LUXH0ZU+BzqNAkyxlaT2BPo3JeLjqN4JRDaQjAF+xCsuhEu6u4wQ==</DP>
  <DQ>umTai8WiCWNZatP8Cly8ToZL6Ei3vZ1f6fEUX9AltCq7PBX7cDhc6xVyTN0FrFrNWN+6fMrT4b0Lty53zutreQ==</DQ>
  <InverseQ>g+DldM+/FD/3vEop5o4T2xjL8SIYSFY3kjPIrIxFkzpVGb98jHYT+JNjdezw2n78AawqUhRBLCgDnC6K2YmINQ==</InverseQ>
  <D>Crtoh7sHLbWUEuAeLALhr7end+ujyQRaA8LqJRWagxpCTrQxISlyhhIJBO0Taz94kBzKVCXOFDenTDxZ+n+9uRS9zlg1nE3thEqrWf/fOMB+H+49HF/stSCyFp2+xqKFPBzwL2hrdixsEe5beWaM8r1nLChKzG3/BbVlY5/a2GE=</D>
</RSAKeyValue>

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

12.01.2015

  • Глупо использовать PKI для лицензий в приложении .Net. Его можно легко декомпилировать, и система лицензирования будет нарушена. Используйте ключ AES, встроенный в приложение. 26.05.2015

Ответы:


1

Вы можете расшифровать данные, только если у вас есть закрытый ключ. Поэтому я бы предпочел не передавать ключ на ваши клиентские устройства. В противном случае любой мог бы получить доступ к ПК и создать свою собственную лицензию. Было бы разумнее создать свою лицензию и подписать ее своим закрытым ключом. Затем ваше клиентское приложение будет проверять только действительную подпись - я думаю, что это лучшая практика из того, что я видел в нескольких реализациях службы лицензирования.

12.01.2015
  • Моя проблема в том, что мне также нужно закодировать некоторые данные внутри лицензионного ключа 12.01.2015
  • Зачем вам это кодировать? Я могу только представить детали лицензии, которые известны и вам, и вашему клиенту, поэтому подписание деталей должно быть «безопасным» от манипуляций, поскольку вы единственный, кто подписывает их своим закрытым ключом. Или что вы имеете в виду? 12.01.2015
  • Приложение разделено на модули, и мне нужно закодировать количество пользователей для каждого из модулей и дату до получения лицензии, если она действительна. 12.01.2015
  • Но зачем вам это кодировать? Я мог бы использовать мой открытый текст или xml или что-то еще, что может анализировать ваше приложение - вам нужно только проверить, имеет ли лицензионное содержимое действительную подпись. 12.01.2015
  • Приложение будет развернуто на серверах клиентов, база данных также будет там, поэтому мне нужен способ увидеть, не добавили ли они больше пользователей, чем они купили лицензии. 12.01.2015
  • это будет обеспечено подписью - если они изменят значения внутри вашего раздела контента, подпись не будет совпадать. Посмотрите здесь: stackoverflow .com/questions/8437288/ для примеров кода 12.01.2015
  • Я думаю, что понял, теперь я даю им исходное сообщение, и подписанное сообщение проверяет его, а затем я анализирую исходное сообщение. 12.01.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..