4

アプリケーションにユーザーに属する特定のデータがあり、所有者以外は誰もそれを見ることができないとしましょう。私は DataMapper ORM マッパーで MySQL データベースを使用しています。アプリケーションは Ruby on Sinatra で書かれています。

アプリケーションの動作:

  1. ユーザーがアカウントにサインアップします。ユーザー名とパスワードを作成します。
  2. ダッシュボードにログインします。
  3. 特定のテーブルの一部のフィールドは保護する必要があります。

基本的に、モデル プロパティの自動暗号化を探しています。このようなもの:

class Transaction
  include DataMapper::Resource

  property :id, Serial
  property :value, String, :length => 1024, :encrypted => true
  ... etc ...
  belongs_to :user
end

その場での暗号化/復号化はパフォーマンスの問題を引き起こすと思いますが、それは問題ありません。少なくともそれがうまくいけば - 私は大丈夫です。

これを行う方法はありますか?

4

7 に答える 7

3

ユーザーがパスワードを記憶し、そのパスワードを使用してデータを復号化することに依存するデータは保存しません。ユーザーがパスワードを変更したとき、あなたは何をしますか? すべてを復号化/暗号化しますか? 疑わしい。管理者がパスワードをリセットした場合はどうなりますか? すべてのデータが失われましたか?繰り返しますが、私はそれを疑っています。

シークレットの保存に関する他のリンクを参照してください。ただし、暗号化の一部としてユーザーからの値を使用しないでください。

于 2009-12-08T17:13:41.667 に答える
2

暗号化されたデータをデータベースに保存しますか? まず、なぜこれを行う必要があるのか​​考えてみてください。認証されたユーザーのみが自分のデータにアクセスできるように、アプリケーションを作成できる必要があります。

暗号化されたデータを保存する必要があり、(一方向ハッシュとは対照的に) 復号化できる必要がある場合は、Ruby での暗号化に関する多くの情報がここにあります: http://www.example-code.com /ruby/encryption.asp

于 2009-12-08T17:06:30.680 に答える
1

確かに、ユーザー側でデータを暗号化/復号化する必要があります。そうしないと、暗号化されたストレージには意味がありません。ネットワークキャッシュ、さまざまな種類のスワップファイルなどのどこかにプライベートデータのトラックが残っているためです。さらに、データはマンインで傍受される可能性があります。 -中間攻撃。

したがって、おそらく必要なのは、JavaScript ベースのクライアント側暗号化です。トピックはhttp://javascript.about.com/library/blencrypt.htm (Rijndael 暗号化アルゴリズム) で大きく取り上げられており、http://www.movable-type.co.uk/scripts/ には優れた AES 実装ライブラリがあります。 aes.html

フォームを送信する前に ( onClick「送信」ボタン fe のコールバックを使用して) データを暗号化し、サーバーに渡して通常どおり処理する必要があります。

欠点は、そのようなデータで Rails を使用できないことです。クライアント側の JavaScript のみです。

于 2009-12-09T10:45:19.810 に答える
1

機密データを暗号化するためにこれを行う必要がありました。私はストロングボックスの宝石をラップし、それは github にあります: http://github.com/bitzesty/safe

safe gem は、AR 属性の公開鍵暗号化を提供します。

于 2009-12-10T04:11:58.017 に答える
0

一方向ハッシュ アルゴリズムを使用します。パスワードをハッシュし、ハッシュを保存します。次に、ユーザーがパスワードを入力するたびに、入力したパスワードをハッシュし、保存されているハッシュされたパスワードと比較します。それらが同じであれば、あなたはそれらを通過させます。そうでない場合、それらは拒否されます。

于 2009-12-08T17:00:18.380 に答える
0

attr_encrypted は機密データを暗号化するためのソリューションでもあり、Rails の Ruby クラスまたは ActiveRecord、DataMapper、または Sequel で動作します。

https://github.com/attr-encrypted/attr_encrypted

于 2014-09-11T19:04:55.617 に答える
0

一般に、プレーンテキストにできるユーザーのパスワードを保存することはお勧めできません。

通常、MD5 または SHA1 のソルト付きハッシュとして保存されます。

したがって、ランダムなソルトがあり、それをユーザーのテーブルに保存してから、次のようにパスとソルトをハッシュします。

$hash = md5(md5(salt) + pass)

返される可能性のあるパスを保存しないことをお勧めします。保存することをお勧めする唯一の方法は、一方向ハッシュです。

とはいえ、RSA 暗号化など、使用できる暗号化スキームがいくつかあります。このように、アプリケーションは、公開鍵を使用してエンド ユーザーから受け取るユーザーのパスワードを暗号化し、暗号化を解除する必要がある場合は、秘密鍵を使用して暗号化を解除します。この方法でキーを保存するアプリケーションは非常に限られており (別のサイトへのログインを自動的に提供するなど)、通常は嫌われています。

于 2009-12-08T17:05:21.480 に答える