Специалисты в области стилометрии (исследование стилистики, включающее статистический анализ) хорошо знают, что письмо — это уникальный процесс. Словарный запас, синтаксис и грамматика создают индивидуальный почерк, позволяя определить автора текста. Существуют даже автоматизированные системы, способные идентифицировать человека, написавшего сообщение в Интернете. А недавнее исследование показало, что стилометрию можно применить и к искусственным языкам, например языкам программирования.
Исследователи Рэйчел Гринстадт из Дрексельского университета и Айлин Калискан из Университета Джорджа Вашингтона рассказали на конференции DefCon, что код, как и другие формы стилистического выражения, не является анонимным и его можно распознать. Ученые использовали машинное обучение для выявления авторов образцов кода.
Для тестирования алгоритма использовалась база исходных кодов с ежегодного конкурса Google Code Jam. В ней присутствуют фрагменты, наиболее сильно отличающие программистов друг от друга. Это позволяет уменьшить количество претендентов с сотен тысяч до десятков человек. Изучив работы 100 программистов, искусственный интеллект распознал 96% авторов, используя по восемь примеров кода от каждого разработчика. В случае с исходниками 600 участников конкурса точность распознавания составила 83%.
Ученые считают, что результаты их работы могут быть использованы для выявления случаев недобросовестного заимствования кода. Например, преподаватели технических вузов получат возможность проанализировать код, предоставленный студентами-программистами, и с большой долей уверенности сказать, написан ли он самостоятельно или позаимствован из чужих работ.
Софтверные компании смогут контролировать соблюдение сотрудниками-программистами условий контракта, чтобы избегать случаев, когда уволившиеся работники используют наработки, ранее перешедшие в собственность компании, в сторонних проектах. Специалисты сферы информационной безопасности также нашли бы применение технологии — определить разработчика вредоносного ПО при помощи подобной системы ИИ стало бы намного легче.
Однако могут пострадать разработчики, которые регулярно вносят свой вклад в развитие свободного программного обеспечения, поскольку утратят возможность сохранять анонимность. Как выяснилось, обфускация (намеренное запутывание) исходного кода не слишком помогает в деле сохранения анонимности — даже после такой обработки код сохраняет уникальный авторский «отпечаток». «Люди должны понимать, что не существует гарантированного способа скрыть личность в подобного рода ситуациях», — отметила Гринстед.
Ученые также надеются, что в будущем им удастся получить ответы на многие интересующие их вопросы, например, какие факторы влияют на стиль программирования, что происходит, когда члены одной команды работают вместе над проектом, отличаются ли стили программирования людей из разных стран и т. д. К слову, уже на данном этапе их алгоритм смог различить образцы кода канадских и китайских программистов с точностью более 90%.