現在的 SSL 加密技術,預計多少年以後會被輕易破解?
一般來說這樣的加密手段,能夠保證多久的應用期?過往的加密技術到輕易破解平均都經歷了幾年?
數百萬網站和數十億網民都依靠 SSL 保護敏感數據如密碼、信用卡號碼和個人信息的傳輸,但最近泄漏的機密文檔顯示,美國國家安全局(NSA)會記錄大量互聯網流量,儲存加密數據以用於以後的密碼分析。 via SSL,今天攔截明天解密
準確地說,SSL(含TLS)是一種安全協議,不是一種具體的密碼演算法。如果要談論破解的問題,會受到所使用密碼演算法的影響。再次要補充一下,關於「破解」這個辭彙的含義,請參看另外一則問題中的答案《理論上可以通過除窮舉法以外的方法破解不可逆的加密演算法嗎?》。另外結論在最後一段,可以只看加粗部分和最後結論。
對於密碼演算法,已經進行了非常多年的研究,尤其是網路時代來臨之後,對於使用密碼演算法對信息安全進行保護的研究也越來越多。對於密碼學家而言,一個很重要的任務便是創造一種足夠健壯的密碼演算法使得沒有人能夠破解。但是密碼學家們也清晰地認識到,一種絕對安全的密碼演算法並不是那麼容易創造的。目前已知演算法中,只有一種演算法Random Oracle能夠達到絕對安全,即攻擊者即使擁有無限的存儲能力、計算能力和時間也無法破解。關於這種演算法的更多信息見《這樣的密碼有辦法破解嗎?》
既然絕對安全難以達到,密碼學們退而求其次,尋求一種相對安全的方法。這種相對的安全大致可以這樣子表述:破解一則消息所需要的成本(計算機、人力、電能等等)遠遠超過這則信息本身的價值,那麼我們認為這是相對安全的;或者破解一則消息(比如情報)所需要的時間,遠遠大於這則消息所需要保密的期限,我們也認為這是相對安全的。
現代密碼學的里程碑是1977年由IBM的研究人員Horst Feistel等人提出的Lucifer演算法,該演算法後來被美國國家安全局採納為一種公開通用的商用密碼演算法標準DES。該演算法是一種分組加密演算法,使用56位的加密密鑰對64位的密文進行加密。由於密鑰長度很短,對於DES的攻擊很早就出現,並且在1999年的時候,由EFF(Electronci Frontier Foundation)領導研發的DES破解機器Deep Cracker就已經可以在一天之內(22h15min)破解DES的加密密鑰。[1]
密碼學是一門雖然很古老,但是隨著計算機科學的發展才發展起來的學科,因此密碼學家們當然清楚計算機性能的飛速發展對於破解密碼的影響。像DES這樣在未來會隨著計算能力發展而被輕易破解的演算法並不是一種好的演算法。一個密碼演算法在設計的時候會使用一些人類難以解決的問題為基礎,同時這些演算法還會有一個關於問題規模的一個參數,使得問題的規模容易擴大,保證在更長的一段時間內可以使用。以下舉一個例子。
著名的公鑰密碼演算法RSA,是基於大整數因子分解這個難題而設計的,該演算法由R.L. Rivest、A. Shamir和L. Adleman於1977年提出。對於RSA的破解方法,其中一種就是針對公鑰中的一個參數進行因子分解(其中p和q均為質數),得到p和q,從而推算其他的參數和私鑰。業已證明,其他可行的破解方法不會比直接對n進行因子分解來得簡單。[2]
對於因子分解,最基本的我們都會使用以下程序進行計算:// C風格偽代碼,假定int擁有無限精度
int first_factor( int n )
{
if( n % 2 == 0 ) return 2;
for( int i = 3; i &< sqrt(n); i += 2 )
if( n % i == 0 ) return i;
return 0;
}
並且我們不難分析出,該演算法所需要的時間複雜度為。我們換一種更常見的方式表示,n是RSA密鑰中的一個重要參數,我們使用這個參數的長度來描述密鑰的長度,也就是我們常說的多少位的密鑰。顯然,如果我們稱n為x位(二進位位),則有,破解的複雜度關於密鑰長度的表示則變為,在描述演算法複雜度的時候我們也常常忽略係數寫作。
這種複雜度是關於問題規模(參數n的位數)的指數,我們把這類問題成為NP問題,也就是計算的複雜度並不能表示為多項式形式的複雜度,而往往只能表示成指數形式的複雜度。如文的式子,當將n的長度增加2位,即x加2,我們可以容易算出,計算的複雜度將增加一倍。現有RSA的密鑰常用1024位,若升級為2048位,計算的複雜度將增加為倍。當然,性能最好的分解因子演算法並不是這個複雜度,但是也仍然是NP問題,複雜度和規模也是指數關係。
通過這個例子我們可以知道,在僅僅提升計算能力,而對演算法弱點的研究沒有突破的情況下,我們可以通過增加演算法的密鑰長度使得計算的複雜度迅速提升,而遠遠超過現有最強的計算能力。而增加密鑰的長度,對原來的演算法幾乎沒有影響。因此,對於加密演算法的破解,並不是依賴提升計算能力而進行更快的運算就可以的,對於演算法本身弱點的分析從而進行破解才是能夠是演算法真正失效的破解途徑。因此,在對整數因子分解問題沒有突破性發現的情況下,再強大的計算能力都難以撼動RSA的牢固位置,因為只需要簡單地提升密鑰長度就可以使得當時最強大的計算機在數萬年內都無法破解。
當然,通過把加密數據記錄下來,等到以後計算能力強大以後再進行破解也是一種看似不錯的方案。當今最快超級計算機天河2號的最大運行速度為55PetaFlops[3],大約為72Peta,也就是天河2號破解DES還是需要好幾十秒的。以當今最強的計算能力,DES尚不能做到秒破,如果是對於美國安全局這樣子大規模記錄的加密數據,各自使用不同的演算法進行加密,每一個破解都需要幾十秒對於那麼大規模的數據而言也是需要消耗非常多的時間。個人認為,記錄這些加密流量等著以後破解,還不如現在用超級計算機來為根證書的RSA公鑰做因數分解來得靠譜,畢竟這算是一個一勞永逸的事情。或者通過植入根證書的方法,進行SSL/TLS的中間人攻擊,也是一種很好的竊取加密數據的方法,該方法的實施可參見《什麼是 TLS 中間人攻擊?如何防範這類攻擊?》。
世界上最大的安全問題在於人。技術上達不到的問題,通過行政手段可以很容易的解決,PRISM計劃也反應了,美國有關部門通過跟Google、Facebook之類的大型互聯網供應商直接索取用戶信息,是一個多快好省的方法。信用卡號碼、密碼這些個人信息在政府眼中根本都是無所謂的東西,根本不用使用技術手段,行政手段就能解決。至於記錄流量,我覺得更主要的是針對其他國家和組織這些行政手段無法達到的地方,需要破解這些通信量,記錄下來慢慢破解確實是一個很好的方法。
綜上所述,在未來比較長的時間範圍內,大約十幾二十年,在不考慮量子計算和對密碼演算法破解分析沒有太大突破的前提下,不大可能通過計算能力提升而使得現有的密碼演算法得到輕易地破解。
[1] Data Encryption Standard[2] Rivest, R.L., Shamir, A., Adleman, L. (1978) A method for obtaining digital signatures and public-key cryptosystem. Communications of the ACM 21.2(1978): 120-126.
[3] June 2013 | TOP500 Supercomputer Sites
- 目前主要使用的是 TLS,它是在 SSL 3.0 的基礎上發展起來的,其中 TLS 1.0 相當於 SSL 3.1。
- TLS / SSL 的作用是對傳輸的信息加密並簽名,保證第三方無法獲得被解密的信息和偽造其中一方向對方發送信息。
- 其中,TLS 1.0 建議使用的加密演算法是 RC4,TLS 1.1 和 1.2 建議使用的是 AES。
TLS 1.0 採用 RC4 是為了應對 BEAST 攻擊(https://en.wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack),不幸的是又出現了 RC4 攻擊(https://en.wikipedia.org/wiki/Transport_Layer_Security#RC4_attack)。
而關於 AES,目前沒有比窮舉法效率高很多的破解。簡單來說,採用 256 位密鑰的 AES 加密,要嘗試 2 的 256 次方次運算才能猜出密鑰,破解演算法能減少到2
的 254.4 次方(Solidot | 新研究縮短破解AES密鑰時間)。而 AES 加 / 解密的過程是很慢的,就算每秒能對 256 位元組的信息計算 1 萬億次解密,也需要約 1.84e+57 年才能算出來,比宇宙的年齡不知道要長多少個數量級。
如果你使用 Chrome 瀏覽器,可以分別訪問 https://en.wikipedia.org/ 和 https://www.google.com/,然後點一下地址欄左側的小鎖,切換到「連接」標籤來查看這些信息。 - TLS 1.0 和 1.1 採用的簽名演算法主要的是 HMAC-SHA1 和 HMAC-MD5,TLS 1.2 採用的是 HMAC-SHA256。
簽名的作用是標記一條信息是由對方發布的。如果偽造用戶發送一條消息,那麼在不知道密鑰的情況下,是不能產生正確的簽名的。而簽名演算法通常被認為是安全的,它會產生一個與密鑰相關的散列,攻擊者既不能通過簽名還原出原文,也不能重用該簽名發起新的信息。
這些簽名演算法的安全性並不完全依賴散列演算法的安全性,因為還和密鑰相關,還可在消息里附加時間戳、一次性的隨機串等來防止重複攻擊。因此即使一個演算法被證明是可以產生碰撞的(如 MD5),可以用彩虹表還原部分原文,也無法偽造出正確的簽名和還原原文。 - 目前最大的安全漏洞是中間人攻擊。要做到這點,你需要劫持用戶的 DNS 和證書,讓用戶訪問偽造的網站,並且相信你給的證書是真的。
比如眾所周知的某國可以把敏感的域名解析到其他地址,再自己提供一個偽造的證書,還是國家頒發的。
不過也有不注重安全的網站,允許隨意註冊該站的郵箱。攻擊者可以註冊有特殊用途的郵箱,例如 admin@example.com,然後就能申請到一個 http://example.com 域的合法證書了。攻擊者再去公共場合搭個免費的 WIFI 給別人用,就能拿到一堆信息了。而如果網站壓根不用 HTTPS 的話,那任何信息都能拿到。 - 或者更簡單暴力點,既然 TLS 不易攻破,那就想別的辦法拿到密鑰。例如拿到該伺服器的訪問許可權,或者直接查機房。
綜上,TLS 所依賴的演算法本身可以視為是安全的,但遭不住 ISP + CA 的聯合攻擊。
對SSL本身演算法的破解恐怕真的要到量子計算機出現才有可能了。
不過現在真正對SSL系統進行攻擊的都不是從演算法層面,而是公鑰分發層面,就是對PKI (public key infrastructer)的攻擊。比較著名的就是heartblead來偷私鑰。另外在PKI中,不是說發一次公鑰就萬事大吉了,往往還要對公鑰進行召回和重新分發(比如說公鑰過期了,或者認為私鑰可能被泄露了要重新搞一個新的公鑰)。這個過程直到2014年還是人工進行,就是CA處由管理員進行。而且更有意思的是,管理員周末休息!!你沒看錯,所以在周末召回和重新分發的比例大幅度降低。具體數據請參見2014年的IMC文章:http://www.umiacs.umd.edu/~tdumitra/papers/IMC-2014.pdf。
所以說XX秒攻破SSL是實際存在的,只不過都不是從演算法層面。等量子計算機出來吧。。不過現在都已經有post-quantum cryptography了
修正補充一下@Clones說到的一些內容現在的一切基於數學的密碼都是基於數學難題比如大整數分解/NP問題等產生的,這些問題面對量子計算機而言幾乎都是紙糊的,所以在量子計算機出現的前提下,現有的所有基於數學的加密機制都沒有安全性可言,當然,目前量子計算機只不過存在於理論中,前不久谷歌購買的量子計算機實際上也不是真正的量子計算機,無法執行量子計算機特有的解密演算法
揭秘Google量子計算機 谷歌購買了一台D-Wave_存儲
好的,那麼我們暫時將還在潘多拉的盒子裡面的量子計算機放在一邊,單純說說現在的加密的安全性
作為一個安全科班出身的同學,我很負責的說,安全性,非常,非常,非常的高
這樣說個概念吧,現在別說AES了,單單一個56位的DES說是可以暴力破解,可是實際的成本也是非常非常高的
攻擊 DES 的主要形式被稱為蠻力的或徹底密鑰搜索,即重複嘗試各種密鑰直到有一個符合為止。如果 DES 使用 56 位的密鑰,則可能的密鑰數量是 2 的 56 次方個。隨著計算機系統能力的不斷發展,DES 的安全性比它剛出現時會弱得多,然而從非關鍵性質的實際出發,仍可以認為它是足夠的。
我不太記得2001年1天破解DES用的是什麼方式,但是如果我沒記錯的話,應該藉助的是超級計算機或者是互聯網雲計算這樣的方式,反正即使現在的2013年也絕對不是一個普通人就可以用手頭的資源花費1天的時間破譯出一個DES密碼。
更何況還有雙重DES,三重DES,N重DES,更別說AES了
密碼學所使用的數學難題的難度絕對都是遠遠超過當前計算機運算能力的數量級的,我說的是數量級就是100次當前計算能力和100000次所需計算能力這樣的質的區別,除非出現演算法上的突破或者是技術上的飛躍(比如量子計算機),否則這根本就不值得去擔心。
並且,以上說的這個等級的加密都還局限於「普通民用級別」,對於安全要求更好的企業級的安全演算法(大部分都是多種加密的融合就比如這裡提到的SSL)更是難上幾個數量級。
我更不會說用於絕密級的加密技術比如軍方啊保密局的啊
實際上銀行的U盾系統也是通過基於數學的安全體系,如果真的存在哪怕一丁點兒的破譯可能性損失就絕對是非常非常驚人的。(我花費1年時間破譯了郭美美的也夠我吃一輩子= =)即使是一種花費1億美金花費3年時間才能破譯一個加密系統的方法,那麼也會有各國的情報機構大力投入的。
你聽說過嗎?
現在收集以後破譯,可能嗎,的確可能,但是信息的時效性絕大部分情況下遠遠小於加密方法安全的時效性。
OVER稍作了些補充修改,其實更準確和詳細的內容,點到那些維基的詞條里都有的。
-----------------------------------------------
SSL(安全套接層)在各個層次上,把基本的密碼手段都使用了。
密鑰交換使用了非對稱公鑰系統,比如RSA,其安全性是數學特性提供的,在通常使用的1024位密鑰的規模下,目前的計算機基本是沒辦法在有效期內破解。未來可能可以使用量子計算機破解,演算法已經研發出來了,但是硬體似乎還不能實用。所以目前還是安全的。
密鑰交換完了,通信使用的則是AES等對稱加密系統,具體用什麼原理設計我是不清楚,原則反正是一個函數,對明文進行混淆、置亂。以AES為例,其在2001年替代DES,目前還是安全的。而DES(數據加密標準)則是上世紀七十年代出現,在1998年以一台250,000美元造價的機器可在兩天多一點的時間內找到密鑰,而到了2006年,用一台10,000美元的機器便可在一天內破解DES的密鑰了。
在各個環節的身份認證問題上,通常要利用hash散列演算法,著名的MD5的原理在90年代初出現,作為最後的改進版本,MD5在04年被證明可以破解,後續的研究已經基本確定了MD5的死刑,目前基本只用於數據效驗的場合(比如BT下載大文件的時候)。而目前主要使用的散列演算法應當是SHA,其中最早的版本SHA-0在1993年發布,大約十年後基本被破解。SHA-1在1995年發布,也大約十年後出現了破解方法。SHA-2則雖然遭到嚴重質疑,但是還沒有破解方法出現,因此美國國家標準與技術研究院通過公開招募的方法選定了新的SHA-3作為備選。
上面說的很多破解方法出現的時間其實很多只是存在了可以破解的例子,時間複雜度上仍然是不能忍受的。但存在方法就存在改進的可能性,因此也就在提醒人們要更新密碼演算法了。一個密碼演算法大概從來也不敢保證能在多長時間內不出現破解方法,只能是在出現了破解之後趕緊進行改進了。
目前網路上流傳的數據的加密方法即便在多年後被破解了,基本上也已經失去意義,而系統也早已更換了新的密碼演算法了。
不過密碼演算法不是安全協議的全部,即便密碼演算法全部都是可靠的,安全協議也可能存在漏洞被攻破。
答案是兩年
現在因為POODLE問題,是SSL v3.0協議中的缺陷,而不是簡單的bug,所以無法修復
業界已經全面開始拋棄SSL3.0了
研究人員將在Blackhat 2013上講解如何30秒破解SSL-
FreebuF.COM
如果確實如此,那麼就是今年。
前幾天看新聞,美國研究人員30S 破解了SSL。
http://www.myhack58.com/Article/html/1/4/2013/39484.htm
上面說的都是暴力破解,其實真正要去破解密文,暴力破解的效率是最低的。
傳統加密由4部分組成:明文,密鑰,加密演算法和加密後的密文。現實中破解一套加密系統一般都至少要知道其中的兩樣,如密文和演算法,求原文和密鑰,這是最困難的一種情況。最理想的情況是知道其中三樣,明文、密文、和演算法或密鑰,求剩下那一樣。破解了整個系統之後再拿著密鑰和演算法去破解其它密文。這是一般傳統加密,如果要破解HASH這種不可逆的加密方式,除了某些特殊情況,否則拿著密文求明文基本上是不可能的。
扯了這麼多回到主題上來。對於SSL來說,假設你知道密文和演算法,想倒推出密鑰和明文,這就是上面所說最困難的破解環境之一。樓上各位已經把SSL加密理論闡述的很清楚了,暴力破解的成本相當之高,而且SSL的密鑰在每次與CA伺服器認證之後的session里都不一樣,破解出來的密鑰只能用於破譯當個session的密文,所以若非有重要情報,沒事閑著去破譯某網民和媳婦的對話這種事一般沒人干。
如果真要破譯SSL密文,一般會用其他手段得到加密系統的第三部分,即一段明文,或密鑰。明文可用木馬一類的程序通過鍵盤紀錄(key stroke)得到;密鑰可以通過偽裝(spoofing)CA得到,然後再建立完整的加密系統,從而破譯密文。
總而言之,沒有絕對安全的保險箱,就看保險箱里有多少錢。在正確使用的前提下,SSL本身是安全的。樓上已經說了很多了,演算法基本上不可破解,但是安全是一個整體的概念,只要一個點被突破整個防線就失守了,而這個點一般不會是SSL的演算法,文章所說
保留的加密數據可以通過各種方法解密,例如法庭命令,社會工程,網站攻擊,乃至密碼分析。如果得到了密鑰,所有相關網站的歷史流量可以一次性解密
所謂的密鑰應該就是指網站證書的私鑰,由於SSL的對稱加密演算法及其密鑰是通過證書的公鑰加密的,因此只要知道了證書的私鑰,根本不需要破解其加密演算法就可以直接解密了,對於國家機關來講,利用法庭命令或社會工程得這個密鑰還是挺簡單的,對於一些黑客直接攻擊網站獲取私鑰也很可能,反倒是直接破解演算法難度非常大。
目前的答案中,還沒有涉及加密系統設計目標的一個要素:時效性。加密系統的設計目標是拖延解密者足夠長的時間,而不是永遠阻止解密者。所謂「今天截獲、明天解密」,本身就不算是攻破加密系統。再如攻破根結點證書的私鑰:任何證書都是有時效的,只要攻破的時間長於時效,就是沒有意義的。所謂依靠計算能力增長來破解加密,本身就不是加密系統要防禦的。
別總想著破,破是最後手段!首先得考慮能不能繞。能翻牆或者爬窗進去的幹嘛一定要撬鎖?現在SSL已經可以通過中間人攻擊繞過了!
其實即使量子計算機製造出來了,也不一定能解密今天記錄的密文。量子計算可以很快分解RSA沒錯,但如果使用完全正向保密的話,無法回溯解出AES密鑰。而我聽說量子計算對AES的破解其實不那麼高效,AES256在量子計算機眼裡相當於現在的AES128。所以用TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384之類的還是很安全的。
Forward secrecy
2014年4月8日
看了很多答題者的回答,大家答得都很好,演算法解釋得也很清楚。如果單純要破解SSL或者TLS中的加密演算法,確實需要很久,等到破解之前,其實演算法就會被廣泛換掉了,正如當年換掉的DES,RC4和MD5.
但問題是,演算法設計地再好,還是需要程序員實現的。理論與實踐中間的鴻溝,有時候是很難擺平的。且不說程序員寫C/C++時候本身出的錯誤(buffer overflow),由於密碼學的難懂,有時候程序員也可能在實現演算法的時候沒有完全按照理論的要求。這些都會導致大家使用的庫和軟體中的漏洞。例如之前出現的Heartbleed 攻擊,安全會議中各種SSL/TLS 實現中的side channel,已經最近很火的Intel SGX也被學者發現大量的側信道攻擊還原硬體保護的私鑰。
個人認為,在擔心加密演算法和技術被破解之前,大家更應該擔心我們使用的各式代碼庫和軟體中的漏洞和側信道。這些漏洞可能才是黑客,NSA等等手中的王牌。
SSL是一種協議,它並不是加密演算法。SSL協議是堅不可摧的(當然,這個是在系統證書可靠的情況下),理論上不存在被破解的可能。
因為它只是一個協議,它有很多種不同的實現(比如openssl)。這些實現可能存在漏洞,被黑客利用即可攻破ssl。比如之前openssl的Heartbleed漏洞。
SSL協議加密數據時所採用的加密演算法都是可配置的,目前普遍使用RSA + AES-256方式加密數據,保證數據安全。這些加密演算法在未來幾年內都不可能被暴力破解。
居然沒人討論黎曼猜想!
使用了SSL/TLS來對數據包進行加密的https在理論上是可以抵禦MITM,但是由於開發過程中的編碼不規範,導致https可能存在MITM攻擊風險,攻擊者可以解密、篡改https數據。關於開發建議提幾個:
1) 建議自定義實現X509TrustManager時,在checkServerTrusted中對伺服器信息進行嚴格校驗
2)在重寫WebViewClient的onReceivedSslError方法時,避免調用proceed忽略證書驗證錯誤信息繼續載入頁面
3)在自定義實現HostnameVerifier時,在verify中對Hostname進行嚴格校驗
4)建議setHostnameVerifier方法中使用STRICT_HOSTNAME_VERIFIER進行嚴格證書校驗,避免使用ALLOW_ALL_HOSTNAME_VERIFIER
SSL(TLS)是網路加密協議,在瀏覽器與網站握手交互,用到了非對稱加密,在傳輸實際數據用到了非對稱加密和哈希演算法。
中間監聽數據流,暴力破解理論上只是時間問題,依賴計算機計算能力。但是政府會開掛的,本國網站用行政手段,直接找到網站索要伺服器證書(也就是私鑰),就可以解碼了。
未來,也許通過解密今天的SSL留,會改變歷史的認識。
推薦閱讀:
※如何看待小米論壇被拖庫?
※家用路由器會遭受攻擊嗎?
※為什麼密碼的驗證方式一直沒有得到突破?
※攜程信用卡信息被泄露,除了更換信用卡還有什麼別的好方法處理么?
※如何管理好自己的密碼?