작동 시나리오
Last updated
Last updated
APP을 처음 설치하면 병사 정보를 입력하는 페이지가 나온다.
정보를 입력하고 등록 버튼을 누르면 병사 정보를 서버에 전송한다.
서버는 병사 정보를 저장하면서 40자리 숫자로 이루어진 UUID 값을 생성해 서버에 저장한다. 그리고 응답으로 UUID 값을 APP에게 전송한다.
앱은 응답받은 UUID 값을 저장해둔다. 추후에 이 UUID 값은 Time-based OTP 생성에 필요한 seed 값으로 사용한다.
App에서 반납 버튼을 누르면. "기기 정보, TOTP 값 등"을 표현하는 QR Code를 생성한다.
TOTP는 현재 시간을 기준으로 기기에 저장되어 있는 seed 값을 이용하여 생성한다.
짧은 딜레이(10초)가 지날 때마다 화면의 QR코드도 흐른 시간에 맞추어 변경된다.
라즈베리파이에서 문 닫힘이 감지되면, 일정 시간(10초)이 지난 뒤에 카메라를 활성화하여 QR코드를 감지하기 시작한다.
반납하는 사람에게 노출된 QR코드가 아닌 시간이 지나고 난 후 다른 QR코드가 표시된 것을 인식하도록 하기 위함!
라즈베리파이는 감지한 QR코드를 해독하여 기기 번호, 관리자 번호, TOTP 값을 추출한다.
기기 번호, TOTP 값과 인식한 당시 시간을 서버에 전송한다.
서버는 TOTP 값과 인식한 당시 시간을 이용해 올바른 TOTP 값인지를 검증한다.
서버는 응답으로 검증 성공 여부를 반납기에 전송한다.
검증에 성공한 경우, 반납기는 서버에게 기기 종류, 반납한 시간, 무게 정보, 기기 사진을 전송한다.
서버는 해당 반납 기록을 저장한다.
핸드폰 사진과 무게 정보를 이용하여 병사가 등록되어있지 않는 기기를 몰래 반입해 제출하는 일명 투폰을 방지하는데 사용한다.