| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > шифрование, конфиг, спрятать ключ |
| Автор: namespace 21.3.2009, 00:19 | ||
| Класс с настройками сериализуется, затем шифруется симметричным ключом и записывается в файл config.bin, сам ключ сериализуется и записывается в файл config.key Configuration.dll :
config.bin используется несколькими экзешниками, а вариант когда ключ шифрования config.key валяется на диске меня не устраивает, вот я и думаю а нельзя ли его не сериализовывать в config.key как сейчас, а сделать так чтобы он находился внутри этой сборки Configuration.dll? |
| Автор: jonie 22.3.2009, 23:24 |
| это не защита получится. Ассиметричное шифрование не пойдет? для защиты строк соединения у мелкофоста есть спец хрень для config файлов, она зашифрует RSA сама, прозрачно для приложения ... |
| Автор: SKrivosein 23.3.2009, 00:48 | ||||
| Ключ внутри сборки легко найти ildasm или .NET Reflector, если это не помеха... Но есть такой класс ProtectedData , им можно зашифровать ключ, ключом машины или ключом пользователя с помощью Data Protection API. То есть машина своим ключом шифрует твой ключ, и вроде как расшифровать может только администратор компа и то надо знать как
Но есть одно но, ключ машины связан с машиной, поэтому при шифровании базы данных, копию нешифрованего ключа надо иметь где то в резерве, допустим на флешке(на случай аварии), ну и написат чего то для реанимации этим ключом Я, для симметрического шифра, вот таким классом пользуюсь, по оправив для своих нужд.
|
| Автор: namespace 23.3.2009, 17:39 |
| да вот дело в том что предполагается что прога будет лежать в сетевой шаре, сети организации. Data Protection - тут кто зашифровал тот и расшифрует, в RSA есть возможность сделать так чтобы расшифровать могли несколько компов, но тогда на компах надо будет импортировать ключ в хранилище. вот и думаю шифрование то, в принципе, нужно то только для того чтоб сотрудники пароль от сервака не знали, с одной стороны при текущем варианте, надо дешифровать и десереализовать, IL код полюбому смотреть придется. может так и оставить... P.S. кстати, по поводу ассиметричных алгоритмов, хочу сделать защиту на программу, так вот бывает такое что публичным ключом можно только расшифровать, а зашифровать скрытым, т.е. грубо говоря лицензионный файл (с датой окончания, названием организации), в программе зашит ключ для расшифровки, и соответственно только я могу генерировать лицензионные файлы, смотрел примеры мсдн так там публичный ключ используется для зашифровки, а скрытый для расшифровки? |
| Автор: altarvic 24.3.2009, 10:36 | ||
Вообще в теории криптографии можно кодировать как приватным, так и публичным и расшифровывать соответственно противоположным ключом. Но в .NET, по моему опыту (ткните если ошибаюсь) можно кодировать только публичным (причем нужно это делать НЕ СВОИМ ключом, а того пользователя, кому посылается сообщение. Он его расшифровывает своим приватным ключом ). И это логично. Зачем шифровать приватным ключом, если расшифровать данные может любой используя публичный ключ? Ценность твоя лицензия не представляет никакой - имя, компания ... - это все не секретные данные. Имеет ценность то, что эту лицензию сгенерировал именно ты и никто другой. Для этого применяется цифровая подпись - это когда хеш от твоих данных подписывается твоим приватным ключом. Затем прога проверяет подпись: берет хеш данных и сверяет его с подписанным хешем (используя публичный ключ) Надеюсь понятно ;) |
| Автор: Idsa 24.3.2009, 10:55 | ||
Думаю, можно просто поменять местами private и public ключи. На примере RSAParameters: задаем в D public-ключ (а не private) , а в Exponent - private (а не public). |
| Автор: altarvic 24.3.2009, 11:17 |
| и что это нам дает? Смысл то не меняется. не важно как называются ключи. Если мы кодируем используя приватный ключ (т.е. не доступный другим), то расшифровать можно публичным (доступный всем) - следовательно зачем шифровать, если расшифровать может любой? при обмене секретными данными между Алисой и Бобом используют ДВА публичных ключа: Алиса шифрует данные публичным ключом Боба. Боб шифрует данные публичным ключом Алисы. Все тип топ - данные в секрете. В этом и есть смысл ассимитричного шифрования: когда для шифровки используют публичные ключи. |
| Автор: Idsa 24.3.2009, 12:24 | ||||
| altarvic, Вы сами себе противоречите. Раз:
Два:
|
| Автор: altarvic 24.3.2009, 14:32 |
| не вижу противоречия. Если вы имеете в виду цифровую подпись, то она не обеспечивает никакой секретности - она гарантирует что: 1) данные не были изменены 2) данные были созданы именно Вами Вот и все. |
| Автор: Idsa 24.3.2009, 15:04 | ||||
altarvic, я с этими очевидными фактами и не спорил. Несколько постов назад Вы заявили, что
. На это я ответил:
, тем самым указав, что private и public ключи взаимозаменяемы, а, следовательно, указанной Вами проблемы в .NET нет. |
| Автор: namespace 24.3.2009, 16:57 |
| altarvic: да тут ценность шифрования не в том что другие не расшифруют, как раз и расшифруют, а вот создать такой же файл но с другими данными не смогут. P.S. т.е. если кто-то пожелает создать свой лицензионный файл, то ему придется сгенерировать новую пару открытый-закрытый ключ и заменить закрытый ключ в экзешнике программы (пропатчить), ну или просто пропатчить |