質問

ファイルを作成してエンドユーザーに配布できるようにしたいが、ファイルを変更できないようにしたい。

今、明らかに、誰もがファイルを変更することを実際に止めることはできません-したがって、私のアプローチは、ファイルが変更されている場合、それを検出して拒否することです。

ファイルの内容のソルトハッシュを生成し、ファイルに追加することを目的としています。読み取り時には、ファイルの残りを読み取る前にハッシュが検証されます。この欠点は、固定の「塩」を配布する必要があることです。ファイルを読み取る実行可能ファイル内。明らかにある程度難読化できますが、それでも弱いリンクのように感じます。

この種の問題を解決するためのより良いアプローチはありますか?

役に立ちましたか?

解決

デジタル署名をドキュメントに追加します。これは広範囲に研究されている分野です。要するに、ファイルが改ざんされていないことをかなりの確実性で確認できますが、ユーザーによる改ざんを防止することはできません。

(音楽業界との比較は、人々がファイルをコピーすることも防止したいため、完全に関連性はありません。これははるかに難しい問題です。)

他のヒント

アプリケーションがユーザーのマシンで実行されている場合、ユーザーは常にバイナリにパッチを当てることができるため、検証さえ行わず、すべてのハードワークを役に立たないものにします:-)

トラフィックをスニッフィングすることにより、サーバー側のソリューションでさえバイパスすることができます。そのため、それらを1つにして、SSLを使用する必要があります。そして、彼らは上記のようにバイナリにパッチを適用しただけです。そのため、バイナリを難読化するためにさまざまな手段を採用し、ユーザーはIDA PROのような逆アセンブラーを作成します。

自分に問いかける質問は、私があなたの立場にあった場合、「ユーザーとの軍拡競争に参加した場合、私は勝ちますか?」です。答えがノーの場合、時間を無駄にしません。

デジタル署名を使用します。署名は、公開鍵と秘密鍵の暗号化で暗号化されたハッシュです。アプリケーションには公開鍵のみが含まれています。このキーはハッシュの復号化に使用され、ハッシュが検証されます。 「正しい」とはファイルの変更後のハッシュ、ユーザーは新しいハッシュを計算し、秘密鍵で暗号化し、ファイルの最後にある古いハッシュを置き換える必要があります。問題:彼は秘密鍵を持っていません。秘密鍵はアプリにありません。秘密鍵は、アプリケーションとともにどこにも出荷されません。アプリケーションには、公開されているもののみがあります。彼が公開されたもので暗号化すると、公開されたもので復号化されないため、これは役に立ちません。秘密鍵はコンピューター上にあり、誰もアクセスできません。

100%のソリューションが必要な場合は別です。映画と音楽業界をご覧ください。彼らは何年も試して失敗しました:)

あなたのソリューションは十分だと思います。ファイルの変更を難しくするために、暗号化することはできますが、ファイルを読み取ることはできません。したがって、それが制限事項である場合にのみ機能します。

ハッシュの配布に関する懸念について...ハッシュを作成し、秘密鍵と公開鍵のペアで暗号化することをお勧めします。そして、公開鍵を配布するだけです。そうすれば、彼らはそれを読むことはできますが、修正したり、新しいものを作成することはできません。

私は、JesperEによって提案されたデジタル署名を使用することをお勧めします。このプロセスは標準的なものであり、それを示す多くの例があります。

ユーザーが自分のバイナリにパッチを適用して、ファイルの編集済みコピーが適切に機能するようにしたとしても、パッチを適用していないマシンでは編集済みコピーは機能しません。この編集を防ぐ目的は何ですか?

余談ですが、ユーザーはプレーンテキストファイルよりもバイナリファイルを編集する傾向があります。さらに、ユーザーがチェックサム付きのテキストファイルを渡す場合よりも、バイナリファイルを渡す場合、ユーザーがそれを編集する正当な理由があり、ファイルを見て、チェックサムなどを追加していなければ、簡単にできたはずです。

保護するファイルの種類に応じて、ドキュメント管理ツールを使用できます。 Adobe PDFにはそのためのツールがあります。 さらに、アプリケーションサーバーまたはWebサーバーでアプリケーションをホストしている場合、ユーザーはコードにアクセスして変更することはできません。これにより、サーバー側に、保護するファイルのハッシュのデータベースを作成できます。

もちろん、保護は、ユーザーが保護を破るのにどれだけの時間と労力を費やしたい(またはできる)かという点でのみ優れています。

これがmd5ハッシュとCRCの目的です。そのため、インターネットからダウンロードしたファイルをmd5ファイルと照合し、途中でハイジャックされていないことを確認します。

とにかくRoddyはC ++を使用していると思うので、Boost :: CRCは非常に高速でオーバーヘッドが少ないことをお勧めします。ファイルをそのように暗号化する必要もありません

ユーザーは誰で、ファイルを変更しようとするのはどれほど難しいでしょうか。ユーザーがハッシュに追加するソルトを見つけることができる場合、コード内で公開キーを見つけ、それを自分で生成した公開キーに変更し、変更されたファイルの署名を秘密キーで計算する可能性があります。塩の難読化に行きます。

代替手段は、巨大なレベルの複雑さを追加するオンラインシステムの一種であり、通常はとにかくクラック可能です。

考えているとおりに「塩」を使用する体系化された方法については、HMACをご覧ください(代わりに塩がキーと呼ばれます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top