web-dev-qa-db-ja.com

C#で安全なオフラインログインシステムを作成するための最良の方法は?

私はプログラミングが比較的新しいので、まだ物事を把握しています。

ユーザーを追加/削除できるC#のオフラインログインシステムを作成しています。コンピューターはインターネットに接続されません。

これは私がとろうとしていたアプローチでした:

ユーザー名とソルト+ハッシュされたパスワードをXMLファイルに入れます。 XMLファイルは、ユーザーの首(IDカードのようなもの)に装着される一意のキーで暗号化されます。

したがって、プロセスは次のようになります。

  1. ユーザーはIDカードをスキャンし、ユーザー名を入力します。
  2. アプリケーションは、ユーザーの暗号化されたXMLファイルを見つけて復号化します。
  3. ユーザーは自分のパスワードを入力します。
  4. アプリケーションはそれをチェックし、アクセスを許可/拒否します。

編集:読んでいるすべての人にとって、これを行わないでください-それは悪い考えです。アセンブリはリバースエンジニアリングできます。

2
user326468

特定の個人が独自の詳細を使用して独自のXMLファイルを作成し、独自のキーで暗号化し、USBドライブを介してコンピューターに配置することを妨げているのは何ですか?

それらを停止する(しない)ものを検討する前に、まず、なぜそれを実行するのかを考えてください。ログインに成功すると、何が得られますか?

ユーザーアカウントを単独で使用している場合、ユーザーはたとえば背景色を選択します。パスワードで保護する理由はほとんどありません。その情報に不正にアクセスするために努力する理由はさらに少なくなります。

ただし、権限のないユーザーに表示されるべきではない高度にプライベートな情報へのアクセスを処理している場合は、ユーザーが完全にアクセスできるマシンのローカルストレージを処理するべきではありません。承認については、自分で管理するサーバーに常に依存する必要があります。サーバーには、ユーザーが開いた手段(APIなど)以外はアクセスできません。

データベース全体を暗号化することもできます。しかし、構築されたアプリケーションをリバースエンジニアリングして、データベースを復号化するプロセスを理解することは常に可能です。

ゲームについて言及するとき、シングルプレイヤーゲームで不正行為をすることはできません。他の誰かを台無しにせずにゲーム体験を微調整することにした場合(あなたが唯一のプレイヤーであるため)、何が害になるでしょうか?

同様に、すべてのアプリケーションファイルとデータベースファイルをユーザーに提供しているのは非常に奇妙だと思いますが、担当したファイルの取り扱いを心配していますか?それは私には意味がありません、そのデータベースでユーザーが自分で入れなかったものは何でしょうか?アプリケーションをデプロイするときにファイルを個人情報と共有していますか?希望誰もリバースエンジニアリングしないことを望んでいますか?

4
Flater

ユーザーがファイルを変更するのが心配な場合は、ファイルのコンテンツをハッシュ化してください。 XMLは文字列ベースであるため、ファイル全体をハッシュしてから、そのハッシュをファイル自体または別の場所に保存できます。

ユーザーがXMLファイルを変更した場合、ハッシュは一致せず、ファイルが改ざんされています。

これはコンテンツでも機能します。ユーザーが画像またはPDFを変更しても、表示されません。すべてのコンテンツとハッシュは一元的に保存されます。ユーザーがファイルをダウンロードすると、ダウンロード後にハッシュがチェックされ、ファイルが正しくダウンロードされたことを確認します。また、ファイルにアクセスするたびに、ダウンロード後にユーザーがコンテンツを操作していないことを確認します。

0
Jon Raynor

ここが私の考えが崩れるところです

そこだけ?ユーザーが.NETアセンブリを逆コンパイルできるときにセキュリティの試みをいじるのはなぜですか。チェック関数にif( user.Name == "me" ) return true;を示す行を追加し、もう一度コンパイルして実行しますthatあなたの代わりに実行可能ですか?

私の後に繰り返して:

クライアントは敵の手中にあります。

クライアントは敵の手中にあります。

クライアントは敵の手中にあります。

ユーザーがアクセスできるコンピューター上のプログラムは決して安全ではありません。 決して

サーバーは、ユーザーがアクセスできるプログラムの部分から分離する必要があります。これは、Webフロントエンド、またはユーザー入力とプログラム出力のみをバックエンドとやり取りする別のC#プログラムによって実現できます。バックエンドは、ユーザーがAPIを除いてアクセスできません。しかし、地方議会は決して安全ではありません。


代替ソリューションとして:ユーザーにセキュリティを心配させます。プログラムに、データを含むファイルを宛先に読み書きさせます。彼らが自分のホームフォルダーにそれを置く場合、ネットワークインフラストラクチャを制御する人は誰でもそれが安全であることを確認する必要があります。彼らがそれをC:\に保存する場合、それは彼らの問題であり、他のファイルと同じです。

0
nvoigt