Dot-Net

GUID 在可預測性方面的安全性如何?

  • June 16, 2014

我們目前正在使用 .NETGuid.NewGuid()生成啟動碼和 API 密鑰。我想知道這是否會帶來安全問題,因為他們的算法是開放的。

.NET Guid 使用 Win32 CoCreateGuid,我不知道它的內部結構(可能是 MAC 地址 + 時間戳?)。有人可以從第一個 GUID 中得出第二個 GUID,還是可以通過一些聰明的猜測來達到它,或者隨機性是否足夠好,以至於搜尋空間變得太大?

生成隨機密鑰存在衝突問題,它們需要在添加到數據庫之前進行仔細檢查。這就是我們堅持使用 GUID 的原因,但我不確定它們用於這些目的的安全性。

以下是 4 個連續的 UUIDGEN 輸出:

c44dc549-5d92-4330-b451-b29a87848993
d56d4c8d-bfba-4b95-8332-e86d7f204c1c
63cdf958-9d5a-4b63-ae65-74e4237888ea
6fd09369-0fbd-456d-9c06-27fef4c8eca5

以下是其中的 4 個Guid.NewGuid()

0652b193-64c6-4c5e-ad06-9990e1ee3791
374b6313-34a0-4c28-b336-bb2ecd879d0f
3c5a345f-3865-4420-a62c-1cdfd2defed9
5b09d7dc-8546-4ccf-9c85-de0bf4f43bf0

GUID 是非常隨機的,但它們並不打算用作隨機數 - 它們的唯一目的是唯一標識實體,因此它們可以被預測。

改用 System.Security.Cryptography.RandomNumberGenerator

任何密鑰都有一個有限的空間,一個足夠確定的人/組可以並且將生成所有組合。重要的不是關鍵,而是您如何組織它的驗證以及它的授權。如果您完全通過 Guid 操作驗證/授權,那麼這可能不合適,因為可能所有 Guid 都是有效的,您最好使用SeriousBit Elipter 之類的東西。如果您正在使用一種身份驗證機制來記錄已發布特定 Guid 並且它現在已用於啟動,那麼 Guid 並不是一個糟糕的選擇,因為它是一個非常大的密鑰空間。

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