- 들어가기 전에….
Alice는 Bob에게 메세지를 전달하고 싶다. 하지만 21세기 정보세계는 AI의 출현으로 인해 혼탁해져 버렸다. 정신 차리고 보니 Alice를 사칭한 정보와 문서가 도처에 넘쳐난다. AI는 정교하게 Alice의 문체를 흉내낸다. 메세지는 Alice의 손을 떠났다. Bob은 자신에게 도착한 글이 Alice의 것인지, 아닌지 알 수가 없다. Bob은 평소 Alice의 말습관이나 문체가 어떠했는지 떠올린다. 그러면서 글을 찬찬히 읽는다. Bob이 이 글의 저자를 판단하는 마지막 한 줄기 근거는 어떤 것이었을까?
인공적인 존재가 흉내낼 수 없는 사람만의 고유한 언어 의미와 형식이 있다는 믿음을 가진 나는, 적어도 어떠한 사람 저자가 쓴 글에 그것을 보증할 수 있는 워터마크가 부여될 수 있어야 한다고 생각한다. 그것이 취약 워터마크(Fragile Watermark)라 해도 오히려 좋다. 이것이 깨져 해당 저자가 쓴 글이 아님이 밝혀진다면 그것만으로도 목적 달성이다.
자연언어 문장의 특성을 추출하여 그 슬롯마다 비트값을 부여해보자. 예를 들어 문장의 태(Voice)를 특성으로 삼는다면 능동태(Active)에는 0값을 부여하고 수동태(Passive)에는 1값을 부여하는 식이다. 특성의 수가 n개라면 자연언어 문장 안에 숨겨진 비트열은 2^n의 경우의 수를 갖는다. 물론 이것도, Alice와 Bob이 가진 ‘개인 키(Private Key)’를 안다는 전제 위에서의 이야기다. 해커나 AI는 공개키는 알아도 이 개인 키를 알 수 없다. 자연언어의 특성에 따른 슬롯을 알고 즉, 공개키를 알고, 이것을 다 계산한다 하여도, 문장의 자연스러움을 유지하며 개인 키에 따라 2^n의 경우의 수 중에 알맞은 비트열을 찾아낸다는 것은 불가능하다. 그렇다면 이 아이디어는, 적어도 초심자의 생각과 이론 상에서는 꽤 괜찮아보인다.
이 프로젝트의 이름을 잡스의 ‘Purple Project’에의 이름을 빌려와 ‘Green Project’라 하겠다. 이는 프로젝트 자체와 이 워터마킹 그리고 암호화 자체를 칭하는 말이 된다. 그리고 분명히 밝혀두건대, 나는 변방의 ‘연구를 하고 싶은’ 일개 학생이다. 언어학에 지대한 관심이 있지만 굉장한 초심자이고 암호학에는 그냥 문외한이다. 개인 공간에 끄적이는 것이니 건설적인 조언과 비판, 질문은 환영하지만 인신 공격 만큼은 정중히 사양하겠다.
2. ‘Green Project’란 무엇인가….
우선 필자가 색깔 중에 초록색을 좋아한다.
‘Green Project (이하 프로젝트)’는 자연언어에 나타나는 특성에 이진법을 적용하여, 언어 자체에 비트열을 숨기는 암호화이자 워터마킹이다. 사람이 언어를 구사할 때의 인지적 선택을 디지털 프로토콜로 변환하는 데 성공하면 이것을, 기계는 절대로 흉내낼 수 없는 사람만의 언어 지문으로 사용할 수 있다. 공상에 빠져보자면, 가깝게는 2030년이나 멀게는 2040년 즈음 어떠한 문서를 열 때마다 ‘이 글은 OOO(저자의 이름)이(가) 그만의 고유한 인지적 가중치를 사용해 72비트의 인장을 새겨 넣은 글임이 증명되었습니다.’와 같은 안내문구를 만날 수도 있다. 만일 이 공상의 상황에서 AI가 문서를 마구잡이로 변형하고 망쳐놓았다고 치자. AI가 아무리 문서의 저자를 흉내내어 인간처럼 글을 써도, 그 이면에 숨겨진 2^n의 확률을 우연히 맞출 수는 없다. AI가 문서를 건드렸기에 그 문서에 숨어있는 2^n의 비트열은 망가졌을 것이다. 이는 결국 워터마크가 깨지는 결과로 이어지고, 워터마크가 깨졌기에 앞서 말한 인증문구는 사라졌을 것이다. 이렇게 되면 읽는 이는 해당 문서가 ‘가짜’임을 판별할 수 있게 된다.
그렇다면 자연언어 문장 안에 어떻게 비트를 숨긴다는 것일까? 구체적인 예시를 통해 설명하겠다.
다음 문장 (A)를 보자. 이 문장은 필자가 임의로 만든 문장이다.
(A) A man who is taught English spoken by her thinks that it is uncommon.
이 문장은 7비트를 숨기고 있다. 아직 1바이트(8비트)를 숨길 수 있는 예문까지는 생각해보지 못했다. 지금까지는 ‘일단’ 7비트만으로도 족하는 중이다. 왜냐면 나는 아직 공부 중인 학생이니까! 이 글을 올린 후 찬찬히 8비트를 숨길 수 있는 문장도 지어볼 예정이다.
아무튼 (A)에 숨어있는 비트열은 ‘1101010’이다. 비트값을 부여할 슬롯으로 자연언어의 특성을 들었는데, 그 특성으로 앞서 언급했던 Voice를 포함해 Polarity, Relative Clause, Complementizer를 잡았다(그림 1). 특성 Voice에 있어서는 Active이면 0값, Passive이면 1값을 부여한다고 했었고, Polarity에 있어서는 Positive이면 0값, negated antonym이면 1값을 부여한다. Relative Clause에 있어서는 full clause이면 0값, reduced clause이면 1값을 부여하겠다. Complementizer에 있어서는 that이 있으면 0값, 없으면 1값이다.

Alice와 Bob이 서로 ‘Voice, Polarity, Relative Clause, Complementizer’라는 순서에 맞게 문장에 비트값을 부여하자고 약속하였다면(일종의 개인키,) 문장 (A)는 ‘1101010’이라는 비트열을 갖는데 그 이유는 다음과 같다:
- NP, ‘A man who is taught English spoken by her’에서 Passive는 두 번 보인다. (who is taught, English spoken by her.) 따라서 비트열 제일 앞 두 값은 ’11’.
- NP, VP(thinks that it is uncommon)에서 NP는 positive이며 VP는 negation을 포함한다(uncommon). 따라서 그 그 다음 비트열 두 값은 ’01’.
- NP에서 Realtive Clause는 Full로 보이는 부분, 생략된 부분 모두 포함한다(각각 ‘who is’ taught, English spoken by her). 따라서 그 다음 비트열 두 값은 ’01’.
- VP에서 Complementizer that은 생략되지 않았다. (thinks ‘that’ it is uncommon.) 따라서 비트열 마지막 값은 ‘0’.
조금 더 분명한 설명을 위해 syntax tree diagram을 사용해보겠다(그림 2).

3. 학생으로서, 제시할 수 있는 연구 질문
- 복호화 과정을 조금 더 구체적으로 생각해봐야한다. 개인키라는 것이 서술한대로 두루뭉술하게 ‘슬롯의 순서’에만 그치진 않을 것이다.
- 구문적 특성만 반영하기에는 features가 너무 적다. 단어 사용 편향과 같은 인지적, 의미적 특성도 추가해야한다.
- negation은 사실 polarity에 있어 positive form과 완벽히 대응되지 않는다. 자연언어에서 negation은 묘하게 다른 뉘앙스를 풍긴다.
- 실제로 암호화하면 정말 쓸모가 있을까? 효율이 있냐는 말이다. 암호가 너무 무거워지진 않을까?
4. 마무리
Alice와 Bob은 어떻게 되었을까?
그리고 나는 어떻게 될까?
이 주제를 한 번 정말 깊게 파보고 싶은데,
초심자라서 할 수 있는 공상에 불과한 생각인 건지,
실제로 연구해볼 만한 가치가 있는 건지 내 스스로는 판단이 안 선다.
그래도 용기를 내본다. 개인 공간이라고 할지언정 어딘가에 공개해두고 이 글을 만약 누군가 읽게된다면
어떻게든 나는 공부한 것을 정리하고 써봤으며 피드백을 얻는 셈이 되겠지.
이제 집에서 혼자 읽고 생각만 하는 것은 그만 두려고 한다.
길든, 짧든, 틀렸든, 옳을 수도 있든
다시 글을 쓰며 내 머릿속 생각들을 정리해보려고 한다.
이 이상한 이야기(odd saying)가, 내 언어적 모험(Odyssey)이 되기를 바란다.
- 어떤 질문이든, 조언이든, 비판이든 환영입니다!
- Contact: seogyeong@sogang.ac.kr
댓글 남기기