机器学习可以通过风格确定代码背后的程序员

编译:chux

出品:ATYUN订阅号

自动化工具现在可以准确地识别论坛帖子的作者,只要他们有足够的训练数据可供使用。但是较新的研究表明,这也可以应用于人工语言样本,如代码。事实证明,软件开发人员也留下了可供识别的信息。

德雷塞尔大学计算机科学副教授Rachel Greenstadt和他的前博士生,现在是乔治华盛顿大学的助理教授Aylin Caliskan,发现代码与其他形式的风格表达一样,并不是完全匿名的。在周五的DefCon黑客会议上,他们将展示他们使用机器学习技术进行的一些研究,以对代码样本的作者进行去匿名化。例如,他们的工作可能对剽窃争议有用,但它也具有隐私意义,特别是对于向全世界贡献开源代码的数千名开发人员而言。

如何对代码进行去匿名化

这里有一个简单的解释,说明研究人员如何利用机器学习来发现一段代码属于谁。首先,他们设计的算法识别选择的代码样本中的所有特征。这有很多不同的特点。想想自然语言中存在的每个方面:你选择的单词,将它们放在一起的方式,句子长度等等。然后Greenstadt和Caliskan将这些功能缩小到仅包括实际上区分开发人员的功能,将列表从数十万缩减到50左右。

研究人员不依赖于低级功能,例如代码的格式化。相反,他们创建了“抽象语法树”,它反映了代码的底层结构,而不是其任意组件。他们的技术类似于优先考虑某人的句子结构,而不是他们是否缩进段落中的每一行。

该方法还需要某人的工作示例来教授算法,以便知道它何时发现另一个代码样本。如果随机GitHub帐户弹出并发布代码片段,Greenstadt和Caliskan不一定能够识别其背后的人,因为他们只有一个样本可以使用他们可能会说这是一个他们以前从未见过的开发人员)。然而,Greenstadt和Caliskan并不需要你的生活工作来判断代码归于你。它只需要几个简短的样本。

例如,在2017年的一篇论文中,Caliskan,Greenstadt和另外两位研究人员证明,即使是存储库网站GitHub上的小代码片段也足以将一个编码器与另一个编码器区分开来,具有高度的准确性。

最令人印象深刻的是,Caliskan和其他研究人员在一份单独的论文中表示,只使用编译后的二进制代码就可以对程序员进行去匿名化。在开发人员完成一段代码编写之后,一个名为编译器的程序将其转换为一系列的1和0,可由机器读取,称为二进制。对人类而言,它大多看起来像废话。

Caliskan和她合作的其他研究人员可以将二进制文件反编译成C ++编程语言,同时保留开发人员独特风格的元素。想象一下,你写了一篇论文并使用谷歌翻译将其转换成另一种语言。虽然文本可能看起来完全不同,但你编写的元素仍然嵌入在你的语法等特征中。代码也是如此。

“风格得以保留,”Caliskan说。“当事情基于个人学习时,仍然存在非常强烈的风格。”

为进行二元实验,Caliskan和其他研究人员使用了谷歌年度Code Jam竞赛的代码示例。机器学习算法在96%的时间内正确地识别出一组100个独立的程序员,每个程序员使用8个代码样本。即使样本量扩大到600个程序员,该算法仍然可以在83%的时间内进行准确识别。

对剽窃和隐私的影响

Caliskan和Greenstadt说,他们的工作可以用来判断编程学生是否抄袭,或者开发人员是否违反了他们的雇佣合同中的非竞争条款。安全研究人员可能会使用它来帮助确定谁可能创建了特定类型的恶意软件。

更令人担忧的是,独裁政府可以使用去匿名化技术来识别背后的个人,例如审查规避工具。该研究还对开源项目的开发人员产生了隐私影响,特别是如果他们一直使用相同的GitHub帐户。

Greenstadt说:“人们应该意识到,在这种情况下,100%隐藏自己的身份通常非常困难。”

例如,Greenstadt和Caliskan已经发现,一些现成的混淆方法,软件工程师用来使代码更复杂,因此更安全的工具,在隐藏开发人员的独特风格方面并不成功。研究人员表示,未来,程序员可能会使用更复杂的方法隐藏自己的风格。

Greenstadt说:“我认为,在我们继续进行的过程中,我们将要发现的一件事就是隐藏这些东西是什么样的混淆。我不相信这一切的终点将是你永远做的一切都是可追溯的。无论如何,我希望不会。”

例如,在另一篇论文中,由华盛顿大学的Lucy Simko领导的团队发现程序员可以制作代码,目的是欺骗算法,使其相信它是由其他人创作的。该团队发现开发人员可能会欺骗他们的“编码签名”,即使他们没有专门制作伪造的培训。

未来的研究

Greenstadt和Caliskan也发现了一些有关编程性质的有趣见解。例如,他们发现有经验的开发人员比新手更容易被识别。你越熟练,你的工作就显得越独特。这可能部分是因为初学者程序员经常从Stack Overflow等网站复制和粘贴代码解决方案。

同样,他们发现解决更难的问题的代码示例也更容易确定归属。使用一组62名程序员,每个程序员解决了七个简单问题,研究人员对他们的工作进行去匿名化,准确率为90%。当研究人员使用七个困难问题样本时,准确率达到了95%。

在未来,Greenstadt和Caliskan想要了解其他因素如何影响一个人的编码风格,例如同一组织的成员在项目上合作时会发生什么。他们还想探索诸如来自不同国家的人是否以不同方式编码的问题。例如,在一项初步研究中,他们发现他们可以区分加拿大和中国开发商编写的代码样本,准确率超过90%。

还有一个问题是,是否可以以标准化的方式在不同的编程语言中使用相同的归因方法。目前,研究人员强调,去匿名代码仍然是一个神秘的过程,尽管到目前为止他们的方法已被证明有效。

Greenstadt表示,“我们仍在努力了解是什么让某些东西真正可以确定归属。”

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2018-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

2016年最流行的六大深度学习开源工具

一、TensorFlow TensorFlow新版本的重大意义在于首次支持分布式处理,可使用机群培训机器学习模型,此前只支持单一机器。 二、Keras 开发者是...

32170
来自专栏iOSDevLog

人工智能,我来了

38080
来自专栏AI科技大本营的专栏

如此精心整理的深度学习资源只在这里,值得你拥有!(上篇)

还记得下面这张脑图吗?上周我们为大家整理了 AI 中 4 个重要方面的学习资源(点击查看),受到了大家的很多好评,感谢大家的支持。其实在学习过程中搜集学习资料是...

11240
来自专栏企鹅号快讯

浅谈机器学习业务方面使用R+Hadoop 是否可靠

众所周知,R 在解决统计学问题方面无与伦比。但是 R 在数据量达到 2G 以上速度就很慢了,于是就催生出了与 hadoop 相结合跑分布式算法这种解决方案,但是...

19690
来自专栏PPV课数据科学社区

【学习】大数据相关术语500例解释及中英文对照①

本文由36大数据编辑“陌上花”收集整理,转载必须标明来源36大数据和作者。 一、大数据 英文:big data,mega data 大数据,或称巨量资料,指的是...

44680
来自专栏大前端开发

开源翻译中文版《深度学习(Deep Learning)》

深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。

8550

推荐系统介绍

我们许多人将推荐系统视为似乎知道我们思想的神秘实体。试想一下Netflix的建议电影的推荐引擎,或者是建议我们应该购买什么产品的亚马逊。自他们成立以来,这些工具...

25570
来自专栏逍遥剑客的游戏开发

VRDC2017: Eagle Flight Technical Postmortem

43460
来自专栏华章科技

在机器学习方面使用 R + Hadoop 方案真的有那么好?

因为他们在不懂R和Hadoop的特征应用场景的情况下,恰好抓到了一根免费,开源的稻草。

70730
来自专栏牛客网

菜鸟网络java岗面经 已拿offer

66100

扫码关注云+社区

领取腾讯云代金券