キーを使用せずに保存ファイルを暗号化する方法は?[閉まっている]


21

Binary Format.dat暗号化されたファイルを取得する単純なプログラムを作成し、それをバイト配列に復号化すると、すべてが復号化されたファイルに再書き込みされます。

例えば:

バイナリ暗号化アルゴリズムを作成しました。=> 0100100001100101001000000110100001100101011000 ...

しかし、これは非常に簡単に解読できます...

保存の進行状況を暗号化するために、何らかのキーを必要としない方法がありますか?


15
セーブを暗号化しますか?たとえば、メモリの変更を使用する場合など、カンニングする簡単な方法があります。zlibで圧縮(.gzに入れる)するだけです。サイズを縮小し、不正行為者がそれを変更するのを防ぎます。
HolyBlackCat

36
Nitpicking:あなたがしているのは暗号ではなくエンコーディングです。
フィリップ

13
(これがシングルプレイヤー向けであると仮定して)シングルプレイヤーゲームで不正行為を防止しようとしないでください。あなたにとってもプレイヤーにとっても迷惑です。そして最終的には役に立たない。

6
可能ではないユーザーが読み取りまたはそれらを変更できないようにファイル保存暗号化すること。(たとえば、復号化を行った直後にデバッガでゲームを一時停止することができるためです!)。ただし、プレーンテキストファイルを開くのは、デバッガーでゲームを一時停止する適切なタイミングを見つけるのに比べて非常に簡単であるため、難しくすることができます。それはあなたがやろうとしていることですか?
user253751

6
@DanielBejar先ほど言ったように、不可能にすることはできず、難しくすることしかできません。
user253751

回答:


77

一般に、数学コンピューターサイエンスの両方で少なくとも博士号を取得していない限り、独自の暗号化アルゴリズムを発明することはできません。しかし、既知の攻撃がなく、多くのプログラミング言語で無料で実装されている優れたストックアルゴリズムが多数あります。たとえば、RC5、AESまたはBlowfish。ゲームの開発に使用するテクノロジーによっては、すぐに使用できる安全な暗号化を提供する場合もあります。

ただし、savegamesを暗号化することをお勧めします。

まず、ゲームの実行可能ファイルで暗号化と復号化を行う場合、ゲームの実行可能ファイルにアルゴリズムとキーの両方を含める必要があります。つまり、決意のあるハッカーはそれらを見つけて抽出し、それらを使用してセーブゲームエディタを構築できます。そのため、100%安全になることはありません。

第二に、なぜあなたはとにかくこれをしたいのですか?オンラインゲームの場合、プレイヤーが変更できないゲーム状態をオンラインで保存する必要があります。オフラインゲームの場合、なぜ面倒なのですか?不正行為者は、最悪の場合でも自分のゲーム体験を傷つけることができます。意図したとおりにゲームを楽しみたい正直なプレイヤーは、この影響を受けません。一方、プレイヤーにチートを許可すると、ゲームに価値を加えることができます。プレイヤーはゲームをさまざまな方法で体験でき、ゲームの長期的な楽しみを増やすことができます。


5
数時間後に誰かが何か良いものを思い付くとは想像できませんが。そして、おそらく必要のないものにリソースを浪費することになります。
アイスティス

6
「オフラインゲームの場合、なぜわざわざ?」オンラインのハイスコアを持つシングルプレイヤーゲームの場合はどうなりますか?
帽子の男

19
「プレイヤーにチートを許可することでゲームに価値を加えることができます」-この声明に賛成です。ある程度の習熟度を達成するまで、支払った経験の一部をロックすることに決めたゲームに本当に悩まされています。これらの場合、ゲーム全体のロックを解除するためのチートが利用できることを嬉しく思います。たとえば、古いNeed for SpeedパーツのAIに対するレーストーナメントでは完全に負けています。私にとって、楽しさはさまざまな風景を駆け抜けることでした。したがって、私は通常、レースをスキップして、すべてのマップと車のロックを解除しました。これを防ぐゲームは私を悩ますだけです。
またはマッパー

6
「数学とコンピュータサイエンスの両方で少なくとも博士号を取得していない限り」を「数学とコンピュータサイエンスの両方で博士号を取得するために必要な知識を少なくとも取得していない限り」に書き換えたいドイツでは、コースは多くの場合、暗号に関連しないものでいっぱいです)。本質的に博士号を上回る程度は必要ありません。
フレネル

5
@phresnel技術的には正しいのですが、博士号は、信頼できる機関から授与される理論的な主題の習熟度の標準的な指標です。したがって、PhDを達成するために必要な知識とスキルの量の略記として使用することは理にかなっています。言い換えれば、OPの意味は十分に明確です:
トビア

10

ローカルで暗号化および復号化するには、プログラムにキーを保存する必要があります。コードを逆アセンブルすると、暗号化を解読できます。キーを難読化するためのトリックがありますが、それでも専用の攻撃者がキーを見つけて、それほど熱心ではないすべての人のためにオンラインで公開します。暗号化によって防止されるのは、16進エディタを使用する人だけです-圧縮や、解凍プログラムでファイルを読み取れないようにするものであれば、簡単にそれを阻止できます。たとえば、データの前に1バイトを追加します。

または、ファイルの最後にsavefileのmd5を追加して、ファイルが改ざんされているかどうかを確認できます。その後、これを使用して、savegameのロードを拒否するか、サポートチケットに適切にフラグを立てて、手動で変更されたsavegameによって引き起こされる問題に時間を無駄にしないようにします。繰り返しますが、これはあなたのコードを読むことができる人なら誰でも回避するのは簡単です。

デバイス上のバイナリにアクセスできる人が回避できないものが必要な場合は、管理下にあるサーバー上でプログラムの一部を実行する必要があります。

最後の質問に答えるために、キーと暗号化のタイプは、暗号化/復号化に適用する必要がある正確なアルゴリズムを識別するだけです。方法を定義するアルゴリズムがなければ、データを暗号化/復号化することはできません。


2番目のポイントは素晴らしいです。また、ファイルが破損した場合の問題の追跡にも役立ちます。
knowledge_is_power

4

実際の保存データの変換されたSHA256ハッシュを保存ファイルに保存します。

格納されたハッシュを、ロード時にデータのSHA256値と比較します。

それが一致しない場合、ファイルをごまかしたか破損しています。

編集して明確にする:これにより、アンチチートシステムをクラックすることはより困難になりますが、それでも可能です。


7
人々が変更を加えた後にハッシュを再計算することを止めるものは何もありません。また、SHA-256(署名用)またはbcrypt(パスワード用)のようなはるかに優れた代替手段があるときに、壊れたMD5アルゴリズムをすべての既知の暗号の弱点で擁護する人々がまだいる理由がわかりません。
フィリップ

1
シンプルで高速、完全に壊れています。
DeadMG

2
@DeadMGユーザーはキーを含む必要があるバイナリにアクセスできるため、設計上壊れています。より強力なハッシュを使用したり、AESのようなファイルを暗号化すると、セキュリティ追加されないためコストが増加するため、リソースの浪費と不適切なデザインになります。+1は、ダウン票に値しないためです。
ピーター-アンバンロバートハーベイ

7
@Philipp。この場合、MD5はSHA-256より明らかに優れているからです。説明されているアプローチで必要なのは、MD5とまったく同じ安価なチェックサムアルゴリズムです。
ピーター-アンバンロバートハーヴェイ

3
@ transistor09純粋にクライアント側の場合、何も確認できず、クライアントがすべてを暗号化するのと同じようにチェックサムが機能します。いずれにせよ、それは割れることができます。
ロルムス

1

私は標準の暗号化アルゴリズムを使用します(保存されたファイルの暗号分析を実行するのが難しくなるため)が、最もよく使用される上位5つのアルゴリズムの1つではなく、コード全体で非表示にします(どのアルゴリズムを理解するのが難しくなるため)キーはどこにあります。)

暗号化アルゴリズムをコードに隠すには:オープンソースバージョンを取得し、そのフロー(どの関数が他のどの関数をどの順序で呼び出すか)を理解してから、すべての変数、構造体フィールド、関数名を(確実に)改名し、関数を広げますコードベース全体で、さまざまなオブジェクトとモジュールで、おそらく実行も一時的に分離します(暗号化の一部を実行してから別のことを行い、一見無関係なコードの一部から数ミリ秒後に戻って別のフェーズを実行します)暗号化アルゴリズムのさまざまな隠された部分によって実行時にアクセスされる、クラス全体で一見無関係な多数の定数として、キーは同じ方法で隠されます。

これがすべて経済的に意味があるかどうかは、まったく別のトピックです。


わからない...ただのゲームでそれをもっと難しくする...しかし、助けてくれてありがとう!がんばります!
ダニエル・ベジャール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.