-1

私のプログラムは、機能するために必要なデータをロードするために、起動後に暗号化されたファイルを復号化する必要があります。ユーザーはこのデータを利用できません。

私は暗号化の専門家ではないので、ハードコードされたパスフレーズやその他のデータをユーザーから保護し、ソフトウェアをデバッグし、ソフトウェアを逆アセンブルする最善の方法は何ですか?

これはおそらく悪い習慣であることは理解していますが、私にとっては不可欠です(少なくとも今のところ)。

上記の 3 つからデータを保護する方法が他にある場合は、その方法を教えていただけますか?

4

3 に答える 3

2

簡単な答え:できません。 ソフトウェアがユーザーのディスクに保存されると、十分に頭が良く、断固たるユーザーはそこから機密データを抽出できます。

より長い回答については、security.SE ブログの「Storing secrets in software」を参照してください。

于 2012-03-18T16:47:02.780 に答える
0

ハードコードされたパスフレーズやその他のデータをユーザーから保護し、ソフトウェアをデバッグし、ソフトウェアを逆アセンブルする最善の方法は何ですか?

ユーザーにパスワードを要求し、パスフレーズをハードコーディングしないでください。これが安全な唯一の方法です。

それができず、アプリにハードコーディングする必要がある場合は、すべての賭けが無効になります。

あなたができる最も簡単なことは(避けられないことを遅らせるだけの精巧なことをする余裕がない場合)、システムのユーザーに責任を委任することです。
あなたのソフトウェアは、それが実行する「マシン」と同じくらい安全であることを明示的に述べることを意味します。
攻撃者がファイル システムをいじり始めるためのアクセス権を持っている場合、あなたのアプリはユーザーにとって最も重要な問題ではありません。

于 2012-03-18T16:59:57.887 に答える
0

私の経験では、この種の質問は、多くの場合、次の 4 つの理由のいずれかによって動機付けられます。

  1. アプリケーションが、データベース サーバーなどの制限されたリモート サービスに接続しています。
  2. ユーザーに構成設定をいじらせたくないので、構成設定が変更されていない限り、機密を保持する必要はありません。
  3. 独自のソフトウェアのコピー防止。
  4. データのコピー保護。

Illmari Karonen が彼の回答で書いたように、あなたが求めていることを正確に行うことはできません。これは特に、3 と 4 を暗号化だけでは解決できないことを意味します。

ただし、質問する理由が 1 または 2 の場合は、設計プロセスの早い段階でいくつかの悪い決定を下したため、質問をすることになります。たとえば、1 の場合、完全に信頼していないシステムから制限されたサービスにアクセスできるようにしないでください。典型的な安全な解決策は、制限されたリソースへの唯一のクライアントであり、公開できる中間層を導入することです。

2 の場合、最適な解決策は、多くの場合、構成ファイル (またはレジストリ設定など) が起動時にロードされるときに、まったく同じロジックを使用して、ユーザーが入力したときに一貫性をチェックするために使用することです。優先設定ユーザー インターフェイス。矛盾を見つけた場合は、構成 UI を表示して問題を強調表示してください。

于 2012-03-19T08:04:03.653 に答える