あなたが考えていることに対してSSLが機能しないことを確認してください。クライアントとサーバー間で安全な通信と認証を取得しようとしているようです。これにはSSLを使用します。実際、暗号化キーを保存する場所があるため、セキュリティのためにサーバー側で取得できるのはおそらくこれが最善です。詳細な説明については、ここで私の答えを参照してください。
クライアント(ユーザーからではなく、DRM)でデータを保護する場合は、DPAPIまたはそのマネージラッパーを使用します。これは、発行されたキーストレージを解決するため、実際に購入できるものよりも安全です。クライアントで暗号化されたデータがあり、オフラインでアクセスする必要がある場合は、システムにキーを保存するか、ユーザーに何かをプラグインさせるか、別のパスワードを入力させることになります。最初のものは安全ではなく、次の2つは苦痛です。DPAPIは、ユーザーのログインパスワードから派生したキーで暗号化します(または、スマートカードまたはWindowsの生体認証がそれらを使用しています)
暗号ライブラリについて
.net公開鍵暗号化を備えたマネージコード暗号化パッケージとネイティブコードへのラッパーの両方が付属しています。そのSystem.security.cryptographyパッケージとその無料で、.netがインストールされているすべてのWindowsシステムにすでにインストールされています。
最低限、これを使用して、実際の労力なしで公開秘密鍵の部分を処理できます(たとえば、zipblackboxから鍵を暗号化するため)。
いくつかのフリー/オープンソースライブラリも、パスワードから暗号化されたコンテナを作成することをサポートしています。Truecrypt、tarsnap、および7zipが思い浮かびます(ただし、これらをインストールするには管理者権限が必要な場合があります)。暗号化を行うalosdotNetZipがあります。インストールするのに管理者権限は必要ないと思います。コピーレフト以外のライセンスの下では、無料でオープンソースです。
必要な暗号化コンテナを簡単に作成することもできますが、そうすることをためらう理由はわかります。Microsoft CLRセキュリティの担当者によって作成されたこのクラスを使用し、ファイルをそのストリームに書き込み、IVとタグを付加してから、公開鍵暗号化を使用して提供される鍵を暗号化します。もう一方の端では、キーを復号化し、ivを読み取り、データを復号化し、タグが一致することを確認してから、問題を解決します。