我有一個NodeJS服務器,我需要從客戶端散列密碼。由於NodeJS應用程序沒有被編譯,我可以用一種語言編寫哈希進程,從中生成一個處理從我的NodeJS應用程序調用的進程的二進制文件,或者如果服務器受到攻擊,犯罪者能夠逆向工程處理哈希處理的二進制文件,就像從我的NodeJS應用程序的JS中讀取一樣簡單。使用NodeJS服務器散列文本的安全性
1
A
回答
1
散列 - 與加密相反 - 是一個單向過程。從純文本中獲取散列很容易,但除非您碰巧猜測散列文本是什麼,否則幾乎不可能做到相反。
因此,您不需要保持哈希算法的祕密。你不應該這樣做,因爲所有強者都是公開的,而且很難創造你自己的。
例如,SHA-256算法是公開的。但嘗試猜我剛纔散列到:
07123e1f482356c415f684407a3b8723e10b2cbbc0b8fcd6282c49d37c9c1abc
你應該可以猜到它,如果你嘗試(請評論,如果你能猜出它!)因爲我的文字是有目的很簡單,我用了一個故意快速哈希函數 - 要想清楚,你需要保持幾件事情:
- 你的散列算法需要甚至強烈的算法強
- 您的密碼必須是難以猜測
- 你的哈希函數應該儘可能慢(這可能聽起來像是一個奇怪的軟件要求 - 參見下面的更多信息)
SHA-1或SHA-2速度很快,因此不足以使密碼安全,即使隨機鹽。但是,您可以使用散列算法以及任意複雜的計算(例如bcrypt)來使猜測速度較慢,但始終是可能的。
此外,使用隨機鹽,使彩虹表無法使用。
您希望使用慢速,CPU密集型算法儘可能慢地進行猜測,同時仍然可以正常運行。例如。除鹽之外,bcrypt(不使用SHA-1或SHA-2,而是Blowfish)具有一個成本參數,您可以使用該成本參數使得生成的函數儘可能成本高昂,從而使得猜測速度更慢它毫無意義。例如。如果你能夠持續100ms進行一次迭代,那麼等待真實用戶進行密碼驗證的時間並不長,但很快就會很快被攻擊者很快猜出密碼 - 每秒10次嘗試每秒少於100萬次。這是一個類似於您可以在一秒鐘內計算多少SHA-256哈希值的數字。
欲瞭解更多信息,請參閱:
- https://en.wikipedia.org/wiki/Cryptographic_hash_function
- https://en.wikipedia.org/wiki/Key_derivation_function
- https://en.wikipedia.org/wiki/Rainbow_table
- https://en.wikipedia.org/wiki/Bcrypt
- https://en.wikipedia.org/wiki/PBKDF2
感謝zaph和LukePark以瞭解如何改進此答案的意見。
我仍然在等待任何人想我的散列消息來證明我的SHA-1是不夠的散列密碼的點。 提示:它很短。
相關問題
- 1. Debian服務器安全性
- 2. NodeJS服務器 - 服務器安全通信
- 3. 服務器體系結構/安全性文件服務器
- 4. Couchbase服務器的訪問安全性
- 5. 使服務器cookie安全
- 6. 訪問Sulu前端的安全服務:散列用戶密碼
- 7. 網站安全性與服務器安全性有多大?
- 8. 基本的服務器安全
- 9. Mule spring基本安全失敗,用戶服務屬性文件
- 10. .NET Web服務安全性
- 11. 安全的文件服務器
- 12. 使用PHP 5.5的散列函數來增加安全性
- 13. 如果在服務器(nodeJS)上運行此JavaScript代碼,安全性或不安全性如何?
- 14. 使用OData安全服務
- 15. 使用http訪問AJAX和服務器安全性access-control-allow- *
- 16. Python33 - 使用BaseHTTPRequestHandler提高服務器安全性
- 17. 使用集成安全性連接到SQL服務器
- 18. 如何使iPhoneHTTPServer安全的服務器
- 19. 更改服務器上文件權限的安全性
- 20. Mobile - API服務器安全
- 21. RavenDb服務器安全
- 22. Windows服務器安全
- 23. CentOS服務器安全
- 24. 服務器端安全
- 25. 使用NodeJs與Firebase - 安全
- 26. 使用POST的電子NodeJS服務器到服務器通信
- 27. 使用導入的NodeJS服務器
- 28. 使用純文本的散列作爲加密密鑰安全嗎?
- 29. 使用R從安全FTP服務器下載文件
- 30. 在共享服務器上安裝nodejs
密碼應該是*哈希*未加密,通過確保密碼實際上不存在於後端的任何位置,這大大降低了安全性問題。 –
謝謝你的注意,亞歷克斯。這是我打算在我的問題中表達的過程。我已經更新了我的問題。 – nicktendo
不要編寫自己的散列過程,使用SHA2或3實現。你用鹽和散列密碼,所以如果有人抓住你的數據庫,他們不能逆向工程的實際憑據。試圖隱藏算法不提供安全性 - 使用足夠強度的經過驗證的算法對密碼進行醃製和哈希處理是更安全的方法。 – dbugger