Lưu ý rằng đây không phải là đơn đăng ký của tôi, đó là ứng dụng tôi đang áp dụng cho khách hàng. Tôi thường đặt câu hỏi như thế này trên https://security.stackexchange.com/, tuy nhiên vì đây là nhiều chương trình liên quan hơn mà tôi đã hỏi tại đây.UuidCreate có sử dụng CSPRNG không?
Đã cấp, RFC 4122 cho UUID không chỉ định loại 4 UUID phải được tạo bằng Trình tạo số ngẫu nhiên giả mã hóa an toàn (CSPRNG). Đơn giản chỉ cần nói
Đặt tất cả các bit khác thành giá trị ngẫu nhiên (hoặc giả ngẫu nhiên) được chọn.
Mặc dù, một số triển khai thuật toán, chẳng hạn như this one in Java, hãy sử dụng CSPRNG.
Tôi đang cố gắng tìm hiểu xem liệu việc triển khai của Microsoft có thực hiện hay không. Chủ yếu là xung quanh cách NET hoặc MSSQL Server tạo ra chúng.
Kiểm tra .NET source chúng ta có thể nhìn thấy đoạn mã này:
Marshal.ThrowExceptionForHR(Win32Native.CoCreateGuid(out guid), new IntPtr(-1));
return guid;
Kiểm tra CoCreateGuid
docco, nó khẳng định
Chức năng CoCreateGuid gọi hàm RPC UuidCreate
Tất cả tôi có thể tìm hiểu về chức năng này là here. Tôi dường như đã đến cuối lỗ thỏ.
Hiện tại, có ai có bất kỳ thông tin nào về cách UuidCreate
tạo UUID của nó không?
Tôi đã nhìn thấy nhiều bài viết liên quan:
- How Random is System.Guid.NewGuid()? (Take two)
- Is using a GUID a valid way to generate a random string of characters and numbers?
- How securely unguessable are GUIDs?
- how are GUIDs generated in SQL Server?
Đầu tiên trong số đó nói:
Một GUID không đảm bảo về sự ngẫu nhiên, nó đảm bảo xung quanh tính duy nhất. Nếu bạn muốn ngẫu nhiên, hãy sử dụng Random để tạo một chuỗi .
Tôi đồng ý với điều này, ngoại trừ trong trường hợp của tôi cho ngẫu nhiên, con số không thể đoán trước bạn muốn tất nhiên sử dụng một CSPRNG thay vì Random
(ví dụ RNGCryptoServiceProvider
).
Và các quốc gia sau (trên thực tế trích dẫn từ Wikipedia):
Cryptanalysis của máy phát điện WinAPI GUID cho thấy, kể từ khi chuỗi các V4 GUID là giả ngẫu nhiên; đưa kiến thức đầy đủ về tình trạng nội , người ta có thể dự đoán trước và sau giá trị
Bây giờ, ở phía bên kia của hàng rào this post từ Will Dean nói
Lần cuối cùng tôi nhìn vào điều này (một vài năm trước đây, có lẽ là XP SP2), tôi bước ngay vào mã hệ điều hành để xem thực tế đang xảy ra, và nó tạo ra một số ngẫu nhiên với máy phát số ngẫu nhiên an toàn .
Tất nhiên, ngay cả khi nó hiện đang sử dụng CSPRNG, điều này sẽ được thực hiện cụ thể và có thể thay đổi tại bất kỳ thời điểm nào (ví dụ: mọi cập nhật cho Windows). Không có khả năng, nhưng về lý thuyết có thể.
Quan điểm của tôi là không có tài liệu tham khảo kinh điển về điều này, ở trên là để chứng minh rằng tôi đã thực hiện nghiên cứu của mình và không có bài đăng nào ở trên tham chiếu bất cứ điều gì có thẩm quyền.
Lý do là tôi đang cố gắng quyết định xem một hệ thống sử dụng GUID cho mã thông báo xác thực cần phải được thay đổi hay không. Từ quan điểm thiết kế thuần túy, câu trả lời là số nhất định có, tuy nhiên theo quan điểm thực tế, nếu chức năng Windows UuidCreate
không sử dụng CSPRNG, thì không có rủi ro trực tiếp cho hệ thống. bất cứ ai có thể rụng bất kỳ ánh sáng về điều này?
Tôi đang tìm bất kỳ câu trả lời nào có nguồn có uy tín để sao lưu.
Câu hỏi kỳ lạ. Giả sử ai đó nói "có".Bạn đang đi trên cơ sở sự an toàn của hệ thống của bạn trên những gì một người lạ trên Internet nói với bạn? Gọi cho Microsoft. –
Không, tôi yêu cầu một số bằng chứng theo cách này hay cách khác. ví dụ. [xem nhận xét của tôi ở đây] (http://stackoverflow.com/questions/816882/how-to-predict-the-next-guid-from-a-given-guid/817150#comment58381222_817150). – SilverlightFox
Lấy Windbg và bước vào cuộc gọi và xem những gì nó làm. Sau đó, cho ít nhất một os tại một thời điểm bạn sẽ biết. Các hướng dẫn vẫn sẽ không phù hợp với những gì bạn đang sử dụng chúng, nhưng bạn sẽ có ít nhất bị trầy xước ngứa này. –