程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2005:About login password hashes

SQL Server 2005:About login password hashes

編輯:關於SqlServer
  目前人們對於SQLSERVER處理登錄密碼的方式存在一些誤解。希望閱讀本文後,你能夠對這些概念有清楚的認識。需要注意的是,只有SQL驗證才會涉及到登錄密碼,WINDOWS驗證模式不需要密碼。 
  
  第一個錯誤概念是SQLSERVER會對登錄密碼進行加密,然後儲存起來。這是錯誤的。SQLSERVER存儲的是經過HASH後的密碼。HASH和加密的不同之處在於其難於反向破解--但是對於加密算法而言,只要掌握密鑰就可以輕易獲得明文。從HASH後的字符中找出原始明文是非常困難的(除非你已經知道了明文)。不選擇加密而選擇HASH的優點是無需保護密鑰(參見之前的文章)。那麼SQLSERVER是如何處理登錄密碼的呢?登錄時,首先對用戶提交的密碼進行HASH處理,然後和SQLSERVER存儲的HASH後的密碼進行比較。如果匹配,則登錄成功。當然,你也可以使用一個錯誤的密碼成功登陸SQLSERVER,只要HASH後的文本和原始密碼的HASH值一致即可。但找出這樣一個不同的密碼是非常困難的(比中樂透要難多了)。同時也要記住,這種算法的強度也依賴於密碼自身是否難猜。 
  
  那麼怎樣去破解登錄密碼呢?主要的方法就是建立一個集合(通常叫做字典),該集合內包含可能和登錄密碼匹配的文本,然後依次嘗試集合中的所有文本,直到成功匹配。字典可以包含日期,各種語言的名詞,數字或特殊字符等等。因此,保護密碼的主要方法就是盡量選擇一個不會出現在字典內的文本作為密碼。如果你想選擇一個好的密碼,可以搜索關鍵字"how to choose a password",你會找到許多很好的建議。即使你認為你已經選擇了一個好的密碼,你也應該浏覽這些內容-----你也許會發現你的密碼並沒有想象中的那麼“強壯” 
  
  邊注:一些文檔將HASH稱之為“難以逆轉的加密”,我不同意這種觀點。我覺得“不可逆轉的加密”本身就很矛盾,因為加密中的“逆轉”是指找到合適的解密密鑰。 
  
  第二個錯誤的概念是:SQLSERVER所用的HASH算法是MS內部開發的。我要闡述一下關於SQLSERVER算法的歷史,但是之前我要聲明:這是錯誤的。SQLSERVER從2000開始使用SHA1算法,6.5本版和7.0版本使用的算法為Snefru。關於6.5版本之前的情況我並不清楚,因為我是在SQLSERVER6.5加入的。    
   
  接下來是對6.5及以後本版的的概述。在6.5版本中,密碼只能是ASCII字符,因此Snefru算法也只應用於ASCII字符。在7.0版本中,Unicode字符也可以作為密碼,因此Snefru算法也應用到了Unicode字符。這是6.5和7.0中的主要不同。在2000版本中,使用的HASH算法改為SHA1,但也向後兼容。SQLSERVER會保存經過HASH後的密碼,同時也會保留一份將密碼轉換成大寫形式的HASH後的文本,這樣就允許大小寫不敏感的密碼。David Litchfield 的寫過一篇長,批評了這個問題。 有一點非常重要:大小寫不敏感的HASH更容易被破解,因為這減小了字典的大小。 基於此原因,SQLSERVER2005沒有采用大小寫不敏感的的做法,這樣更有利於安全。SQLSERVER2005中的另一個改變是刪除了一些系統視圖,HASH後的密碼只對sysadmin可見。 
  
  在應用中,很少會使用到HASH後的密碼。HASH變化後的密碼主要應用於CREATE LOGIN DDL和SP2後ALTER LOGIN DDL中。 除非萬不得已,最好不要使用HASH後的密碼。只有在下面的場景中應使用HASH密碼:應用程序需要在各個服務器間使用相同的密碼。 CREATE LOGIN DLL可以應用於SQLSERVER7.0,2000和2005中,並在2005中支持HASH選項;而ALTER LOGIN DDL只在2000及2005中使用。請注意,SQLSERVER2005不再支持SQLSERVER6.5裡的HASH。SQLSERVER2000中對大小寫不敏感的特性也在2005中移除。如果將SQLSERVER從7.0升級到2005,其秘密存儲的格式會在以下任意情況發生時轉換到SQLSERVER2005的格式:登錄成功或者成功改變密碼(當指定了OLD_PASSword) 
  
  原文地址:SQL Server 2005: About login password hashes    
   
  雖然SHA1早已經被破解了,但是理解SQLSERVER密碼的存儲方式仍然非常重要。因此我翻譯此文,希望對您有所幫助
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved