2010-11-25 22 views
0

非常に安全なものを保護するために、一意のIDを作成する必要があります。 Railsの中に今rails - 安全なUUIDを提示するための提案

私がやっている:

uuid = (UUIDTools::UUID.timestamp_create().to_s.gsub('-','') + UUIDTools::UUID.timestamp_create().to_s.gsub('-','')) 

この方法で、あなたの考えは何ですか?スマート?悪い?提案?

おかげ

+0

安全な意味は何ですか?衝突の確率? – Mobbit

+1

'非常に安全な何かを保護するのですか?' o_O –

答えて

2

敵対者が識別子を予測できないようにするには、暗号的に強力な擬似乱数ジェネレータを使用することをお勧めします。ビットサイズの面では、128ビット(または16バイト)が適しています。

# if using Ruby < 1.9: 
require 'active_support/secure_random' 

id = SecureRandom.random_bytes(16) 

あなたの便宜のための方法.hex.base64、および.urlsafe_base64もあります。これらは、単に対応する数のランダムバイトを生成し、次に適切な方式でランダムバイトをエンコードします。たとえば、SecureRandom.hex(16)は、32個の安全にランダムな16進文字を与えます。

+0

私はURLとEMAILアドレスワイルドカードを安全にする必要があります。 – AnApprentice

1

のUUIDは、セキュリティの強さのために設計されていない、と任意のセキュリティ技術の重要な部分であってはなりません。 http://www.ietf.org/rfc/rfc4122.txt - 特にセクション6を参照してください。

+0

ありがとうDMW。何を指示してるんですか? – AnApprentice

2

疑問の文脈がなくても解を処方するのは難しいですが、まともな擬似乱数が役に立ちそうです。 Railsでは、ActiveSupport :: SecureRandomが便利です。

+0

非常にいいです、どのようにActiveSupport :: SecureRandomを使用しますか?あなたは例を挙げることができますか?ありがとう! – AnApprentice

0

v4のランダムUUID(Universally Unique IDentifier)は、ユニバーサルユニークな番号の大きな名前空間でユニークでユニークなIDを生成してデータベースにIDを生成します。

require 'securerandom' 
UUID = SecureRandom.uuid 
関連する問題