探討ECC加密被破譯的可能性 續
ECC被破譯的難度的探討
1、從上面的分析來看,要想制作出ECC的注冊機,似乎需要知道私鑰才有可能,這需要窮舉。如果是私鑰數據長度非常大或是數據對,這基本上是不可能的。
2、sn和Hash,H等都是關聯的,能說是牽一發而動全身。
3、Hash經過復雜運算后,還要使計算的***結果等于自身,即H=Hash,否則將驗證失敗。
4、帶ECC程式的本身只有公鑰,而沒有私鑰。私鑰只在注冊機中存在。
5、開始的感覺是,帶ECC的程式似乎有一種東西游離于程式之外,又在控制著程式驗證的運行。知道他,卻又抓不住他,這就是私鑰。破譯一個字,難!
因此,目前常用的方法是爆破和補丁。
ECC被破譯的可能性的探討
細想一下,這有點奇怪。程式在我的機子上運行,代碼我的機子上跑,而他的驗證運行卻受程式之外的某種規律(公鑰-私鑰關系)的控制。非常是不爽,我本地運行憑什么受外面的某種關系制約啊,哪里有這種邏輯呢?典型的霸王條款!發揮逆向思維想想,既然驗證成功的程式能在我的機子上運行,說明他肯定符合某種規律,而這種規律存在于本機的程式中,并不一定是程式之外的那種約束關系!如果這種假設成立的話,那么就說明有非常多種規律能適合于驗證關系!
1、分析注冊機:
- K=k*G
- R=rG
- Hash=F(user,R)=F(user,r,G)=SHA(user,x,y)
- sn=r-Hash*k
sn,Hash,user三者關聯,即:sn=r-Hash*k=r-k*SHA(user,x,y)。
2、分析程式驗證:
- sn,Hash
- R=sn*G+Hash*K
- H=F(user,R)=SHA(user,x,y)
驗證H是否等于Hash。
3、驗證程式的關聯:
- H=F(user,R))=F(user,sn,G,Hash,K)=SHA(user,x,y)
如果確定user,確定G,確定K(這些都能從軟件中逆向出來的),既然驗證需求H=Hash,那么我們就令H=Hash,則有H=F(user,sn,G,H,K)=F(...,sn,...,H),即 H=F(...,sn,...,H)。這其中,只有H和sn是變化的,給定sn,就能給出相應的H;其他量都是常量。
4、關鍵的問題:搞清晰F函數的關系,逆向出程式中已有的信息,用符合條件的user,任意sn(只要符合長度等基本限制),理論上就能計算出符合這個關系的Hash。這樣的話,就和私鑰沒有關系了。也就是用某個關系間接代替了公私鑰的關系。
5、ECC是窮舉,也就是說可能舉出非常多符合條件的;實際上窮舉也就是沒有固定的對應值,因此,這即是其***的漏洞。因此,有無窮對滿足H=F(...,sn,...,H)關系的密碼對。
6、進一步探討:
對于方程H=F(...,sn,...,H),有些時候并不一定有解析解。如果有解析解的情況,就是 H=HASH=f(sn...),其他量為常值看待,非常容易給出。這樣的注冊機,其實是需求輸入user和sn兩個量來確定HASH,而不是通常的一個量。如果方程沒有解析解的情況,似乎也要窮舉?比如 X=a+b**(X+c),這里X為變量,a,b,c為常量。 例如HASH=user+2**(a*sn+b*HASH) 等通常是沒有解析解的。
如果我們要相信私鑰起作用的話,那肯定沒有辦法了。窮舉也許是最笨的辦法,我們為什么不能構建其他的關系來滿足方程達到能產生解析解呢?只要這些構建的關系能夠通過程式的諸如數據長度等基本的驗證機制就行了。上面的方程能這樣構建額外的關系就能簡化并構成簡單的聯立方程組,而構成這樣的關系方程實在太多,比如:
令a*sn+b*Hash=0 方程(1)就變為HASH=user+1 聯立求解上面方程,夠簡單的吧。如果有某種限制條件,我們同樣能令a*sn+b*Hash=1,2..........既然窮舉,我們舉幾個特例就能饒過這些基本的判斷了。
7、ECC驗證
真正的ECC加密比上面的復雜,但基本原理相同。只不過他采用了橢圓曲線映射驗證機制,過程更復雜,也需要更多的構建搭橋技術。
ECC加密被破譯的可能性的探討結論
ECC能否破解?答案是肯定的只是如果程式驗證函數的復雜程度如果夠難的話,那就看你的逆向功底和數據函數構建能力了。理論上,只要另外構建一個或多個關系函數,這樣就能代替私鑰了,凡是窮舉似乎都能這樣做,而且做出的注冊機應該有無窮多個。
ECC加密被破譯的可能性的探討的更多內容請看:探討ECC加密被破譯的可能性
【編輯推薦】