我聽說全國各地都有人警告說,出於安全原因,不要依賴語言的random()
函數來生成隨機數字或字符串序列。 Java甚至有一個SecureRandom
類。爲什麼是這樣?爲什麼有些隨機()函數被認爲「不安全?」
1
A
回答
3
當人們談論關於預測隨機數發生器的輸出,他們甚至不需要獲得實際的「下一個數字」。即使像注意到隨機數不均勻分佈,或者它們從不連續兩次產生相同數字,或者「始終設置位5」這樣的細微事情,可以在基於猜測轉變攻擊方面有很長的路要走一個「隨機」數字需要花費數年時間,而不是數天。
通常也有一個折衷。如果沒有特定的硬件來完成這項工作,快速生成大量的隨機數字可能非常困難,因爲計算機沒有足夠的「隨機性」,因此必須將其僞造。
如果你沒有使用隨機性的安全性(密碼學,密碼等),而是模擬或數值工作,那麼如果它們是可預測的,它並不重要,重新統計學隨機。
0
可以預先確定的僞隨機數可能會導致易受random number generator attack影響的安全漏洞。
1
幾乎每個隨機數發生器都是'僞隨機',因爲它使用隨機數或可預測公式表。種子有時用於在特定點「開始」隨機序列,例如, seedRandom(定時器)。
這在BAsIC編程的日子裏特別流行,因爲它的隨機數發生器始終以完全相同的數字序列開始,使其無法用於任何類型的GUID生成。早在當天,Z-80微處理器就有一個真正的隨機數發生器,雖然它只是一個介於0到127之間的數字。它使用了處理器循環功能,並且是不可預知的。
0
隨機數的可預測性是一個大問題。大多數「隨機」函數從時間推導出它們的價值。給定一組正確的條件,你最終可以得到兩個相同數值的「隨機」數字。
於Windows .NET中的世界CPRNG(加密安全僞隨機數生成器)可以通過System.Security.Cryptography.RandomNumberGenerator底層的Win32 API 發現在Linux中有一個隨機的「設備」
相關問題
- 1. 爲什麼有些函數被調用
- 2. 爲什麼「strcat」被視爲「不安全」?
- 3. 爲什麼這些5(6?)字符被認爲是「不安全的」HTML字符?
- 4. 爲什麼這些逆變參數類型被認爲是安全的?
- 5. 爲什麼$ _REQUEST變量被認爲是不安全的?
- 6. 爲什麼這被認爲是Sharepoint中的「不安全更新」?
- 7. 爲什麼strtok()被認爲是不安全的?
- 8. 爲什麼我的javascript不被認爲是安全的?
- 9. 爲什麼fflush()不被認爲是安全的?
- 10. 爲什麼Django函數django.views.static.serve()不安全?
- 11. 爲什麼我的安全iframe被報告爲不安全?
- 12. 爲什麼認爲加密更安全?
- 13. 爲什麼不隨機()隨機?
- 14. 爲什麼SSL被認爲是安全的?
- 15. 爲什麼createServer()被認爲不是一個函數?
- 16. 爲什麼這不被視爲默認的構造函數?
- 17. 爲什麼我的隨機數字不那麼隨機?
- 18. 爲什麼結果總是101?我認爲結果應該是隨機的,因爲不是線程安全的
- 19. 爲什麼數字不會隨機?
- 20. 哪些瀏覽器版本被認爲太不安全?
- 21. 這爲什麼不安全?
- 22. 爲什麼Generics.Collections.TObjectList.List不安全?
- 23. __caller__爲什麼不安全?
- 24. 爲什麼<style>塊被認爲是不安全的標記?
- 25. 爲什麼這個函數不會生成隨機數字?
- 26. 爲什麼VSCode全新安裝認爲它有TypeScript?
- 27. 爲什麼不是Pythons randint函數實際上是隨機的?
- 28. 爲什麼函數沒有被調用?
- 29. 如何通過PayPal API憑證安全地使用PHP(以及爲什麼這不被認爲是安全的)
- 30. 爲什麼在這些PHP函數中不需要全局$ var?
所以像'sha256(str(random.randomint()* 1000000000)).hexdigest()'就是要求安全威脅嗎?這將通過生成一個隨機字符串salt並將其包含在散列輸入中來緩解嗎? –
我對加密技術不夠好,不敢自信地說,但我認爲這取決於特定實現如何生成隨機數。 (例如,我認爲默認的python是確定性的)。鑑於散列輸出,鹽對於讓人們更難猜測輸入是有用的,但與隨機數的優勢有一點不同。 –