GitHubCopilot拒绝“以色列”和“女人”,遇到被屏蔽的词就罢工GitHub的AI代码生成插件Copilot才发布两个多月,就造成了很多灾难。开源代码被复制,生成的内容包含用户隐私和歧视性语言。GitHub的对策也够粗暴的——拉榜单。认为不合适的词都被列为敏感词,现在连Boy和Girl都不能用了。大神的平方根倒数速度算法,竟然“whatthef**k?”在代码注释中,由Copilot原样复制。这件事被曝光后,Github悄悄把可以召唤这段经典代码的“qrsqrt”提示词加入了黑名单,顺便也加了f**k相关词。△副驾驶在案发现场抄写了大神的密码。发现这一点的是纽约大学副教授BrendanDolan-Gavitt。他最近的研究是在Copilot的加密敏感词列表中找出数千个单词。看了他的简历才知道,这个破解高手也是因为发现了敏感词,在IEEE上发表了一篇论文。不允许使用以色列和性别词汇。Brendan发现Copilot敏感词列表在VSCode插件包中,但它是加密的。加密后的敏感词是一个32位的Hash值,逆向操作是无法解密的。不过这位大哥在敏感词领域还是颇有经验的,和之前收集的常见敏感词直接碰撞。常见的都试过了,剩下的就是穷举了。穷举法最大的难点在于同一个Hash值可能对应很多词。例如“-1223469448”对应11位字母的80万种组合。于是Brendon建立了一个GPT-2模型来判断哪种组合最像英语。就这样,遇到困难解决难点,一开始破解方法简单穷举,最后使用了GPU加速和Z3约束求解算法(ConstraintSolver)。最后他在现有的1170个敏感词中找到了1168个,只有最后两个计算出来的结果真的不像人话,只好作罢。通过分析每个版本的Copilot插件,他还可以追踪到在哪个更新中添加了哪些特定的敏感词。他们将敏感词分为9个类别和25个子类别。不过,也有一些并不冒犯但可能引起争议的名称,例如Israel(以色列)和Palestine(巴勒斯坦),以及常见的性别名称,例如Man、Women、Girl、Boy。敏感词适用于用户输入的提示词和Copilot给出的建议。他测试并要求Copilot生成一个国家列表,该列表按字母顺序生成到伊朗、伊拉克,当下一个合理的是以色列时,他卡住了。调试日志中给出的信息是检测到诽谤(辱骂性语言)。Brendon认为,列出敏感词的方法只能算是一个80分的临时措施,并不能真正解决问题。毕竟真正的解决方案需要仔细检查训练数据,这是相当耗时的。对了,Github知道后打算把敏感词列表从插件包里移到服务器上,增加破解难度。在IEEE发表敏感词论文的Brendon引起了广泛关注,他也借此机会宣传了自己之前的研究。欢迎新老手,你可能也喜欢我去年发表在IEEES&P的论文,我们用自动的方法提取了手机APP中的敏感词列表等机密。在这篇论文中,他和他的团队测试了150,000个Android应用程序,其中4,000多个应用程序包含敏感词列表。这些应用来自谷歌商店、百度手机助手和三星手机预装应用。他们将敏感词分为9个类别和25个子类别。然后我们重点测试了几个app,做了一个表格。黑点代表这种类型的敏感词。列出了一些有趣的结论:淫秽(13)和威胁(11)被阻止最多。一些APP会屏蔽简单密码,比如1234。中文APP的敏感词数量明显多于英文和韩文。最后,团队还将查到的所有敏感词整理成一张大表,包括英文、中文和韩文。但是因为里面的文字太过醒目,根本不适合公开发表,最终版的论文中去掉了这张大表。除了敏感词,他们还发现很多APP都有秘密入口。比如在NBCSports中,点击版本号13次,输入密码,就可以进入隐藏的Debug界面。苹果版密码与安卓版相同。密码是“UUDDLRLRBASS”,有点像“上、下、左、右、左、右、BABA”。IEEE论文地址:https://panda.moyix.net/~moyix/papers/inputscope_oakland20.pdf
