訂閱
糾錯
加入自媒體

匿名代碼根本無法破解?不存在的!機(jī)器學(xué)習(xí)玩轉(zhuǎn)去匿名化

文體學(xué)(語言文體的統(tǒng)計分析)研究者—早就知道寫作是一個獨特的、個人主義的過程。您選擇的詞匯、句法和語法都會留下痕跡。例如,只要自動化工具有足夠的培訓(xùn)數(shù)據(jù)可供使用,它們現(xiàn)在就可以準(zhǔn)確地識別論壇帖子的作者。但最新的研究表明,文體學(xué)也可以應(yīng)用于人工語言樣本,比如代碼。事實證明,軟件開發(fā)人員也會有指紋留下。

雷切爾·格林斯塔特(Rachel Greenstadt)是美國德雷塞爾大學(xué)計算機(jī)科學(xué)的副教授。艾林·卡利斯坎(Aylin Caliskan)是格林斯塔特的前博士生、現(xiàn)任喬治·華盛頓大學(xué)助理教授。他們兩人發(fā)現(xiàn),代碼和其他形式的文體表達(dá)一樣,都是無法匿名的。在周五的DefCon黑客大會上,這兩位科學(xué)家將展示他們的多項研究。在研究中,他們利用機(jī)器學(xué)習(xí)技術(shù)對代碼樣本的作者進(jìn)行去匿名化操作。例如,他們的工作可能在剽竊糾紛中發(fā)揮作用,但同時它也有隱私問題,尤其是對成千上萬向世界貢獻(xiàn)開源代碼的開發(fā)者而言。

如何對代碼進(jìn)行去匿名化?

下面用一個例子對研究人員如何使用機(jī)器學(xué)習(xí)來發(fā)現(xiàn)代碼的作者進(jìn)行簡單解釋。首先,他們設(shè)計的算法識別了在一些代碼樣本中找到的所有特征,有很多不同的特征。想想自然語言中存在的每一個方面:有你選擇的單詞,你把它們組合在一起的方式,句子長度,等等。格林斯塔特和卡利斯坎隨后縮小了功能范圍,使其只包含了真正區(qū)別于其他開發(fā)者的功能,將列表從數(shù)十萬縮減到大約50個。

研究人員不依賴底層特性,比如代碼的格式化方式。相反,它們創(chuàng)建“抽象語法樹”來反映代碼的底層結(jié)構(gòu),而非它的任意組件。他們的技巧類似于優(yōu)先排序某人的句子結(jié)構(gòu),而不是在于他們是否縮進(jìn)一個段落的每一行。

這個方法還需要一些別的工作來教一個算法,讓它知道什么時候應(yīng)該發(fā)現(xiàn)另一個代碼示例。如果一個隨機(jī)的GitHub賬戶彈出并發(fā)布了一個代碼片段,格林斯塔特和卡利斯坎就不一定能夠識別背后的人,因為他們只有一個樣本可以使用。他們可能會說,這是一個他們從未見過的代碼開發(fā)人員。然而,格林斯塔特和卡利斯坎并不需要把一生的時間都花在代碼上,他們只需要幾個短的樣本。

例如,在2017年的一篇論文中,卡利斯坎、格林斯塔特和另外兩名研究人員證明,即使是存儲庫站點GitHub上的一小段代碼,也足以區(qū)分出各個編碼者之間的區(qū)別,而且精確度相當(dāng)之高。

最令人印象深刻的是,卡利斯坎和其他研究團(tuán)隊在另一篇論文中表示,只用他們編譯的二進(jìn)制代碼就可以去匿名化程序員。在開發(fā)人員編寫完一段代碼后,一個名為編譯器的程序?qū)⑺D(zhuǎn)換成一系列的1和0,機(jī)器可以讀取這些1和0,稱為二進(jìn)制。對人類來說,這簡直就是胡說八道。

卡利斯坎和與她一起工作的其他研究人員可以將二進(jìn)制分解回C++編程語言,同時保留開發(fā)人員獨特風(fēng)格的元素。假設(shè)您寫了一篇論文,使用谷歌翻譯將其轉(zhuǎn)換為另一種語言。雖然文本看起來可能完全不同,但是您編寫的方式元素仍然嵌入到了語法之類的特性中。代碼也是如此。

“風(fēng)格被保留了下來,” 卡利斯坎說!爱(dāng)文本是以個人學(xué)習(xí)為基礎(chǔ)時,就會有很強(qiáng)的風(fēng)格特征。”

為了進(jìn)行二進(jìn)制實驗,卡利斯坎和其他研究人員使用了谷歌 Code Jam年度編程挑戰(zhàn)賽的代碼樣本。機(jī)器學(xué)習(xí)算法正確地識別出了100名個體程序員,而只用了96%的時間。每個人使用8個代碼樣本。即使將樣本量擴(kuò)大到600名程序員,該算法仍能在83%的時間內(nèi)準(zhǔn)確識別。

對剽竊和隱私的影響

格林斯塔特和卡利斯坎說,他們的工作可以用來判斷編程學(xué)生是否有抄襲行為,或者開發(fā)者是否違反了雇傭合同中的非競爭條款。安全研究人員可能會使用它來幫助確定創(chuàng)建一種特定類型惡意軟件的可能開發(fā)人員。

更令人擔(dān)憂的是,一個威權(quán)政府可能會使用去匿名化技術(shù)來識別背后的個人,比如說,一個規(guī)避審查的工具。這項研究還對那些為開源項目做貢獻(xiàn)的開發(fā)人員有隱私方面的影響,特別是如果他們一直使用相同的GitHub賬戶的話。

格林斯塔特說:“人們應(yīng)該意識到,在這種情況下,要百分之百地隱藏自己的身份是非常困難的!

例如,格林斯塔特和卡利斯坎發(fā)現(xiàn),一些現(xiàn)成的混淆方法,即軟件工程師用來使代碼更復(fù)雜、安全性更高的工具,并不能成功地隱藏開發(fā)人員的獨特風(fēng)格。然而,研究人員說,在未來,程序員可能能夠使用更復(fù)雜的方法隱藏他們的風(fēng)格。

“我確實認(rèn)為,只要我們繼續(xù)進(jìn)行下去,將會發(fā)現(xiàn)一件事,那就是什么樣的混淆方法能夠掩蓋這些東西! 格林斯塔特說:“我不相信,最后發(fā)現(xiàn)的結(jié)論是你做的每件事都是有跡可循的。無論如何,我希望不是這樣!

例如,在另一篇論文中,由華盛頓大學(xué)的露西    ·西姆科(Lucy Simko)領(lǐng)導(dǎo)的團(tuán)隊發(fā)現(xiàn),程序員編寫代碼的目的可以是讓算法相信自身是別的程序員編寫出來的。該團(tuán)隊發(fā)現(xiàn),即使開發(fā)人員沒有專門訓(xùn)練過如何創(chuàng)建贗品,他們也可能會對自己的“編碼簽名”進(jìn)行惡搞。

未來的研究方向

格林斯塔特和卡利斯坎還發(fā)現(xiàn)了許多關(guān)于編程本質(zhì)的有趣見解。例如,他們發(fā)現(xiàn)經(jīng)驗豐富的開發(fā)人員比新手更容易識別代碼。你越熟練,你承擔(dān)的工作就越獨特。部分原因可能是因為初級程序員經(jīng)常從Stack Overflow這樣的網(wǎng)站復(fù)制粘貼代碼解決方案。

同樣,他們發(fā)現(xiàn),解決更困難問題的代碼示例也更容易屬性化。通過使用62名程序員組成的樣本,這62名程序員每個人都解決了7個“簡單”的問題,研究人員在90%的時間里都能夠?qū)⑺麄兊墓ぷ魅ツ涿。?dāng)研究人員使用7個“困難”問題樣本時,他們的準(zhǔn)確率下降到95%。

在未來,格林斯塔特和卡利斯坎想要了解其他因素是如何影響一個人的編碼風(fēng)格的,比如當(dāng)同一個組織的成員在一個項目上合作時會發(fā)生什么。他們還想探究一些問題,比如來自不同國家的人是否會以不同的方式編碼。例如,在一項初步研究中,他們發(fā)現(xiàn)他們可以區(qū)分加拿大和中國開發(fā)者編寫的代碼樣本,準(zhǔn)確率超過90%。

還有一個問題,相同的屬性方法是否可以在不同的編程語言中以標(biāo)準(zhǔn)化的方式使用。目前,研究人員強(qiáng)調(diào),盡管到目前為止他們的方法已經(jīng)被證明是有效的,但是去匿名化代碼仍然是一個神秘的過程。

“我們?nèi)栽谂ε宄男┦钦嬲梢詫傩曰,哪些不是!备窳炙顾卣f:“有足夠的理由證明,這些應(yīng)該引起關(guān)注,但我希望這不會導(dǎo)致任何人都不公開發(fā)表意見的糟糕情況發(fā)生!

聲明: 本文系OFweek根據(jù)授權(quán)轉(zhuǎn)載自其它媒體或授權(quán)刊載,目的在于信息傳遞,并不代表本站贊同其觀點和對其真實性負(fù)責(zé),如有新聞稿件和圖片作品的內(nèi)容、版權(quán)以及其它問題的,請聯(lián)系我們。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯
x
*文字標(biāo)題:
*糾錯內(nèi)容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網(wǎng)安備 44030502002758號