Dot-Net

是否可以信任 guid 的安全性,或者如果系統可以強制生成許多已知的 guid,它們是否可以預測?

  • May 29, 2013

開始並定義 guid,我使用的是 .net 框架 Guid 這在某種程度上是一種假設情況 使用者在執行特定操作時生成了 guid。每個使用者都可以看到自己的嚮導。如果一個使用者要知道另一個使用者的 guid,就會有安全隱患。

如果我們假設一個使用者無法竊取另一個使用者的 guid 並且只能猜測它,那麼這個系統有多安全?

我知道盲目猜測嚮導是不可能的。即使他們有一百萬個成功值,他們仍然只有 10^20 的成功猜測機會

我擔心可能存在問題的地方是指導預測。使用者能否生成大量請求,看看他得到的 guid,知道 .net guid 生成公式會大大提高他的猜測機率嗎?能否將這些可能性降低到成為安全問題的程度?在那種情況下,如何以獨特的不可猜測的方式生成密鑰?

我請任何提到猜測/碰撞機率的人為其添加一些硬性含義。定義賠率的確切數字,或類似“它可用於儲存帳戶數據,但不能用於儲存敏感數據”之類的東西

編輯

這個問題似乎很好地進入了我最初試圖用這個問題探索的領域 是 GUID 是(臨時)加密的好密鑰嗎?

GUID/UUID 旨在生成 128 位數字,主要用作唯一的 ID(用於所有意圖和目的)。

UUID 並非旨在生成加密強隨機數序列,如果您想要最大的不可預測性,那麼加密強隨機數序列正是您想要的。為此,.NET 為您提供了 RNGCryptoServiceProvider - 從一開始就設計為可以通過算法手段合理實現的不可預測性,那麼為什麼不使用它呢?

例子:

byte[] GenerateRandomBytes()
{
  byte[] key = new byte[16];

   System.Security.Cryptography.RNGCryptoServiceProvider c =
       new System.Security.Cryptography.RNGCryptoServiceProvider();

   c.GetBytes(key);

   return key;
}

引用自:https://stackoverflow.com/questions/4799117