6

に関する Microsoft のドキュメントにNEWSEQUENTIALIDよると、NEWSEQUENTIALID の出力は予測可能です。しかし、予測可能性はどの程度予測可能ですか? によって生成された GUID があるNEWSEQUENTIALIDとします。

  • 次の値を計算しますか?
  • 前の値を計算しますか?
  • 最初の値を計算する
  • GUID をまったく知らなくても、最初の値を計算しますか?
  • 行数を計算する たとえば、整数を使用する場合/order?id=842、アプリケーションには 842 の注文があることがわかります。

以下は、私が行っていることと、さまざまなトレードオフについての背景情報です。

整数よりも GUID を主キーとして使用することのセキュリティ上の利点の1 つは、GUID が推測しにくいことです。たとえば、データベース内の最初のユーザーが管理ユーザーである可能性が高いため、ハッカーが/user?id=845にアクセスしようとするような URL を見たとします。/user?id=0さらに、ハッカーは反復処理を繰り返して、/user?id=0..1..2すべてのユーザーをすばやく収集できます。

同様に、整数のプライバシーに関する欠点は、情報が漏洩することです。/order?id=482は、実装以来、Web ショップに 482 件の注文があったことを教えてくれます。

残念ながら、主キーとして GUID を使用すると、よく知られたパフォーマンス上の欠点があります。この目的のために、SQL Server はこのNEWSEQUENTIALID関数を導入しました。この質問では、 の出力がどの程度予測可能かを知りたいと思いNEWSEQUENTIALIDます。

4

4 に答える 4

4

ほとんどの場合、newsequentialid現在の値を取得し、最初の 16 進数のペアに 1 を追加することで、次を予測できます。

言い換えると:

1E 29E599-45F1-E311-80CA-00155D008B1C

続いて

1F 29E599-45F1-E311-80CA-00155D008B1C

続いて

20 29E599-45F1-E311-80CA-00155D008B1C

場合によっては、シーケンスが新しい値から再開されることがあります。

だから、それは非常に予測可能です

NewSequentialIDWindows 関数のラッパーです。UuidCreateSequential

于 2014-06-11T08:50:49.120 に答える
3

基礎となる OS 機能はUuidCreateSequential. この値は、ネットワーク カードの MAC アドレスの 1 つとOS ブートごとの増分値から導出されますRFC4122を参照してください。SQL Server は、結果を適切に並べ替えるためにバイト シャッフルを行います。したがって、価値はある意味で非常に予測可能です。具体的には、値がわかっている場合は、同様の値の範囲をすぐに予測できます。

ただし、 に相当するものを予測することはできず、ストアが少なくとも 482 個のアイテムを販売したid=0ことを意味することも予測できません。52DE358F-45F1-E311-93EA-00269E58F20D

唯一の「承認された」ランダム生成はCRYPT_GEN_RANDOM(これはラップしますCryptGenRandom) ですが、これは明らかに恐ろしいキー候補です。

于 2014-06-11T10:05:58.230 に答える