Detection of LLM-assisted Code Plagiarism Using k-gram Software Birthmarks
이 논문은 코드 패러프레이징(paraphrasing)의 어려움에도 불구하고, Java 옵코드(opcode)에 기반한 k-gram 소프트웨어 버드마크(birthmark)가 다양한 모델과 유사도 측정 방식에 걸쳐 LLM 지원 코드 표절을 탐지하는 데 여전히 효과적임을 입증한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
당신에게 아주 맛있는 케이크를 만드는 비밀 레시피가 있다고 상상해 보세요. 옛날에는 누군가 당신의 레시피를 훔치고 싶다면, 단어 하나하나를 토씨 하나 틀리지 않고 그대로 베껴 써야 했습니다. 글씨체나 타이핑된 모양이 똑같았기 때문에 들키기가 매우 쉬웠죠.
하지만 이제는, 초스마트 로봇 요리사(AI)가 당신의 레시피를 보고, 전체를 완전히 새로 써서, 맛은 똑같지만 모습은 완전히 다르게 보여주는 세상을 상상해 보세요. 이 로봇은 글꼴을 바꾸고, "설탕"을 "감미료"로 바꾸며, 조리 순서를 재배치하고, 계량컵도 다른 것을 사용합니다. 사람의 눈에는 완전히 새로운 레시피처럼 보이죠. 이것이 바로 이 논문에서 말하는 **LLM 지원 코드 표절(LLM-assisted code plagiarism)**입니다.
다음은 연구자들이 이러한 "로봇 요리사" 도둑들을 잡아내기 위해 어떻게 문제를 해결했는지 쉽게 설명한 내용입니다.
문제점: "마법 같은" 재작성
소프트웨어 개발자들은 컴퓨터를 위한 지침(코드)을 작성합니다. 대규모 언어 모델(LLM)은 기존 코드를 가져와서 이를 "의역(paraphrase)"할 수 있는 AI 도구입니다. 이들은 코드의 외형과 구조를 너무 많이 바꾸어서, 동일한 단어나 줄을 찾는 전통적인 표절 탐지기들을 속려버립니다. 프로그램은 여전히 똑같은 일을 수행하지만, 마치 다른 사람이 작성한 것처럼 보이게 됩니다 만듭니다.
해결책: "소프트웨어 생년월일(Software Birthmarks)"
연구자들은 인간처럼 재작성된 코드를 읽으려고 노력하지 않았습니다. 대신 그들은 **소프트웨어 생년월일(Software Birthmarks)**이라고 불리는 것을 사용했습니다.
생년월일(또는 태어날 때부터 가진 특징)을 사람의 지문처럼 생각해보세요. 옷을 갈아입거나 머리 모양을 바꾸거나 안경을 써도, 당신의 지문은 변하지 않습니다.
- 만드는 법: 그들은 컴퓨터의 "레시피"(코드)를 가져와서, 기본적인 기계 명령문(opcode라고 불림)의 목록으로 번역한 뒤, 이를 한 번에 2개에서 6개의 명령어로 구성된 작은 덩어리로 잘게 나누었습니다.
- 비유: "The cat sat on the mat(그 고양이가 매트 위에 앉았다)"라는 문장이 있다고 가정해 봅시다.
- 1-gram (1개짜리 덩어리): 단순히 단어 단위입니다: "The", "cat", "sat"... (너무 흔합니다. 많은 문장에 "the"가 들어있기 때문이죠.)
- 2-gram (2개짜리 덩어리): 두 단어의 쌍입니다: "The cat", "cat sat", "sat on"... (더 독특합니다.)
- 3-gram (3개짜리 덩어리): 세 단어의 묶음입니다: "The cat sat", "cat sat on"... (훨씬 더 독특합니다.)
그들은 프로그램 전체를 이러한 덩어리들의 주머니(bag)로 변환했습니다. 설령 AI가 문장의 순서를 바꾼다 하더라도, 특정한 종류의 덩어리들(지문)은 여전히 남아있을 가능성이 높기 때문입니다.
실험: 누가 최고의 도둑인가?
연구자들은 세 가지 서로 다른 "로봇 요리사"(AI 모델)를 테스트했습니다:
- ChatGPT-5.1-Codex-Mini
- DeepSeek-V4-Flash
- Claude-Haiku-4.5
그들은 실제 오픈 소스 Java 프로그램들을 가져와서, 이 AI들에게 그것을 재작성하도록 시킨 뒤, 자신들의 "지문" 방법론을 사용하여 AI를 잡아내려 했습니다. 또한 지문을 비교하는 다양한 방식(예: 일치하는 덩어리의 개수를 세는 방식 vs 순서가 얼마나 가까운지를 보는 방식)도 테스트했습니다.
연구 결과: 무엇이 효과적이었나?
1. 덩어리의 크기가 중요하다 ("골디락스 존")
- 너무 작으면 (1개 덩어리): 사람을 단지 "the"라는 단어 하나로 식별하려는 것과 같았습니다. 너무 많은 사람이 사용하기 때문에 좋은 지문이 되지 못했습니다.
- 너무 크면 (6개 덩어리): 문단 전체를 맞추려는 것과 같습니다. 만약 AI가 문장 하나만 옮겨 놓아도, 문단 전체가 일치하지 않게 되어 지문 기능이 깨져버립니다.
- 딱 적당하면 (2개 또는 3개 덩어리): 이것이 최적의 지점이었습니다. 이 작은 규모의 명령어 그룹들은 원래의 코드를 식별할 만큼 충분히 독특하면서도, AI의 재작성 과정을 견뎌낼 만큼 견고했습니다.
2. 비교하는 방식이 중요하다
- 순서는 중요하지 않다: 연구자들은 명령어의 순서(예: 단계들이 정확히 같은 순서로 진행되는지 확인하는 것)를 보는 것이 좋지 않은 아이디어라는 것을 발견했습니다. AI가 순서를 너무 많이 뒤섞어 놓았기 때문에, 이 방식은 실패했습니다.
- 개수를 세는 것이 중요하다: 가장 좋은 방법은 순서와 상관없이 원본 코드와 재작성된 코드에 공통적으로 나타나는 고유한 덩어리의 개수를 단순히 세는 것이었습니다. 이는 "레시피에 '밀가루'와 '계란'이 들어있는가?"를 확인하는 것이지, "계란을 밀가루보다 먼저 넣었는가?"를 따지는 것이 아닙니다.
3. 어떤 AI가 가장 잡기 어려웠나?
- ChatGPT-5.1-Codex-Mini가 가장 교활했습니다. 이 모델은 코드를 매우 철저하게 재작성하여 탐지하기가 가장 어려웠음에도 불구하고, 여전히 실제로 작동하는(오류 없이 컴파일되는) 코드를 만들어냈습니다.
- 나머지 두 AI(DeepSeek과 Claude)는 재작성 과정에서 더 명확한 "지문"을 남겼기 때문에 잡기가 더 쉬웠습니다.
핵심 결론
AI가 코드를 완전히 달라 보이게 재작성할 수는 있지만, 컴퓨터가 생각하는 근본적인 "DNA"까지 바꿀 수는 없습니다. 작은 규모의 독특한 명령어 패턴(생년월일/birthmarks)을 살펴보고 그것들이 얼마나 일치하는지 개수를 세는 방식을 사용하면, 설령 누군가 범죄를 은폐하기 위해 초스마트 로봇을 사용하더라도 우리는 여로 도둑을 잡을 수 있습니다.
이 논문은 이 방법이 현대적인 AI 표절, 특히 코드의 작은 덩어리(2~3개의 명령어)를 사용하고 코드의 '위치'보다는 '내용'에 집중할 때 매우 효과적이라고 결론짓습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.