Шифрование XML-файлов XML в .NET приложении
От: DangerRSDN Россия http://danger-world.livejournal.com/
Дата: 14.02.11 14:51
Оценка:
После многих часов гугления и поиска на тематических сайтах, включая любимый RSDN, не было найдено ни одного внятного рецепта. Братья-коллеги по цеху! Помогите — я уже погибаю по тоннами ненужной информации!
Я недавно закончил разработку приложения Windows Forms с использованием набора практик Microsoft Smart Client Software Factory. Настал самый ответственный момент — Deployment. Приложение не защищено лизензией или паролем, в нем нет защиты от копирования. Данное приложение можно свободно копировать и передавать третьим лицам. В общем все что угодно. Но! Приложение нельзя изменять и переконфигурировать — это имею право делать только я, автор приложения. В составе приложение есть два файла, которые нужно зашифровать, чтобы предотвратить его несанкционированную модификацию — File1.xml и File2.xml.
Чего хотелось бы добиться: я с помощью приватного ключа известного только мне, шифрую эти файлы и в зашифрованном виде включаю их в дистрибутив. Вместе с зашифрованными файлами я включаю в дистрибутив некий публичный ключ, который подходит только для расшифровки. Т.е. имея этот ключ программа, установленнная на компьютере пользователя сможет только прочитать данные из дешифрованного конфигурационного файла. Т.е. сами данные секретом не являются — пользователь может взять публичный ключ и с помощью какой-либо утилиты дефивровать файлы. Я и не буду стараться его особо спрятать, могу вообще положить рядом с зашифрованными файлами с именем "KeyForDecryptConfigs.xml" Проблемы у него должны появиться тогда, когда он попытается изменить дешифрованные файлы и снова запаковать их, чтобы подсунуть моей программе. Ведь у него не будет моего приватного ключа! Следовательно ничего зашифровать он не сможет — следовательно программа не сможет расшифровать корректно те данные которые ей будут пытаться подсунуть и завершит выполнение с соответствующим сообщением об ошибке...
Реализовать подобное поведение я решил с помощью классической схемы, предложенной в MSDN — сами данные шифруются симметричным алгоритмом RijndaelManaged а его ключ шифруется с помощью RSACryptoServiceProvider. Но вот чего я никак не могу понять — как в этой схеме зашифровать данные приватным ключом и дать пользователю (читай — программе) публичный ключ и зашифрованные данные, чтобы она их расшифровывала этим публичным ключом?
Re: Шифрование XML-файлов XML в .NET приложении
От: MozgC США http://nightcoder.livejournal.com
Дата: 14.02.11 14:57
Оценка:
XML-файлы шифруете с помощью RSA приватным ключом, который хранится только у вас. В приложении же хранится публичный ключ, с помощью которого расшифровываете файлы, после чего загружаете конфигурацию.
Re: Шифрование XML-файлов XML в .NET приложении
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 14.02.11 15:26
Оценка: +1
Здравствуйте, DangerRSDN, Вы писали:

DRS><skipped>


Если вам нужно только проверить целостность файлов, а их содержимое не является тайной, то используйте цифровую подпись вместо шифрования.
[КУ] оккупировала армия.
Re[2]: Шифрование XML-файлов XML в .NET приложении
От: DangerRSDN Россия http://danger-world.livejournal.com/
Дата: 14.02.11 15:28
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>XML-файлы шифруете с помощью RSA приватным ключом, который хранится только у вас. В приложении же хранится публичный ключ, с помощью которого расшифровываете файлы, после чего загружаете конфигурацию.


Ну собственно это и был мой вопрос! Я пока не знаю как это сделать. И остается нерешенным вопрок о контейнерах ключей... Я в общем-то нашел пару ответов по поводу хэширования здесь — но это мне не подходит.
Re[2]: Шифрование XML-файлов XML в .NET приложении
От: DangerRSDN Россия http://danger-world.livejournal.com/
Дата: 14.02.11 15:33
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Здравствуйте, DangerRSDN, Вы писали:


DRS>><skipped>


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


В общем-то чем дальше копаю — тем ближе к аналогичной мысли... Уже нашел здесь рецепт проверки цифровой подписи с помощью RSA. Но хотелось бы все-таки зашифровать файл... На всякий случай
Re: Шифрование XML-файлов XML в .NET приложении
От: Mumitroller Беларусь  
Дата: 14.02.11 15:37
Оценка:
Здравствуйте, DangerRSDN, Вы писали:

DRS>Чего хотелось бы добиться: я с помощью приватного ключа известного только мне, шифрую эти файлы и в зашифрованном виде включаю их в дистрибутив. Вместе с зашифрованными файлами я включаю в дистрибутив некий публичный ключ, который подходит только для расшифровки. Т.е. имея этот ключ программа, установленнная на компьютере пользователя сможет только прочитать данные из дешифрованного конфигурационного файла. Т.е. сами данные секретом не являются — пользователь может взять публичный ключ и с помощью какой-либо утилиты дефивровать файлы. Я и не буду стараться его особо спрятать, могу вообще положить рядом с зашифрованными файлами с именем "KeyForDecryptConfigs.xml" Проблемы у него должны появиться тогда, когда он попытается изменить дешифрованные файлы и снова запаковать их, чтобы подсунуть моей программе. Ведь у него не будет моего приватного ключа! Следовательно ничего зашифровать он не сможет — следовательно программа не сможет расшифровать корректно те данные которые ей будут пытаться подсунуть и завершит выполнение с соответствующим сообщением об ошибке...


Я не специалист в этой теме, но описанное больше похоже на цифровую подпись.

Mumitroller
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Re[3]: Шифрование XML-файлов XML в .NET приложении
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 14.02.11 15:37
Оценка:
Здравствуйте, DangerRSDN, Вы писали:

DRS>В общем-то чем дальше копаю — тем ближе к аналогичной мысли... Уже нашел здесь рецепт проверки цифровой подписи с помощью RSA. Но хотелось бы все-таки зашифровать файл... На всякий случай


В безопасности нет понятия "на всякий случай". Если содержимое не является секретом — шифровать его нет смысла. Вообще шифрование и цифровая подпись — независимые средства и могут применяться в сочетании. Если нужно обеспечить секретность — используется шифрование, если целостность и неизменность — цифровая подпись.
[КУ] оккупировала армия.
Re: Шифрование XML-файлов XML в .NET приложении
От: Аноним  
Дата: 15.02.11 15:33
Оценка:
Здравствуйте, DangerRSDN, Вы писали:

DRS> Но вот чего я никак не могу понять — как в этой схеме зашифровать данные приватным ключом и дать пользователю (читай — программе) публичный ключ и зашифрованные данные, чтобы она их расшифровывала этим публичным ключом?


А мне вот интересно, что помешает пользователю заменить ваш открытый ключ своим...
Re[2]: Шифрование XML-файлов XML в .NET приложении
От: DangerRSDN Россия http://danger-world.livejournal.com/
Дата: 15.02.11 18:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А мне вот интересно, что помешает пользователю заменить ваш открытый ключ своим...

Господи — да пусть меняет. Ну расфифрует он данные, ну изменит их. Но зашифровать-то измененный файл он обратно не сможет! У него же нет приватного ключа!
Re[3]: Шифрование XML-файлов XML в .NET приложении
От: drol  
Дата: 15.02.11 21:37
Оценка:
Здравствуйте, DangerRSDN, Вы писали:

А>>А мне вот интересно, что помешает пользователю заменить ваш открытый ключ своим...

DRS>Господи — да пусть меняет. Ну расфифрует он данные, ну изменит их. Но зашифровать-то измененный файл он обратно не сможет! У него же нет приватного ключа!

А зачем ему Ваш приватный ключ ??? Он своим будет шифровать.
Re[4]: Шифрование XML-файлов XML в .NET приложении
От: Аноним  
Дата: 16.02.11 08:07
Оценка:
Здравствуйте, drol, Вы писали:

D>А зачем ему Ваш приватный ключ ??? Он своим будет шифровать.


вот и я об этом... ))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.