在敲詐之前,黑客們都是如何給勒索軟件加密的?

雷鋒網 於 09/05/2016 發表 收藏文章
按:本文作者Song,雷鋒網(搜索“雷鋒網”公眾號關注)專欄特約作者,西雅圖Newsky Security公司聯合創始人兼CTO,業內知名防病毒專家,黑客。


最近在媒體上常常曝光的一個名詞是勒索軟件。勒索,就是劫持了你在意的人或者東西,然後讓你交錢的一種犯罪行為。

最早的勒索方式是:“你的鵝紙在我們手上”;

在數字時代,勒索方式是:“你的裸照在我們手上”。

不過,目前流行的勒索軟件不是這樣,拿你東西?那不是太老土了。勒索軟件的黑客們才不拿你的東西,他們是先用某種方法把軟件放到你的計算設備上,比如你的電腦,你的手機或者你的平板電腦,然後把你的數據加密——明天要交給老闆的PPT變成了一坨亂碼,跟辛辛苦苦積攢了好多年的小黃片一起,沒法看了。想把數據解密?交錢!

加密是計算機科學中歷史最長久的一種計算了。早在二戰時期,德國就製造了Enigma密碼機,來傳輸機密信息。計算機科學的祖師爺之一圖靈也參與了對Enigma密碼的破譯工作。Enigma密碼機的原理,是對每個字母進行轉譯,變換成另外一個字母,而機器的結構保證字母不是總是被轉譯到另外一個字母。這在當年是非常先進的一種做法,不過,這種加密中,字母和字母還是有對應關係的,所以在破譯密碼的過程中,一些常見的短語,比如納粹經常掛在嘴邊,對希特勒表忠心的話,就被用來作為解密的入手點。所以呢,神盾局特工裏面,九頭蛇組織是必然會失敗的,就是因為他們話太多了。


(Enigma密碼機的插線板 圖片來源:維基百科)

在現代加密算法中,這種字母對字母的對應早已經被跨字母邊界的算法取代。如果把每個byte作為一個字母的話,現代加密算法會把一串二進制數據進行加密,而不是對單個byte進行加密,進一步增加了解密的難度。

現代密碼學裏面很多的加密算法是對稱的。所謂對稱算法,就是加密的祕鑰和解密的祕鑰是一樣的。

加密算法通常是經過長期研究,保證了加密的有效性,也是公開的。那麼區分不同加密手段的,除了算法,就是祕鑰了。如果加密算法是對稱的,一旦祕鑰被敵方知道,所有的加密通信就可以被解開。這就造成了一個難題:比如小明要給小紅寫情書,為了不讓班主任看懂,小明需要把情書加密,但是小紅為了看懂情書,就需要祕鑰。小明怎麼把祕鑰給小紅呢?寫在小紙條上嗎?

如果班主任看到了小紙條上的祕鑰,那就可以免費看幾個月的愛情韓劇了。這種時候,小明通常會選擇用另外一個信道給小紅傳輸祕鑰。比如給小紅寄一封信,或者放學以後偷偷把寫着祕鑰的小紙條交給小紅。但是,祕鑰還是有泄露的可能性。另外,很多時候這種第二信道不一定存在,或者不一定現實。比如我們要上網買東西,這個時候誰等得及讓網店先寄一封寫着祕鑰的信來呢?

寫勒索軟件的黑客同樣面臨這個問題:他們的勒索軟件要把用户的數據加密,就需要有算法和祕鑰。算法是寫在軟件裏面的,軟件通過網絡下載到用户的電腦上,算法是可以被逆向工程解出來的;祕鑰也要傳遞到用户的電腦,也會被記錄下來。如果祕鑰和對稱加密算法都被人知道了,很快就會被人做出解密軟件來,勒索的事情就和小明的愛情一樣,成了空。

那麼,有沒有一種加密算法,能在算法和祕鑰都可能在唯一可用的信道上通信,並且很可能被公開的情況下,保證加密的可靠性呢?有的,這就是非對稱加密算法。

引用如果説加密算法是把數據放到一個保險箱的話,對稱加密算法的祕鑰,就是既能鎖保險箱,又能開保險箱的鑰匙,而非對稱加密算法,則是鎖保險箱是一把鑰匙,而開保險箱,是另外一把鑰匙。RSA算法,就是這樣一種非對稱加密算法。

RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。1997年,解密了一個文件。早在1973年,在英國政府通訊總部工作的數學家克利福德·柯克斯(Clifford Cocks)在一個內部文件中提出了一個相同的算法,但他的發現被列入機密。如果不是因為他在機密單位工作的話,我們現在就是在討論CC算法而不是RSA算法了。

雖然RSA算法的數學表達非常優美,但是根據一篇文章每增加一個公式,讀者就會減少一半的原則,我們這裏就不寫公式啦。

引用非對稱算法的原理都是基於這樣一個原理:對於一個加密的信息,哪怕你買了世界上最強大的計算機,在有生之年也別想算出解密的祕鑰。非對稱加密算法,就是選擇了一個難解的問題,圍繞它建立加密/解密體系。RSA選擇的難題,是分解一個大數的質因子。

要説質數,簡直就是數學界的點金石,多少猜想和算法都來源於質數。這裏,請允許我向數學家陳景潤和張益唐致敬。

我們還是回來説小明和小紅的愛情故事吧。如果小明和小紅選擇用RSA算法來對他們的情書進行加密,首先要用軟件生成各自的公鑰和私鑰,然後他們各自把自己的私鑰藏好,把自己的公鑰大大地寫在教室的黑板上。當然,這裏兩個祕鑰哪個作為公鑰,哪個作為私鑰其實是沒關係的,公開的那個就是公鑰,保密的那個就是私鑰。如果小明要給小紅寫情書,他會用小紅的公鑰給情書加密,再發給小紅。小紅收到以後,用自己的私鑰,就可以解密了。那麼班主任老師看到的是什麼呢?是一團亂碼。沒有小紅的私鑰,班主任老師哪怕用世界上最強大的計算機,也沒有辦法在一百年內算出情書裏面寫的是什麼。

同樣的,如果一個寫勒索軟件的黑客,想要防止被人破解,他同樣可以用RSA加密算法對受害人的數據進行加密,而使用的祕鑰可以是網絡上面下載的公鑰,等用户付款以後,把私鑰發給勒索軟件進行解密。不過,如果你以為讀懂這點就可以到網上去抄一個勒索軟件來賺錢的話,我建議你還是先跟家裏人講好,怎麼從局子裏面撈自己比較好,不然等你被放出來,小明已經要向小紅求婚了。

為了紀念多年來和班主任老師的鬥智鬥勇,小紅決定讓小明證明求婚是認真的,是來自小明而不是後援團的。這倒是也難不倒小明,他先把求婚的話用自己的私鑰加密,再把加密過的信息用小紅的公鑰加密,這樣,小紅拿到這團亂碼,先用自己的私鑰解密,再用小明的公鑰解密,就可以看到小明的話。而且,因為最後一步解密是用小明的公鑰解密的,説明這個信息是來自小明,而不是其他人。

注意這裏有點繞,通常我們是用公鑰加密,私鑰解密。但是這裏進行了兩次加密/解密過程,在內層,是用小明的私鑰加密的。因為私鑰和公鑰都可以用來加密,只要用另外一個進行解密就可以了。小明和小紅的這種傳遞信息的方式,不僅傳遞了信息,也確定了信息的來源,這種方式叫做數字簽名。

前面説了,RSA算法只是非對稱加密算法的一種,目前比較流行的還有橢圓曲線加密算法,也是一種非對稱加密算法。相對RSA算法,橢圓曲線算法在相同祕鑰長度的情況下,能提供更好的加密強度。不過目前最流行的非對稱加密算法,還是RSA算法。就在你剛才去登錄郵箱,或者網上購物的時候,RSA算法還在https協議中,保護着你的隱私和網上財產。比如,小明和小紅結婚以後很快有了一個可愛的女兒,在給女兒買尿布,上網交學費的時候,RSA算法都在保護着每一個劃過空中的比特,不會被咖啡館另一邊,或者世界另一邊的黑客破解。


(公鑰/私鑰的加密/解密過程,無論是傳情書還是買尿布,都需要。圖片來源:微軟MSDN)

引用幾年後的一天,小明對小紅説:親愛的,有一個好消息和一個壞消息,你想先聽哪個?

哪個都好,小紅温柔地説。

首先,小明緩緩道來,我們的孩子,用RSA加密,給她幼兒園的同學發了一封信。

那另一個消息呢?小紅笑眯眯地問。

她的老師把這個消息解密了。

啊!小紅不禁掩住了嘴,你是説,量子計算機?

是的,小明點點頭。

注:頭圖和第一張圖來自 gfi.com


資料來源:雷鋒網
作者/編輯:Song

留言


請按此登錄後留言。未成為會員? 立即註冊
    快捷鍵:←
    快捷鍵:→