橢圓曲線法在微軟安全保護CDKey的應用
從Windows95起,Microsoft的產品安裝key從原來的10位數字改為25位字元,這一改動,代表著Microsoft告別了簡單的校驗和,從此投入了橢圓曲線法的懷抱。從密碼學的角度來看,這絕對是一個里程碑,因為當時橢圓曲線法仍在研究論證階段,Microsoft是第一個將之實用以商業產品的廠家。那麼在這25個字元裡到底有什麼呢?
1.Base24
這25個字元實際是114bits的資料用base24進行uucode後的結果,做為安裝key,這個base必須絕對避免誤認,所以Microsoft選擇了以下這24個字元做為uucode的base:bcdfghjkmpqrtvwxy2346789,所以,如果你的安裝key 有這24個字元以外的字元的話,你完全可以把它丟到垃圾筒裡去了━━不用試就知道它根本通不過了。
2.114 Bits
Uudecode後得到的114位按intel高位在後的格式表示如下:
|
flag:不明標誌,目前所見的各類key中這一位總是為0。
serial:使用者序列號,轉成十進位制表示為aaaabbbbbb,對應顯示為:
零售版:xxxxx-aaa-bbbbbbx-xxxxx
oem版: xxxxx-oem-0aaaabx-bbbbb
以上31bits總稱為data,是cdkey中的基本部分。
hash:data經特定處理得到的結果,見後文。
sign:hash值的橢圓曲線簽名,見後文。
3.橢圓曲線簽名演算法
要說明橢圓曲線簽名演算法可不是一件容易的事,有興趣的可以自己用“橢圓曲線”或是“elliptic curve”在搜尋引擎找相關的資料來看吧,這裡只簡單介紹Microsoft的用法。
所謂橢圓曲線是指這樣一類曲線方程:
|
在密碼學裡用的是它的兩個特例,而Microsoft用的更是這兩個特例中的特例:
|
當a、b、p選定後,就可以確定一個橢圓曲線,再選擇一個生成點 g(gx,gy)。於是,存在一個最小的整數q使得q*g=o。然後,再任意選擇一個整數 kk(kx,ky)=k*g,這樣橢圓曲線簽名演算法的key就全生成了:
公開金鑰為:a,b,p,g(gx,gy),k(kx,ky)
私有金鑰為:a,b,p,g(gx,gy),q,k
要對data簽名時:
a.先任意選擇一個整數r;
b.將data、rx、ry共100個位元組求sha-1,取結果中的28位得到hash;
c.求sign = r - hash * k ( mod q );
d.把data、hash、sign三個陣列合後uucode得到25位cdkey。
驗證cdkey時:
a.把25位cdkey先uudecode再拆分後提到data、hash、sign;
b.求點r( rx, ry ) = sing * g + hash * k ( mod p );
c.將data、rx、ry共100個位元組求sha-1,取結果中的28位得到hash';
d.如果hash = hash',則該cdkey為有效key。
4.Bink
從前面的說明可以看出,為了驗證cdkey,Microsoft 必須公開橢圓曲線簽名演算法中的公開金鑰,那麼這個公開金鑰放在哪裡呢?答案是在pidgen.dll裡的bink資源裡(其他產品如office則被包在*.msi),而且一共有兩組,從目前已知的key組合來看,第一組金鑰是用以零售版本的,第二組則用於oem版本。兩個產品的key能否通用就在於對應的金鑰是否相同,比如中文版的Windows 2000的pro/srv/advsrv的第二組金鑰也是相同的,即一個PWindows 2000 pro的oem版的key,可同時供 PWindows 2000 srv/adv的oem版使用。
5.破解及其難度
要破解cdkey的生成演算法,必須從Microsoft 公開的金鑰中求出對應的私有金鑰,即只要求出q和k即可。從bink中公開的金鑰來看,p 是一個384 bits的質數,看起來計算量好象至少要o(2^168)才行,但Microsoft設計中一個缺陷(?)使實際工作量降低到只有o(2^28)就可以了。
為什麼相差這麼遠?
回頭看看3.c中的式子:
|
通常情況下q可以是很大的值,因此sign應該也很大,但Microsoft 為了減少使用者輸入的cdkey的數量,把sign的值限死在55 bits,因此,自然也限定了q最多也不能超過56 bits。依此類推,由於k在一臺賽揚ii 800的機器上只用6個小時就解出某組金鑰的q值,最多時在一臺雷鳥1g上用了28個小時才算出另一組金鑰的k值,其他平均大約都在十個小時左右就可以求出。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8271432/viewspace-903437/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 橢圓曲線加法原理計算
- 橢圓曲線加密中的加法乘法淺析加密
- 利用橢圓曲線進行加密通訊加密
- 如何給小學生講清楚ECC橢圓曲線加密加密
- 【Openxml】將Openxml的橢圓弧線arcTo轉為Svg的橢圓弧線XMLSVG
- 密碼學中的RSA演算法與橢圓曲線演算法密碼學演算法
- 轉貼:Ivanopulo說CloneCD用的是橢圓曲線密碼演算法 (1千字)密碼演算法
- Fabric 1.0原始碼分析(46)ECDSA(橢圓曲線數字簽名演算法)原始碼演算法
- 圓錐曲線14
- 圓錐曲線15
- WEBGL橢圓Web
- 執行時應用自我保護(RASP):應用安全的自我修養
- 你的應用安全嗎? ——用Xray和Synk保駕護航
- 《網路安全法》築牢個人資訊保護的法律防線
- SVG (一) 圖形, 路徑, 變換總結; 以及橢圓弧線, 貝塞爾曲線的詳細解釋SVG
- 幾維安全SDK應用加固,全線5折為APP保駕護航APP
- 72 個網路應用安全實操要點,全方位保護 Web 應用的安全Web
- 數字水印在資料安全保護中的應用實踐和最佳化
- 保護好你的WIFI無線網路安全WiFi
- c#畫圖(橢圓和弧線)Craphics類C#
- 如何保護在Autodesk應用程式商店的應用不被盜版 - 1
- 任何前端應用都不可能被安全保護? - kuzzle前端
- 物聯網在環境保護行業中的應用行業
- 如何用MFC畫出直線、虛線、折線、圓、橢圓、矩形、弧形(附上原始碼)原始碼
- 後稜鏡門時代:開發者保護應用安全的5大技巧
- helmet是一個保護Node.JS應用的安全專案Node.js
- 保護無線網路安全連線九個技巧
- 貝塞爾曲線理解與應用
- 兄弟連區塊鏈教程Fabric1.0原始碼分析ECDSA橢圓曲線數字簽名演算法區塊鏈原始碼演算法
- 白話經典貝塞爾曲線及其在 Android 中的應用Android
- 網路遊俠:使用WEB應用防火牆保護網站安全Web防火牆網站
- 保護網站安全網站
- mscorwks.dll在.Net中的地位以及在.Net程式碼保護方面的應用
- 用日誌系統保護Linux安全Linux
- 如何理解並應用貝塞爾曲線
- CAD繪圖工具——橢圓繪圖
- SVG <ellipse> 繪製橢圓SVG
- CSS繪製橢圓程式碼CSS