После многих часов гугления и поиска на тематических сайтах, включая любимый RSDN, не было найдено ни одного внятного рецепта. Братья-коллеги по цеху! Помогите — я уже погибаю по тоннами ненужной информации!
Я недавно закончил разработку приложения Windows Forms с использованием набора практик Microsoft Smart Client Software Factory. Настал самый ответственный момент — Deployment. Приложение не защищено лизензией или паролем, в нем нет защиты от копирования. Данное приложение можно свободно копировать и передавать третьим лицам. В общем все что угодно. Но! Приложение нельзя изменять и переконфигурировать — это имею право делать только я, автор приложения. В составе приложение есть два файла, которые нужно зашифровать, чтобы предотвратить его несанкционированную модификацию — File1.xml и File2.xml.
Чего хотелось бы добиться: я с помощью приватного ключа
известного только мне, шифрую эти файлы и в
зашифрованном виде включаю их в дистрибутив. Вместе с зашифрованными файлами я включаю в дистрибутив некий публичный ключ, который подходит
только для расшифровки. Т.е. имея этот ключ программа, установленнная
на компьютере пользователя сможет
только прочитать данные из дешифрованного конфигурационного файла. Т.е. сами данные секретом не являются — пользователь может взять публичный ключ и с помощью какой-либо утилиты дефивровать файлы. Я и не буду стараться его особо спрятать, могу вообще положить рядом с зашифрованными файлами с именем "KeyForDecryptConfigs.xml"

Проблемы у него должны появиться тогда, когда он
попытается изменить дешифрованные файлы и снова запаковать их, чтобы подсунуть моей программе. Ведь у него не будет
моего приватного ключа! Следовательно ничего зашифровать он не сможет — следовательно программа не сможет расшифровать корректно те данные которые ей будут пытаться подсунуть и завершит выполнение с соответствующим сообщением об ошибке...
Реализовать подобное поведение я решил с помощью классической схемы, предложенной в MSDN — сами данные шифруются симметричным алгоритмом RijndaelManaged а его ключ шифруется с помощью RSACryptoServiceProvider. Но вот чего я никак не могу понять — как в этой схеме зашифровать данные приватным ключом и дать пользователю (читай — программе) публичный ключ и зашифрованные данные, чтобы она их расшифровывала этим публичным ключом?