2009-04-21 8 views
0

「1234」という値を想像してください。その値を他の値、例えば 'abcd'にマップしたいと思います。制約:値を別の値にマッピングして戻す

  1. 目標値の長さは、マッピングは一意である必要があり、開始値
  2. に等しいです。例えば。 1234はabcdとviseversaにのみマップする必要があります。
  3. マッピングプロセスは(非常に)推測するのが難しいはずです。例えば。 2倍すること
  4. はマッピングが開始値は、最終的に私がよ、
  5. 目標値は、これは基本的なアルゴリズムである必要があり

任意のタイプのものであることができる整数である

  • 可逆的でなければなりません数えるんそれをRubyに書きますが、ここではそれは問題ではありません。

    私は、次の線に沿って考えていた:

    SECRET = 1234 
    def to(int) 
        SECRET + int * 2 
    end 
    
    def fro(int) 
        (int - SECRET)/2 
    end 
    

    明らかにこれは最終的な目標は、私のデータベース内のレコードを匿名化することで制約1と3

    に違反します。私はこれを考えすぎるかもしれない。

  • +1

    短い質問脇:同時に6を確保したい場合は、どのようにして1を保証しますか? – Joey

    +2

    他の誰かがどのアルゴリズムが使われているかをハッキングすると、気になることはありますか?シンプルなハッシング(あなたが示唆しているように)は、データの匿名性を破壊し易くします。あなたの必要性に応じて、私はハッシュを片方向で見てみることをお勧めします。 – dirkgently

    +0

    はい、誰かがアルゴリズムをハックすると私は気になりません。本当にちょっと。そして私の解決策が受け入れられないことを知っているので、私は尋ねました。 私は1と6が矛盾しているとは思わない。ポイント1は単に制約を置くだけです。ポイント6はドロップすることができます。タイプは整数、文字などを意味します。 – harm

    答えて

    4

    まず、あなたの目標があまりにも野心的だと思います。なぜ制約6ですか?

    第2に、必要なものは技術的には整数のドメインからのbijectionです。

    第3に、制約3はKerkhoff's principleになります。秘密鍵で管理されているよく知られているアルゴリズムを使うほうが良いでしょう。秘密鍵は、大量の整数の結果を知っていても派生しにくいものです。

    第4に、あなたは何に対して匿名化していますか?個人情報を扱っている場合、Xyzzyが実際にJohn Doeであることを他のデータとの関係に基づいてどのように統計分析から守りますか?そのような攻撃ベクトルに対抗するためのいくつかの研究があります(googleなど、 'k-anonymization')。

    第5に、自分自身を発明しようとするのではなく、既存の暗号プリミティブを使用します。十分にテストされている暗号化アルゴリズムが存在する(例えば、cipher-block-chainingモードのAES) - AESはすべての現代のプラットフォーム、おそらくはRubyでもよくサポートされている。しかし、暗号化はまだ強力な意味でレコードの匿名性を与えていません。

    +0

    ありがとうございます!明らかに私はこのフィールドのほとんどを知っている、あなたは残りの日のための十分な材料を与えてきました。 私はあなたの5番目のポイントが上がっていると思っていましたが、潜在的に記録は暗号化されていない行(それを助けることはできません)上を移動し、盗むための「機会」は可能な限り小さくすべきです。 – harm

    +0

    +1今、「それ」は印象的です。 –

    +0

    いくつかのものは何もありませんが、悪い場合もあります。 ROT13レベルの暗号化はセキュリティの誤った感覚を引き起こします...あなたは標準的な暗号化アルゴリズムを使用することの学習限界が高すぎるのではないかと恐れていますか?私はそれを疑っていますが、このように見てください:あなたのソリューションはより多くの攻撃から保護されるだけでなく、セキュリティの問題に対処する必要があるときには、自家製のソリューションは、どちらのカウントでも失敗する可能性があります。 –

    1

    あなたが達成しようとしていることについてもう少し詳しく説明する価値があります。恐らくあなたは悪意のある人物があなたのデータを保持することを心配していますが、悪意のある人物もあなたのデータベースにアクセスしたコードにアクセスする可能性は同じではありませんか?あなたのコードを調べてアルゴリズムを学ぶのを止めるのはどうですか?

    本当にデータを匿名化したいのであれば、それは一般的に片方のことです(名前が削除され、クレジットカードの値が削除されますなど)。データベースの内容を暗号化しようとすると、多くのデータベースエンジンがこれを行うための十分にテストされたメカニズムを提供します。たとえば:

    Best practices for dealing with encrypted data in MSSQL

    database encryption

    それは独自のロールよりも、製品の暗号化メカニズムを使用することが常に良いでしょう。

    +0

    データベースとコードは別々のシステムです。データベースを妥協することは、必ずしもコードベースの妥協を意味するものではありません。 データを失うことなく、クライアントに安全でないデータを送信できるように、私はデータを保護する必要があります。接続が安全であることがわかったら(HTTP対HTTPS)、元のデータを送信できるようにしたい。 – harm

    +0

    OK。だからあなたの質問は、データをワイヤーではなく、データベースに座ってデータを暗号化することですか? –

    関連する問題