天天看點

非對稱加密算法的本質

非對稱加密算法的本質就是利用了一些數學難題,比如rsa利用了大數分解的難題,dh利用了離散對數的難題,而ecc利用了橢圓曲線域上的理論,這些被成為難題,僅僅是難而已,理論上是有解并且可解的,比如大數分解問題,我估計c語言或java語言第一學期的課程的作業中肯定會有一道題,該題就是求出一個數的所有因數,當時最直接的方法就是一個一個試,對于大數來講,一個一個試會使你或者計算機發瘋,如果你有足夠的時間等待,那麼最終是可以得到答案的...

     密碼學從本質上說并不是很嚴密,加密資料的安全性總是相對的而不是也不可能是絕對的,破解加密資料從理論上說絕不是不可能的,加密資料之是以安全,靠的不是算法的無懈可擊,考得是人類包括人類的機器的能力的相對弱小,如果人類的平均壽命為10000歲,那麼現如今的加密算法都将是不安全,如果一個人平均要用10年以上的時間才能對資料進行解密,那麼這個加密算法以及密鑰将被認為是很安全,理論上一個人可以用畢生精力去揭秘一段密文,如果不成則讓兒子孫子繼續,但是這樣做的現實意義并不大,另一方面,人或者機器完全有可能一次就能猜中密鑰是什麼,但是這種事在現實中的機率卻很小,是以在确定算法和密鑰的時候,盡可能讓破解時間變長,進而讓破解本身變得沒有意義,同時在确定密鑰的時候,盡可能讓密鑰位數很大,進而讓猜中密鑰或者窮舉的機率和時間變得很小和很長。這就是密碼學的本質,千萬不要認為加密的資料一定是絕對安全的,密碼學更多的是社會學和心理學的意義,而不是純粹計算機和數學的意義。人們被槍擊的機率很小,是以幾乎所有的衣飾都不防彈,地震的幾率很小,是以人們投資房地産,并且認為房子裡很舒适,如果追求安全的話,我認為住草房在地震時起碼不會被埋或者被砸。

     如果說密碼學有數學上的意義,那麼它利用的就是數學上的“難解”理論,這個在計算複雜性中有涉及,所有的能在問題大小規模的多項式時間内解決的問題,我們認為是易解的,稱作P問題,是以能在問題規模多項式時間内被驗證的問題,我們稱為是NP問題,注意是被驗證,也就是說首先你要給一個你認為的答案,算法本身僅僅告訴你你的答案是否正确,具體怎樣能給出一個答案,算法是不管的,密碼學利用的就是這個,比如一個很大的素數,求出它的因數,如果你随意給一個數,隻需要除一下(不要小看這個除法,一般計算機并不是直接支援大數運算的,一個數超過比如一般的32位或者64位就要程式設計要計算了)就知道它是否是一個因數,但是窮舉本身會使得計算者發瘋,如果用了幾十年或者幾百年破解了一個密文,有意義嗎?什麼密文如此重要呢,一戰前的協約國們有些在二戰後都不存在了,或者說你在明天破解了納粹進攻蘇聯的密文,但是它也隻能是曆史文獻了,而你也不會是什麼向圖靈那樣的功臣了,充其量是個數學家或者曆史學者。

     計算複雜性本身有很多内容,密碼學僅僅利用了它的一些結論罷了。NP問題到底能否最終歸結為P問題,這本身就可能研究一輩子的了,研究它的人和搞密碼學的人并不是一類人,搞密碼學的人和程式設計的人也不是一類人,懂c語言的人不一定能看懂openssl,看懂了openssl的也不一頂知道des置換的含義,精通加密解密api的家夥們能被成為程式員或者工程師,他們可能不知道也沒有必要知道rsa或者ecc的理論,而我,什麼也不懂,什麼也不成...

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1271922

繼續閱讀