質問

私の会社の顧客の多くは、研究目的で当社のデータ収集ソフトウェアを使用しています。一般的な研究の性質上、一部のクライアントは改ざんを防ぐためにデータを暗号化するよう求めます。データが改ざんされていることが判明した場合、重大な影響が生じる可能性があります。

私たちの一部 バイナリ ソフトウェアは、ソースに保存されているランダムな文字のようなパスワードを使用して出力ファイルを暗号化します。ソフトウェア レベルでは、暗号化されたファイルを読み取り専用操作で開くことができます。誰かが 本当に データを改ざんするためにパスワードを知りたかったのであれば、それは可能ですが、大変な作業になるでしょう。

別のソフトウェアを迅速に開発するために Python の使用を検討しています。データの改ざんを阻止/防止するために暗号化の機能を複製するには、これまでに私が思いついた最良のアイデアは、次のようにすることです。 ctypes ファイルの読み取り/書き込み操作には DLL を使用するため、暗号化と復号化の方法は「十分に」難読化されます。

私たちは「解読できない」方法が達成不可能であることをよく知っていますが、同時に暗号化/復号化のアプローチが Python ソース コード内にプレーン テキストで存在するだけであることに明らかに満足していません。「データ改ざんを非常に強く阻止する」だけで十分だと思います。

Python を使用して暗号化やその他のデータ整合性の証明を実現するための最良のアプローチは何でしょうか? 私が見た 別の投稿 ここでは「改ざん防止署名」の生成について話していますが、署名が純粋な Python で生成された場合、任意のデータに対して署名を生成することは簡単です。私たちは かもしれない データの整合性を証明するために自宅に電話をかけることはできますが、それは関係者全員にとって大きな不便のように思えます。

役に立ちましたか?

解決

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

あなたのデータ上でハッシュ値を計算し、どちらかあなたはそれが改ざんやデジタルそれに署名することはできません知っている場所にハッシュ値を格納します。

あなただけのソフトウェアがファイルを生成していることを確実にしたいように

あなたのケースでは、それはそうですか?あなたが言うように、彼らはそれを離れて引き裂いて、あなたにはどんな秘密鍵を見つけることができますので、ユーザーがソフトウェアへのアクセス権を持っている場合、これを行うには本当に安全な方法が存在することはできません。その制約を考えると、私は、DLLを使用してのアイデアは、あなたがそれを行うことができますと同じくらい良いと思います。

他のヒント

どこかにパスワードを埋め込んでいる場合は、すでに危険です。何も保証できません。

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

その仕組みは次のとおりです。

  1. 公開鍵と秘密鍵のペアを生成します。
  2. 秘密キーを安全に保管し、公開キーを配布します。
  3. データをハッシュし、秘密キーを使用してハッシュに署名します。
  4. 公開キーを使用してハッシュを検証します。

これにより、社外ではデータが実質的に読み取り専用になり、パスワードを配布せずにデータが変更されていないことを確認する簡単な方法がプログラムに提供されます。

ここでは別の問題です。おそらく、あなたのデータ収集ソフトウェアは、生データに必要なものは何でもやってprocesssingと結果を格納する、(測定装置のいくつかの並べ替えのような)いくつかの外部ソースからデータを収集しています。関係なく、あなたのプログラムで使用しているものの方法の、別の可能な攻撃ベクトルは、プログラムに不正なデータに供給するようになり、そしてプログラム自体は、測定から来たあなたが作ったデータではなく、データに供給していることを知る方法がありません端末。しかし、これは修正可能ではないかもしれません。

別の可能性のある攻撃ベクトル(そしておそらくあなたはそれが格納された後、コンピュータ上のデータを改ざんされる心配している1は、ここでそのリスクを軽減するためのアイデアがあります:。別のサーバーをセットアップし(これはどちらかあなたのものになる可能性それは、データを収集するとき、同社は実行します、またはそれ以上の可能性が高いそれは、ユーザーが)データレコードを追加します(ただし、削除しないことを可能にするパスワード保護されたWebサービスとクライアントを設定する何か)になります。そして、あなたのプログラムを持っている、にそれを送信(プログラムに保存されたパスワード/接続文字列を使用して)サーバが。それはデータが正常にサーバー上に格納されていることの確認を受信した場合、プログラムは、ローカルマシンにデータを書き込む持っています。

これで、攻撃者がクライアント上のデータを改ざんしようとします。彼はプログラムをリバースエンジニアリングすることができた場合は、その後、彼はもちろん、まだプログラムがやったように、ストレージのためにそれをサーバに送信することができます。しかし、サーバーは、まだ元のデータを持っていますので、サーバは両方の元と変更されたデータとなってしまいますので、改ざんが検出可能になります - クライアントは、元のレコードを消去することはできません。 (もちろん、クライアントプログラムは、サーバー上のレコードを消去する方法を知っている必要はありません。)

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