출석 부정행위는 생각보다 흔하다
보수교육, 직업훈련, 워크샵에서 출석 부정행위는 반복적으로 발생합니다.
- QR 코드를 사진 찍어 동료에게 전송
- 교육장 밖에서 GPS를 조작해 체크인
- 한 기기로 여러 명 대리 출석
- 새벽 시간에 비정상적인 출석 기록 생성
HRD-Net 연계 교육에서 이런 부정행위가 적발되면 훈련기관 지정 취소까지 갈 수 있습니다. 단순한 QR 스캔으로는 막을 수 없습니다.
크로노젠 LMS는 이 문제를 4중 보안 체계로 해결합니다.
1단계: TOTP 기반 QR — 30초마다 새로운 코드
일반적인 QR 출석 시스템은 고정된 QR 코드를 사용합니다. 한 번 사진을 찍으면 누구나 스캔할 수 있습니다.
크로노젠 LMS의 QR은 다릅니다.
HMAC-SHA256 + TOTP 방식
QR 코드에는 다음 정보가 암호화되어 포함됩니다.
- 세션 ID: 어떤 수업의 출석인지
- 시간 윈도우: 30초 단위의 TOTP 인덱스
- HMAC 서명: SHA-256 기반 16자리 해시
30초마다 시간 윈도우가 바뀌면 QR 코드 전체가 갱신됩니다. 이전 QR은 60초 후 완전히 무효화됩니다.
왜 안전한가
- 사진 전송 무력화: 사진을 보내는 동안 QR이 만료됨
- 타이밍 안전 비교: crypto.timingSafeEqual로 타이밍 공격 방지
- 세션 격리: 다른 수업의 QR로 출석 불가
관리자 화면에서는 QR이 30초마다 자동 갱신되어 프로젝터에 띄워놓기만 하면 됩니다.
2단계: GPS 지오펜싱 — 교육장 안에 있는가
QR을 스캔해도 교육장 안에 있지 않으면 출석이 인정되지 않습니다.
Haversine 거리 계산
수강생의 GPS 좌표와 교육장 좌표 사이의 실제 거리를 Haversine 공식으로 계산합니다. 허용 반경을 벗어나면 출석이 거부됩니다.
GPS 스푸핑 탐지
단순 거리 검증만으로는 GPS 조작 앱을 막을 수 없습니다. 크로노젠 LMS는 추가 검증을 수행합니다.
- 정확도 이상 탐지: GPS 정확도가 1m 미만이면 스푸핑 의심 (실제 GPS는 이 정도로 정확하지 않음)
- 순간이동 탐지: 10분 이내에 10km 이상 이동하면 위치 조작으로 판단
- 정확도 보정: GPS 오차 범위를 허용 반경에 자동 가산
3단계: 디바이스 핑거프린트 — 대리 출석 차단
한 기기에서 여러 명이 출석하는 대리 출석을 탐지합니다.
동작 방식
브라우저의 User-Agent, 플랫폼, 타임존 정보를 조합하여 SHA-256 해시로 디바이스 고유 식별자를 생성합니다.
같은 세션에서 같은 디바이스 핑거프린트로 다른 사람이 출석하면 즉시 탐지됩니다.
평가·학습 과정에서도 동일 적용
출석뿐 아니라 온라인 학습, 평가 과정에서도 디바이스 핑거프린트를 추적합니다.
- 평가 중 IP 변경 탐지
- 학습 중 하트비트 IP 이상 탐지
- 60분 내 8개 이상 유닛 완료 시 비정상 학습 플래그
4단계: 시간 이상 탐지 — 비정상 패턴 감지
새벽 시간 출석
새벽 2시~6시 사이의 출석은 자동으로 플래그됩니다. 보수교육이 이 시간에 진행되는 경우는 거의 없기 때문입니다.
연속 시도 제한
5분 이내에 3회 이상 출석 시도가 발생하면 부정행위 의심으로 차단됩니다.
FDS: 부정행위 점수화 시스템
4가지 검증은 개별적으로도 작동하지만, **FDS(Fraud Detection System)**가 종합 점수를 산출합니다.
점수 체계
각 검증 항목이 0.0~1.0 사이의 점수를 반환합니다.
| 검증 항목 | 정상 | 의심 | 차단 |
|---|---|---|---|
| 연속 시도 | 0.0 (1회) | 0.1 (2회) | 0.8 (3회+) |
| 디바이스 중복 | 0.0 | — | 0.6 |
| GPS 스푸핑 | 0.0 | 0.4 (정확도 이상) | 0.9 (순간이동) |
| 시간 이상 | 0.0 | 0.2 (새벽) | — |
판정 기준
종합 점수에 따라 3단계로 판정됩니다.
- VERIFIED (0.3 미만): 정상 출석 — 기록 완료
- FLAGGED (0.3~0.7): 의심 — 출석은 기록하되 관리자에게 알림
- BLOCKED (0.7 초과 또는 HIGH 심각도): 차단 — 출석 거부
관리자 대시보드
FDS 대시보드에서 관리자는 다음을 실시간으로 확인할 수 있습니다.
- 부정행위 의심 이벤트 목록
- 심각도별 필터 (CRITICAL, HIGH, MEDIUM, LOW)
- 위험 수강생 상위 20명
- 기간별 통계
DPU: 출석이 증명이 되는 순간
여기까지는 "부정행위를 막는 것"입니다. 크로노젠 LMS는 한 걸음 더 나아갑니다.
모든 출석 기록을 DPU 해시 체인에 연결합니다.
출석 → 증거 변환 과정
- 수강생이 QR 스캔 + GPS 검증 통과
- FDS 점수 산출 → VERIFIED 판정
- 출석 기록 생성 (GPS/QR 플래그, 디바이스 정보 포함)
- SHA-256 해시 체인에 연결 (이전 해시 + 현재 내용 + 타임스탬프)
- OPS DPU API로 비동기 전송 → 크로노젠 증거 엔진에 기록
해시 체인 구조
세션별로 해시 체인이 형성됩니다.
Genesis (첫 출석)
→ hash: SHA-256("출석내용" + "GENESIS" + "2026-03-08T09:00:00")
출석 #2
→ hash: SHA-256("출석내용" + "이전hash" + "2026-03-08T09:01:23")
출석 #3
→ hash: SHA-256("출석내용" + "이전hash" + "2026-03-08T09:02:45")
하나의 출석 기록을 변조하면 그 이후의 모든 해시가 깨집니다.
감사 시 활용
HRD-Net 감사에서 "이 수강생이 실제로 출석했는가?"라는 질문에 대해:
- 출석 시각, GPS 좌표, QR 검증 결과, FDS 점수를 포함한 증거
- 해시 체인으로 사후 변조 불가능 증명
- JSON-LD 형식으로 외부 독립 검증 가능
EMON 연동: HRD-Net 규제 준수
크로노젠 LMS는 한국고용정보원의 EMON(전자모니터링) 시스템과 연동됩니다.
자동 보고 항목
- 학습 진도: 과목별 시작·종료 시각, 유효 학습 시간, IP 주소, 인증 방식
- 평가 결과: 평가 유형, 점수, 제출 시각, 표절 여부
- 수료 처리: 진도율, 평가 평균, 수료일, 수료증 번호
테넌트별 설정
멀티테넌트 구조이므로 훈련기관마다 독립적인 EMON 설정을 가집니다.
- 기관별 API 키, 기관 ID
- EMON 활성화/비활성화 선택
- 연동 장애 시 자동 재시도 (graceful degradation)
전체 흐름 요약
수강생: QR 스캔
↓
QR 검증: TOTP 30초 윈도우 + HMAC 서명
↓
GPS 검증: 거리 계산 + 스푸핑 탐지
↓
디바이스 검증: 핑거프린트 중복 확인
↓
시간 검증: 이상 패턴 감지
↓
FDS 종합 판정: VERIFIED / FLAGGED / BLOCKED
↓
출석 기록 생성 + SHA-256 해시 체인 연결
↓
DPU 증거 엔진 전송 (비동기)
↓
EMON 보고 (HRD-Net 연동)
QR 하나 스캔하는 동안 이 모든 것이 실시간으로 처리됩니다. 수강생 경험은 단순하지만, 뒤에서는 4중 보안 + 증거 체인 + 규제 보고가 동시에 작동합니다.
왜 이 구조가 중요한가
단순 QR 출석은 아무나 만들 수 있습니다. 하지만 위변조를 막고, 증명하고, 규제를 충족하는 출석 시스템은 다릅니다.
크로노젠 LMS의 출석 시스템은 세 가지를 동시에 해결합니다.
- 보안: 4중 검증으로 부정행위 실시간 차단
- 증명: DPU 해시 체인으로 출석 사실의 사후 검증 가능
- 규제: EMON 연동으로 HRD-Net 전자모니터링 자동 충족
이것이 "QR 출석 앱"과 "출석 증명 플랫폼"의 차이입니다.