얼굴 인식 시스템을 속이는 일은 생각보다 쉽습니다. 등록된 사람의 사진 한 장이면 충분할 때가 많습니다. 이 장에서는 어떤 종류의 위조 공격(스푸핑)이 있는지, 그리고 그것을 막는 방어가 어떻게 분류되는지를 정리합니다. 공격을 알아야 방어를 설계할 수 있습니다.
스푸핑 공격의 세 유형
위조 공격은 "무엇으로 진짜 얼굴을 흉내 내는가"에 따라 나뉩니다.
| 유형 | 방법 | 난이도 |
|---|---|---|
| 인쇄물(print) | 등록자 사진을 인쇄해 카메라에 들이댐 | 가장 쉬움 |
| 화면 재생(replay) | 폰·태블릿으로 등록자 사진·영상 재생 | 쉬움 |
| 3D 마스크 | 등록자 얼굴 형태의 입체 마스크 착용 | 어려움·비쌈 |
가장 흔하고 쉬운 것이 인쇄물과 화면 재생입니다. SNS에서 사진 한 장만 구하면 시도할 수 있어, 라이브니스 없는 인식 시스템은 이 단순한 공격에 그대로 뚫립니다. 3D 마스크는 비용과 수고가 커서 드물지만, 고보안 환경에서는 이것까지 고려합니다.
진짜와 가짜를 가르는 단서
다행히 사진·화면은 진짜 얼굴과 미묘하게 다릅니다. 라이브니스 모델은 이 차이를 학습합니다.
- 인쇄물: 종이의 질감, 평면성, 반사·꺾임
- 화면: 픽셀 격자(모아레), 화면 테두리, 빛 번짐
- 공통: 깊이(입체감)의 부재, 피부의 미세 질감 차이
진짜 얼굴은 입체이고 살아 있는 피부 질감과 미세한 움직임을 가집니다. 평면 매체로 이를 완벽히 흉내 내기는 어렵고, 모델은 바로 그 흔적을 포착합니다.
패시브 vs 액티브 라이브니스
방어 방식은 사용자에게 무언가를 요구하는지로 나뉩니다.
사용자 협조 불필요] A --> C[액티브
동작 요구] B --> D[한 장의 사진으로
질감·깊이 판정] C --> E[눈 깜빡임·고개 돌림
챌린지 응답]
- 패시브(passive): 사용자가 아무것도 하지 않아도 됩니다. 카메라에 잡힌 한 장(또는 한 프레임)의 질감·깊이만으로 진짜/가짜를 판정합니다. 사용자 경험이 매끄럽습니다. PART 09의 라이브러리들이 모두 이 방식입니다.
- 액티브(active): "눈을 깜빡이세요", "고개를 왼쪽으로" 같은 동작을 요구하고, 응답이 맞는지 봅니다. 더 강력하지만 사용자가 번거롭습니다. 깜빡임 판정은 PART 03의 EAR로 직접 만들 수 있습니다.
이 PART는 사용자 경험이 좋은 패시브 라이브니스를 중심으로 다루고, 필요하면 액티브를 더하는 방식을 권합니다.
어디에 게이트를 둘까
라이브니스는 인식 파이프라인의 게이트로 들어갑니다. 보통 인식 전에 두어, 가짜 얼굴은 인식까지 가지 않게 막습니다.
진짜인가?} C -->|가짜| D[거부] C -->|진짜| E[인식 진행]
가짜를 먼저 걸러 내면, 인식 자원을 진짜 얼굴에만 쓰고 보안도 강해집니다. 5장에서 이 게이트를 실제 출입 시스템에 결합합니다.
실무 팁. 라이브니스는 보안과 사용자 경험의 줄다리기입니다. 너무 엄격하면 진짜 사용자도 자주 거부되어(특히 조명이 나쁘거나 안경·마스크 착용 시) 불편하고, 너무 느슨하면 공격을 놓칩니다. 보안 수준이 아주 높아야 한다면 패시브에 액티브(깜빡임 챌린지)를 더하는 다단계 방어를, 일반적인 경우엔 패시브 하나로 시작해 임계값을 조정하는 것이 현실적입니다.
이 장에서 기억할 것
스푸핑 공격은 인쇄물·화면 재생·3D 마스크로 나뉘며, 앞의 둘이 가장 흔하고 쉽습니다. 라이브니스 모델은 평면 매체의 질감·모아레·깊이 부재 같은 흔적으로 진짜와 가짜를 가릅니다. 방어는 사용자 협조가 필요 없는 패시브와 동작을 요구하는 액티브로 나뉘며, 보통 인식 앞에 게이트로 둡니다. 다음 장에서는 이 패시브 라이브니스를 DeepFace 한 줄로 추가합니다.