指纹出卖你、声音出卖你、笔迹出卖你……

这都不算什么——

现在,你写的代码也能出卖你的身份了!

近日,在Drexel大学任职计算机科学的副教授Rachel Greenstadt,及其他的博士学生(现为George Washington大学助教)Aylin Caliskan公布了他们的最新研究成果:人类的代码就和语言一样,也是有“身份”的。

研究文体学(文体学即对语言风格的计量分析)的学者早就明白,写作是一个独特、个体化的过程。你选择的词汇、句式,还有语法结构都打上了你的个人印记。给自动化工具足够的训练数据,比如论坛文章,自动化工具可以准确地判断出其作者。

Rachel Greenstadt和Aylin Caliskan的研究证明了,文体学也可运用于人工语言样本。

比如说代码。

在今年的DefCon黑客会议上,Rachel Greenstadt和Aylin Caliskan展示了他们对代码样本作者去匿名化的研究成果。

如何去匿名化代码

对于研究者如何使用机器学习去匿名化代码,这里给出一个简略的解释。

首先,他们设计的算法判别选取代码样本里的特征。

这些特征包含很多方面,比如自然语言所具有的典型特征:词语的选择、组词的方式、句子的长短等等。Greenstadt和Caliskan将这些特征进行了多伦筛查,最终从数十万个特征中选取了50个左右。

该研究不依赖于类似代码格式这样的低维特征,而是创造了一种反应代码底层架构而非任意成分的“抽象句法树”。

他们的技术类似于在文本去匿名化时,对该文本的句型结构划分优先顺序,而非判断段落是否有首行缩进。

当然了,这方法的运行需要用一定的代码样本来训练算法,这样之后再碰到这个人的代码样本时,算法就能判断出作者来。

如果是一个随机选取的GitHub账号,那Greenstadt和Caliskan就没法判断出代码作者了,因为他们手头只有一个样本。

虽说如此,他们所需要的样本量也是极少的。

举例来说,在他们之前的一篇论文中,Caliskan, Greenstadt还有其它两个研究人员证明了,我们只需GitHub库里小片段的代码就能够准确判别它的作者。

最叹为观止的是,Caliskan和一组其它研究者在另一篇论文中展示,他们只需编译的二进制代码就能够对编程人员去匿名化了。

在开发人员写完一段代码后,一个叫编译器的程序将其转化为可被电脑读取的一系列0和1的二进制代码。对人类来说,这串东西看起来像天书。

Caliskan和她的同事们可以将二进制反编译为C++语言,同时能保留开发者独特风格的元素。

想象你写了篇文章,再用谷歌翻译将其转为其它语言。虽然文字看起来完全不同了,但是那些你写文章风格的元素依然植入在其中。

对代码来说也是同样的道理。

“每个人的代码风格其实都是清晰可区分的。”Caliskan说道。

Caliskan和同事们从谷歌的年度编程挑战赛里选取代码样本,来进行二进制测试实验。机器学习算法对100个程序员进行识别,训练集为选取每个开发者8个代码样本,该算法能够在96%的时间内正确地识别出这100个独立的程序员。

当样本人数扩展为600个编程人员时,该算法仍然可以在83%的情况下进行准确识别。

抄袭的执法者?隐私的天敌?

Caliskan和Greenstadt表示,他们的成果可以用来分辨学生的代码是否存在抄袭,或者开发人员有没有违背雇佣合同里的非竞争性条款。安全人员也可能借此找出电脑里的恶意软件是出自谁手。

不过令人担心的是,独裁政府也可以使用去匿名化技术来追踪程序猿,例如找出“科学上网”软件的幕后推手。

同时,这个研究对为开源项目贡献了开发者也带来了隐私方面的问题,这尤其会困扰那些常年坚守同一个Github账号的程序猿们。

Greenstadt说:“人们应该意识到,在这些(开源)情况下,他们是很难做到百分百匿名的。”

举例来说,Greenstadat和Caliskan发现,那些软件工程师意图使代码更复杂和安全而使用的非定制化模糊方式或工具,在隐藏开发者的独特风格方面并没有什么卵用。但研究者表示,也许在未来,开发者能够用更复杂的方式来隐匿他们的编程风格。

Greenstadt说:“随着研究的进行,我相信我们的目标是找到什么样的模糊化工具能够隐匿风格”,“我不相信研究的最终结果是,你做的任何匿名化努力最终都是有迹可循的。怎么说呢,希望不是这样吧。”

比如,在另一篇文章中,华盛顿大学的Lucy Simko领导的小组发现,编程者可以写份代码来欺骗算法,使之以为这是其他人所作。小组发现,即使编程者未特意学习伪造,他还是能够弄份假的“代码印迹”。

未来工作

Greenstadt和Caliskan揭示了一些编程本质的有趣见解。比方说,他们发现,经验丰富的开发者比生手更容易通过个人风格被找出。越是技术娴熟,显然你的作品更独特。部分原因也在于,生手常常从Stack Overflow这样的网站里复制粘贴代码方案。

类似的结论还有,应对复杂问题的代码样本更容易被去匿名化归类。对同样的62个编程人员的代码抽取代码样本进行分析,当这七个代码样本是应对“简单”问题时,研究人员能够在90%的时间内对他们的工作进行去匿名化;当抽取七个代码样本应对“复杂”问题时,正确率达到了95%。

未来,Greenstadt和Caliskan打算研究其它影响码农编程风格的因素,比如同一机构的编程人员合作某项目时,其个人风格是否会受到影响。他们也还想了解,不同国家的编程人员的风格是否有所不同。例如,在一个初步研究中,他们发现区分加拿大编程人员和来自中国的代码样本的正确率高于90%。

此外,这样的研究是否对任何编程语言都适用,也是个问题。就目前而言,研究者强调,虽然目前的研究方法看起来行之有效,代码去匿名化仍然是一个充满疑问的过程。

Greenstadt说:“我们还在试图找出能够真正鉴定个人印迹的归类因素。虽有充分的理由证明,个人印迹的问题值得编程人员关注,但我仍然希望这不会减少人们开源的动力。”

大数据文摘出品

编译:狗小白、罗然、钱天培

∞∞∞∞∞

公众号回复“IT派”,

邀你加入IT派 { 技术青年圈}

认罪吧,你的代码已经出卖了你!相关推荐

  1. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  2. 你敲键盘的声音,出卖了你 | 附开源代码

    安妮 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI 没想到吧,有一天你会被键盘出卖. 对,就是你每日敲击的键盘.当指尖在键盘上跳跃,清脆的噼啪声此起彼落时,你输入的所有信息,包括那些情真 ...

  3. 代码攻击破坏设备,炸毁 27 吨发电机的背后

    作者 | 八宝粥 出品 | CSDN(ID:CSDNnews) 题图来源 | 东方IC 日前,美国司法部曝光了针对俄罗斯黑客组织 Sandworm的指控,6名黑客人员对平昌冬奥会.2017年法国大选进 ...

  4. Jfinal 2.1版本,JFinalConfig里自动配置路由的代码实现,直接晒代码

    2019独角兽企业重金招聘Python工程师标准>>> 背景: 1.我使用的jfinal2.1: 2.我喜欢用@ActionKey("/admin/index") ...

  5. 程序员离职删代码被判10个月,京东到家说恢复数据库花了3万,网友:这是真有仇啊...

    梦晨 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 程序员"删库跑路"的话题再次登上热搜,浏览量过亿. 不过,这一次删掉的不是数据库,而是自己亲手写下的代码! 当事人是一名 ...

  6. Java多线程安全问题解决的两种方式代码案例

    需求:用三个线程模拟三个售票窗口,共同卖100张火车票,每个线程打印出卖第几张票. 多线程安全问题 需求:用三个线程模拟三个售票窗口,共同卖100张火车票,每个线程打印出卖第几张票. 模拟安全问题 p ...

  7. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  8. r语言library什么意思_还没张口对方就知道你是什么意思了?你的肢体语言出卖了你哦~...

    原标题:还没张口对方就知道你是什么意思了?你的肢体语言出卖了你哦~ لغة الجسد 肢体语言 يستخدم الكثير منّا في أغلب الأوقات بعض الحركات و ال ...

  9. 没有代码天赋的我,先退出了

      兴趣在工作的工程中,被渐渐的摧残了不用紧,感觉到在出卖自己的时间也不要紧.然而当你现在努力却不知道以后怎么走,要紧了.   说起来也没什么,我们会看到一些莫扎特在编程序,一些舒马特在开滴滴,一些李 ...

最新文章

  1. Cocos2dx源码记录(1) CCGLProgram
  2. resin3.1+apache2.2.8 整合(笔记)
  3. 找到一个不错的ASP.net电子图书下载网站
  4. mysql慢sql增加读写分离_MySQL-Proxy实现MySQL读写分离提高并发负载
  5. Code Generate of Power Designer[转]
  6. php tp 重加载页面,thinkPHP线上自动加载异常与修复方法实例分析
  7. 以前看过一个压缩过的.exe,运行会播放长达半小时的动画,却只有60KB,个人认为其中的原理...
  8. RabbitMQ的5种队列_简单队列_入门试炼_第4篇
  9. 飞鸽传书(IPMSG)的主要工作原理
  10. 苹果宣布将把语音助手Siri整合到Apple Music服务中
  11. Joseph UVA 1452 Jump
  12. 详细解析STM32的时钟系统
  13. vba 关闭屏幕刷新
  14. APS系统的实施步骤,外行人都能看懂
  15. 激活函数(Activation Function)及十大常见激活函数
  16. 一阶零输入响应例题_一阶电路的零输入响应的特征方程
  17. Lync Server 2010不同规模拓扑图详解
  18. 【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
  19. 串并行数据结构实验--MAC下SML环境安装1
  20. 中兴面试-2022-7-13

热门文章

  1. 【Git-7】阿里云Git仓库
  2. 用机器学习生成披头士的歌词 | 项目实战
  3. 一次夜维SQL的性能优化
  4. 《我编程我快乐》读书笔记
  5. ISCC2022 擂台misc
  6. Android导航语音识别——语音听写(嵌入式)
  7. 一维原子链体系态密度的计算
  8. 浅谈javascript注入攻击
  9. MOS管在2020年即将爆发的十大电子应用领域-KIA MOS管
  10. 利用matlab做回归分析