5

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

さて、明らかに、私は実際に誰かがファイルを変更するのを止めることはできません.

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

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

4

9 に答える 9

13

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

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

于 2008-11-19T11:18:34.413 に答える
4

アプリケーションがユーザーのマシンで実行されている場合、彼らは常にバイナリにパッチを適用する可能性があるため、検証さえ行わず、すべてのハードワークが役に立たなくなります:-)

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

もし私があなたの立場だったら、「ユーザーとの軍拡競争に参加したら、私は勝つだろうか?」と自問するでしょう。答えがノーなら、私は時間を無駄にしません。

于 2008-11-19T11:12:53.177 に答える
3

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

于 2008-11-19T11:42:11.573 に答える
1

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

余談ですが、ユーザーはプレーン テキスト ファイルよりもバイナリ ファイルを編集する傾向がありません。さらに、チェックサム付きのテキスト ファイルを渡した場合よりも、バイナリ ファイルを渡した場合の方が、ユーザーが不快に感じることは少なくなります。チェックサムなどを追加していなければ、そうするのは簡単だったでしょう。

于 2008-11-19T12:27:47.347 に答える
1

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

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

于 2008-11-19T11:33:34.087 に答える
1

100% のソリューションが必要な場合は、そうではありません。映画や音楽業界を見てください。彼らは何年もの間試みて失敗しました:)

あなたの解決策は十分だと思います。ファイルの変更を困難にするために、暗号化することもできますが、暗号化すると読み取ることができないため、制限が適切である場合にのみ機能します。

于 2008-11-19T10:59:35.887 に答える
0

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

もちろん、保護は、ユーザーが保護を破るためにどれだけの時間と労力を投資したいか (または投資できるか) によってのみ効果があります。

于 2008-11-19T11:06:42.953 に答える
0

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

代替手段は、巨大なレベルの複雑さを追加し、通常はいずれにしてもクラック可能なある種のオンライン システムです。

あなたが考えているように「ソルト」を使用する成文化された方法については、HMACを見てください(代わりにソルトがキーと呼ばれる場合)。

于 2008-11-27T17:56:41.017 に答える
0

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

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

于 2008-11-19T11:30:16.650 に答える