2017-08-19 6 views
0

まず、私の悪い英語を申し訳ありません。日付と時刻を使用して一意のコードを生成する

私はプロジェクトに取り組んでおり、後で検証できるコード(ID)を生成する必要があります。

私のプロジェクトは非常に広範囲にわたっていますので、私はあなたと例を提供し、後で私は解決する必要があります。

例:場所の温度を1日に1回取得するコードがあり、データはローカルデータベースに保存されます(温度、日付、一意のIDを保存します)。 コードは暗号化されています(誰もプログラムのソースコードを見ることはできません)。

今、私の問題です。 データベースに保存されているデータが変更されていないことを確認する必要があります。

私がこれを解決できると考えるものは次のとおりです。たとえば、日付は08-19-2017で、温度は25℃です。私はいくつかの数学演算(例えば、すべてを掛ける)をしてIDを取得し、後でコードが日付と温度に一致するかどうかを検証することができます。

これは良い解決策だと思いますか、それとも良い方法がありますか?

ありがとうございます。 私はPythonとlinuxを使用しています。

+0

変更日時は?同じ日に、または1日後に?あなたは実際に何に対して保護しようとしていますか?データの破損、欠陥のあるAPI、または改ざんオブジェクトにタイムスタンプを追加したり、トランザクションIDを追加したりして、新しいオブジェクトを1回だけ書き込むことができるようにプログラミングしてから、読み取り専用にすることができます。たくさんのオプションがありますが、ほとんど情報がありません – hmedia1

+0

https://docs.python.org/3/library/uuid.htmlとhttps://docs.python.org/3/library/hmac.html –

+0

温度+日付をマップできるハッシュ関数<=> ID – Miket25

答えて

1

コードは暗号化されています(誰もプログラムのソースコードを見ることはできません)。

これは誤りです。オペレーティングシステムでは読み取れないメモリに実際に復号化することができる安全なプロセッサを使用していない限り、あなたのプログラムは本当に暗号化されません。確かに、オリジナルのPythonは隠されているかもしれませんが、アセンブリから、やや熟練した人が何が起こっているのかを簡単に集めることができます。

これはデータセキュリティの問題の一種であるため、あいまいによるセキュリティは汎用ハードウェアでは機能しません。特にPythonのような比較的高レベルなものではありません。

今、私の問題です。自分のデータベースに格納されているデータが変更されていないことを確認する必要があります。

ですが、実際問題はありません。問題は、誰かがあなたのプログラムの状態を完全に再構築できれば、データが異なっていれば暗号化の内容を再構築できることです。

それにはいくつかの方法があります。しかし、最終的にはすべてが単一の原則に分解されます。

あなたのデータを暗号化して改ざんされていないことが証明できるハードウェアデバイスが必要です。何個のものが暗号化されているかのカウンタを保持することによって、たとえば、データベース内に安全でクローン不可能な暗号ハードウェアで暗号化されたものが100個あり、それが100回しか使用されていないことがわかっている場合は、正常です。そのハードウェアが、例えば、常に「暗号化(入力バイト+タイムスタンプ)」を行う場合、同じことが当てはまります。

汎用OSのソフトウェアではこれを実行できません。ソフトウェアは常に変更されたデータで実行することができます。それだけであれば、ただちにアクセスする物理メモリにパッチを当てることができます。

したがって、特定のハードウェアが必要です。暗号スマートカードのような気がするようなことができるだろうが、カウンタを保持する機能やタイムスタンプを含める機能が含まれているかどうかわからない。

基本的には、ストリーム暗号を使用してデータ "ストリーム"全体の完全性を保証することです。ここで、シークレットの一部は、暗号化アルゴリズムが入っている状態です。これを想像してみましょう:カード自体に生成された鍵ペアの秘密鍵を持つスマートカードを持っています。あなたはあなたのセラーの中にもう一方の鍵を持っています。

  1. あなたは、デバイスを出荷する前に、何か秘密を暗号化します。それはスマートカードを、悪意のある不正行為者が推測できない状態に置く。
  2. 最初の値を暗号化し、出力を保存します。それは内部状態を変えます!
  3. 既知の単語またはシーケンスの出力を暗号化して保存します。
  4. repeat 2. + 3.他のすべての値を保存します。

最後に、保管庫に保管したキーを使用してデータベースのデータを復号化します。入力データによって内部状態が必然的に変更されたため(同じデータを2回暗号化しても同じ結果は得られません!!)、レコードから何かが欠落していれば、データは正しく解読できません。既知の単語によって生成された出力をすぐにチェックすることができます。


あなたが何をしようとしてお持ち帰り

は難しいです - それすなわちさ:

はあなたを制御することはできません、ハードウェア上でソフトウェアを実行しているとの信頼を確保すること生成されたデータ。

ここで不可能な部分は、ソフトウェアに入る前にデータが改ざんされていないことを実際に確認していることです。たとえば、温度センサー用のドライバは、常に「-18℃」と表示されますか?人がソフトウェアを改ざんする可能性を避けるためには、改ざんのないハードウェアが必要です。これは、PCスタイルのハードウェア上で行うことはできません。すべてのデバッグの可能性を無効にして、安全な起動能力を確保しない限りです。

関連する問題