Ученые из университетов Дрекселя и Вашингтона создали искусственный интеллект, который определит разработчика программы «по почерку». Это может пригодиться для разрешения споров о плагиате, но лишит конфиденциальности тысячи разработчиков, которые выкладывают коды в открытые базы GitHub.
Исследователи в области стилометрии – статистического анализа лингвистического стиля – знают, что текст – это уникальный результат. По лексикону, синтаксису и грамматическим ошибкам можно идентифицировать автора, например, на форуме. Новые исследования доказывают, что стилометрию можно применять к искусственным языкам, чтобы распознавать разработчиков программного обеспечения.
Как это работает
Разработанный учеными алгоритм идентифицирует все характеристики, найденные в образцах кода. Можно провести параллель с естественным языком: это слова и частота их использования, длина предложения, порядок слов в предложении и т.д.
Ученые из нескольких сотен тысяч оставили меньше сотни характеристик, которые фактически отличают разработчиков друг от друга.
Исследователи создавали ориентиры, которые отражали базовую структуру кода, а не его произвольные компоненты. Если сравнить, то приоритет отдан структуре предложения, а не отступам каждой строки в абзаце.
Для того чтобы распознать другие образцы кода, искусственному интеллекту не нужны примеры работ. Авторы исследования заявили, что даже небольшого фрагмента кода будет достаточно, чтобы с высокой точностью отличить одного кодера от другого.
Деанонимизация кода
Ученые смогли деанонимизировать программиста, используя только скомпилированный двоичный код. После того, как разработчик завершил написание части кода, программа-компилятор превратила его в двоичный код. Его можно декомпилировать обратно на язык программирования С++, сохранив при этом уникальный стиль разработчика.
Для проведения бинарного эксперимента исследователи использовали образцы кода из ежегодного конкурса Google Code Jam. Алгоритм машинного обучения правильно идентифицировал группу из 100 индивидуальных программистов в 96% случаев, используя восемь выборок кода из каждого. Даже когда группу расширили до 600 программистов, алгоритм все же идентифицировал 83% кодеров.
Плагиат и конфиденциальность
Ученые уверены в том, что их работу можно использовать для разрешения споров о плагиате, определения создателей вредоносного программного обеспечения, хакеров и т.д. С другой стороны, методика лишает конфиденциальности тысячи разработчиков, которые выкладывают коды в открытые базы GitHub.
Исследователи заявили, что опытных разработчиков идентифицировать легче, чем начинающих, ведь чем выше квалификация, тем более непохожей становится работа. Это может быть связано с тем, что новички иногда копируют части кода с таких сайтов, как, например, Stack Overflow.
Вопросы и ответы
В будущем ученые планируют изучить факторы, влияющие на стиль программирования человека: работа в одной организации, проживание в одной стране и т.д. В одном предварительном исследовании они обнаружили, что могут отличать образцы кода, написанные канадскими или китайскими разработчиками с 90%-ной точностью.