2009-07-24 18 views
1

私の会社のクライアントの多くは、データ収集ソフトウェアを研究ベースで使用しています。一般的な研究の性質上、一部のクライアントは、改ざんを防止するためにデータが暗号化されていることを要求しています。データが改ざんされていると重大な結果が生じる可能性があります。Python:データ改ざんを防止する手段としての暗号化

バイナリソフトウェアの一部は、ソースにパスワードが格納されている出力ファイルを暗号化しています。このパスワードはランダムな文字のようです。ソフトウェアレベルでは、読み取り専用操作のために暗号化されたファイルを開くことができます。もし誰か本当には、彼らはデータを変更することができるようにパスワードを探していたが、それは可能かもしれないが、それは多くの作業になります。

私はPythonを使って、別のソフトウェアを素早く開発しようとしています。暗号化の機能を複製してデータの改ざん/落胆を防ぐには、私が今まで考え出した最良のアイデアは、ファイルの読み込み/書き込み操作用のDLLに​​を使用するだけです。暗号化と復号化の方法が十分に"難読化された。

"uncrackable"メソッドは達成できませんが、同時にPythonソースコードにプレーンテキストで暗号化/復号化を行うことに慣れていないのは明らかです。 「データ改ざんの非常に強い落胆」が十分に良いと私は思う。

Pythonを使用して暗号化やデータの完全性を証明する幸せな媒体を得るにはどうすればよいでしょうか?私はanother postが "不正な改ざんの署名"を生成することを話しましたが、純粋なPythonで署名が生成された場合、任意のデータの署名を生成するのは簡単です。我々はかもしれないデータの整合性を証明するために電話で家に帰ることができるが、それは関係するすべての人にとって大きな不便のようだ。

答えて

12

一般的な原則として、改ざん防止のために暗号化を使用するのではなく、デジタル署名を使用する必要があります。暗号化は機密性を与えますが、完全性の後です。

データにハッシュ値を計算し、改ざんできない、またはデジタル署名することができない場所にハッシュ値を格納します。

あなたの場合、あなたのソフトウェアだけがファイルを生成できるようにしたいと思うようですか?あなたが言っているように、ユーザーがソフトウェアにアクセスするときに、本当に安全な方法が存在することはありません。その制約を考えると、私はDLLを使用するあなたの考えは、あなたがそれを行うことができるほど良いと思います。

+0

OTOH、データを変更しないことは最終的にはクライアントの責任であり、改ざんを防止するのは当社の責任です。私はボス/クライアントが、取得したデータに署名するためのユーザーごとの秘密鍵を必要としているかどうかはわかりませんが、少なくともそれを行う方法は十数あります。 –

+0

あなたの会社に、データが改ざんされていないことを保証するソフトウェアの能力について何らかの主張をするのは愚かなことです。 .dllからでも秘密鍵やパスワードを抽出することはそれほど難しくありません。十分に動機づけられたデバッガを持った人であれば、何時間もかかることがあります。 – Christopher

+0

また、パスワードがランダムなデータのように見えるかどうかは関係ありません。実際、それが問題になる可能性があります。 .exeと.dllファイルはランダムではありません。疑わしいランダムなデータのファイルを分析する場合、おそらくあなたの鍵はすぐにわかるでしょう。 – Christopher

3

パスワードをどこかに埋め込んでいる場合、すでにホースされています。あなたは何も保証することはできません。

ただし、公開鍵/秘密鍵の暗号化を使用して、データが改ざんされていないことを確認することができます。

それが動作する方法はこれです:あなたは、公開鍵/秘密鍵のペアを生成する

  1. 秘密鍵を安全に保ち、公開鍵を配布します。
  2. データをハッシュし、秘密鍵でハッシュに署名します。
  3. パブリックキーを使用してハッシュを検証します。

これは、会社の外で読み取り専用のデータを効果的にレンダリングし、パスワードを配布せずにデータが変更されていないことを簡単に確認する方法を提供します。

+0

ハッシュ値に署名するために秘密鍵が必要です。 –

+0

少なくとも、あなたはそのようなレシピを読んでいます:-)代わりに、秘密鍵が格納されているサーバーにハッシュ値を送信するように提案すれば、配布の問題を解決します。しかし、誰もがサーバーにそれを発行するよう依頼することができるので、署名はそれほど重要ではありません。 –

+1

はい、しかし、 "キーを隠している"という意味では意味がありません。データに関する強力な主張ができる唯一の方法は、ユーザーに、そのユーザーに特別に割り当てられたキーを使用してデータのハッシュに署名させることです。ハッシュと署名は安全な領域に格納されます。その後、データに関する疑問がある場合は、セキュア・リポジトリーに保管されている署名を、提供されたデータと照合することができます。はい、研究者は、必要なデータに対して署名を要求できます。しかし、それはあなたのシステムが今働く方法と変わりません。暗黙のセキュリティはまったくセキュリティではありません。 – Christopher

0

別の問題があります。おそらく、あなたのデータ収集ソフトウェアは、何らかの外部装置(ある種の測定装置のようなもの)からデータを収集しており、生データに必要な処理を行い、結果を保存しています。あなたのプログラムでどのような方法を使用しているかに関わらず、悪意のあるデータをプログラムに送り込む可能性のあるもう1つの攻撃方法はプログラムから得られたデータではなく、作成されたデータをフィードしていることを知る方法がありません。デバイス。しかし、これは修正できないかもしれません。

もう1つの攻撃の可能性があります(おそらく、あなたが心配しているのは、コンピュータのデータが格納された後にデータが改ざんされている可能性があるからです。あなたの会社が実行されるか、またはクライアントが設定するものである可能性が高い)パスワードで保護されたWebサービスを使用して、ユーザーがデータレコードを追加できますが、削除することはできません。 (プログラムに格納されているパスワード/接続文字列を使用して)サーバーにデータが正常に格納されたことを確認するメッセージがローカルマシンに書き込まれるようにする。

攻撃者は、クライアント上のデータ。もし彼がプログラムをリバースエンジニアリングすることができれば、プログラムと同じように、それをサーバーに保管して保存することができます。しかし、サーバーは元のデータを保持しているので、サーバーは元のデータと変更されたデータの両方で終了するため、改ざんが検出されます。クライアントは元のレコードを消去できません。 (もちろん、クライアントプログラムはサーバー上のレコードを消去する方法を知る必要はありません)。

関連する問題