アプリ版:「スタンプのみでお礼する」機能のリリースについて

自作でソフトウェアを作成しているのですが、その中でINIファイルに設定を書き出しています。
しかし、実体のあるテキストファイル(INI)で保存すると、簡単に改ざん(ユーザーの意図していない悪質な改ざん)をされてしまうことになります。
ソフトウェアの性質上、INIファイルに保存されているデータをevalすることがあるのですが、
もしそこが改ざんされていれば大変なことになりかねません。

そこで、INIファイルの改ざんを検出、または改ざんされないようにしたいのですが、どのような手段があるでしょうか。
自分で考えたのは、
アプリケーション終了時に
・INIファイルのMD5ハッシュを取得、それを記憶。
・INIファイルのタイムスタンプを記憶。
をして、次回起動時に現在のINIファイルのMD5,タイムスタンプと比較して、改ざんを検出するというものです。

ですが、この方法だと結局はMD5のハッシュ値やタイムスタンプをどこかに保存しておかねばならず、
そうなるとそれらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます。


どうすると、一番効率的で安全でしょうか。
レジストリも結局は改ざんされてしまいます。

そもそも、完全に改ざんを防ぐことはできないだろうと思っていますので、
出来るだけ改ざんされにくい方法、または改ざんを検出しやすい方法をご教授いただければと思います。

様々な意見を頂きたいので、既に回答が出ている場合も追加で回答頂けると幸いです。

A 回答 (3件)

質問者さんも気づいているように、データとチェックロジック(ハッシュ値も含む)を同じ PC 上においたら改竄はできちゃうよ。



だから、せいぜい .ini ファイルを難読化して(↑の状態は暗号化とはいわない)、改竄する気をそぐことぐらいしかできないなぁ

ということで、ユーザが自由に操作できない、ネットワーク上のサーバ(S)を使うことにするね。

あと、話がややこしくなるから、前提として、プログラムの開始で .ini ファイルを読み込むところから、終了の .ini を書き込むまでは安全だとするよ。

1) .ini のデータをべつのサーバ(S)に保存する
サーバ(S)との受送信のタイミングで改竄可能だけど、前提があるので無視。
欠点はサーバに繋がらないと .ini ファイルが読めなくてプログラムが開始でできないこと。

2)公開鍵暗号技術を利用
.ini ファイルを保存するときは、サーバ(S)に秘密鍵で暗号化してもらう。
.ini ファイルを読み込むときはローカルに保存してある公開鍵で復号する。
これなら .ini ファイルを保存するときだけ、サーバ(S)に繋がればOk!。

ネットワーク接続がそもそも不可なら、暗号ロジックをプログラムに組み込むしかないなぁ(単なる難読化になるけど)。そうなると、アクティベーションキー方式で、鍵がかえられるようにしたほうがいいね。

こんなところかな?
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。


たしかに、ローカルに保存して置く以上改ざんは防げないですよね。
暗号化(難読化)やサーバへのアップロードする方法がよさそうですね。

お礼日時:2011/08/24 01:08

安直な方法ですが…



1)iniファイルに書き出す値そのものを暗号化する
2)1つの値を複数のキーに持たせ、かつ異なるキーワードで暗号化する
3)複数キーを起動時に照合する

これで改変の有無は検出できるのでは?

後はソーシャルエンジニアリング的手法として、目立つところにそれっぽいダミーのiniファイルを置いて、書き換えているふりをしているけど値は適当で、実体は別のところにある…なんてのも一時的には騙されてくれるかも知れません。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳御座いません。


ダミーはいいですね。
一時的にでも効果が期待できそうですね。
それに技術的にもそれほど難しいことでもありませんし。


ありがとうございました

お礼日時:2011/08/24 01:15

> 自分で考えたのは、


> アプリケーション終了時に
> ・INIファイルのMD5ハッシュを取得、それを記憶。
> ・INIファイルのタイムスタンプを記憶。
> をして、次回起動時に現在のINIファイルのMD5,タイムスタンプと比較して、改ざんを検出するというものです。
>
>ですが、この方法だと結局はMD5のハッシュ値やタイムスタンプをどこかに保存しておかねばならず、
>そうなるとそれらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます。

保存先を実行ファイルの中、数カ所に分けてなどすれば簡単には改竄し難くなるのでは。

『それらも改ざんされる恐れがあって結局意味を成さなく成ってしまいます』そこまでする方は少ないかと思いますよ。
要するに、少しでもやれば書き換えれる方法に辿り着く者は減る。それがより面倒にすれば更に減るのだと思います。
インストーラで実行ファイル中に埋め込んだって、インストール前のアーカイブから抽出したデータとバイナリ差分とればわかるかも知れませんが、そこまでする者はずっと減るのでは。
MD5ハッシュもちょっと値を組み替えるだけでもそのまま使うより減らせるかも知れませんし。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳御座いません。


やっぱり完全な改ざん防止は出来ないようですね。
難読化に努めたいと考えています。


ありがとうございました

お礼日時:2011/08/24 01:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!