내가 몇몇 일을 봐주고 있는 회사 하나가 층별 출입 통제로 세콤 지문 단말을 사용하고 있었는데, 사옥을 리모델링하면서 8층은 엘리베이터에서 바로 접근이 가능해졌다.
그래서 엘리베이터에 8층 버튼은 그냥 눌러선 눌리지 않고, 지문 인증시에만 작동하도록 설치가 되어있었다.
그렇게 별 생각없이 살고 있었는데, 건물 관리 담당 직원을 보니 신규 직원 입퇴사시마다 건물 관리 보안용으로 세콤에 사용자 등록을 하고, 또 8층 엘리베이터 용으로 신규 직원들을 매번 모아 관리실에 가서 지문 등록을 또 따로 해주고 있더라.
지문 단말기는 Suprema 사의 BioStation L2 라는 장비로, 글 작성 시점 기준으론 지원 종료된 단말기이다.
관리실에는 Windows 서버, 엘리베이터에 장착된 L2 단말기, 등록용 L2 단말기와 이들을 연결하는 공유기로 구성되어 있다.

담당 직원이 매번 관리실로 가야하는 이 비효율과 퇴사 지원의 관리 문제, 그냥 시스템에 대한 관심이 생겨서, 개선할 방법이 없나 이래저래 살펴보았다.
서버 PC 에 어떻게 하는지 살펴보니, 웹브라우저로 관리 페이지에 접속해서 사용자 등록, 등록 과정에서 지문 스캔을 누르면 옆에 있는 등록용 단말기가 반응하고, 지문을 입력할 수 있는 구조였다.
서버 PC 에선 로컬에 MariaDB, java 등을 설치하고 웹 서버가 구동되고 있었고, 서버 내 DB 정보를 단말기 간에 동기화 해준다. 서버가 꺼져있어도 각 단말기는 직전 동기화 정보 기준으로 정상 작동함.

그리고 엘리베이터까지 뜯어보진 않았지만,, 단말기 뒷쪽을 보면 전원, LAN, 릴레이 신호 출력 등을 연결할 수 있는 웨이퍼 커넥터들이 달려있다.
웹 장치 설정을 보면, 특정 이벤트마다 어떤 동작이 수행될지 정의할 수 있는데, 카드 / 지문 / PIN 등 각각 인증 성공시 릴레이로 신호 출력을 걸어둘 수 있다. 릴레이 출력에 문 개폐 등의 장치를 연결해두는 식인 듯. 우리는 엘리베이터에 8층이 눌리도록 배선되어 있겠지?


또한 서버 PC 로컬에 설치된 MariaDB 엔 접속해보면 사용자 관련 데이터는 암호화되어 있어서 DB 직접 접근은 조금 제한되지만 이 서버는 감사하게도 API 를 제공한다.
단, 기본 웹서버는 로컬만 바인드하고 있기 때문에, BioStar 2 Setting 이라는 프로그램을 실행해서 Unified Gateway 를 실행해주면 nginx 를 통해 웹서버가 다시 구동된다.
내 기억엔 이 과정에서 전체 인터페이스로 바인드 했던 것으로 기억.. 아니라도 nginx 는 설정 파일 변경이 용이하니 설치 디렉토리에서 nginx 를 찾아 설정을 변경해주자.

이제 해당 PC 로의 접근이 가능하다면, BioStar X API 문서를 참고하여 시스템을 제어할 수 있다.
위의 BioStar 2라는, 제어용 웹사이트 자체도 이 API 를 기반으로 작동하는 듯?
API 가 완벽한건 아닌 것 같지만,,, 사용자 목록 조회, 사용자 수정(지문 추가 등)/비활성화/삭제, 기기로 지문 스캔 요청 등은 모두 가능하다.
사용자 관리야 그러려니하고, 지문 등록 기준으론 다음 과정을 거치면 된다. 한개의 지문(fingerprint)은 등록시 2개의 스캔 결과(template)가 필요하다.
- 지문 스캔 두번 - Scan Fingerprint
- API 를 호출하면, 요청에서 선택한 기기로 지문 인식해달라는 메시지가 바로 표시된다.
- 정상 스캔시 지문의 퀄리티가 기준치를 충족하는지 확인. Web 에서 기본값은 80인 듯, API 이용한다면 직접 검증 필요
- 이미 등록된 지문과 일치하는 template인지 확인 - Verify Duplicate Fingerprint
- 스캔한 2개의 지문(template)이 동일한 지문이 맞는지 검증 - Verify Fingerprint Scan
- 사용자 정보에 해당 지문(2개의 template 쌍) 추가하여 수정 - User: Update
- fingerprint_templates 에 기존값 포함하여 추가
이제 제어는 되었고, 매번 관리실로 내려가는 수고를 덜기 위해, 등록용 단말기를 사무실로 가지고 올라와야한다.
서버 PC 와 같은 망에 있어야 하니, 사무실과 관리실까지 건물 내부 EPS 실에서 랜선을 내리니 마니 쌩쑈를 하다가,,

관리실의 서버PC 로 공유기에서 포트포워딩을 해두고, 장비에서 서버의 주소를 공인 IP 로 설정해버렸다.
‘장치에서 서버 연결’이 활성화되어있으면, 단말기에서 서버주소:포트/tcp 로 연결을 요청하고, 연결이 끊겼을 땐 10초? 30초? 잘 기억 안나는데 그 정도 텀을 두고 서버 연결을 시도한다.
장치 포트는 어디 쓰는지 모르겠고 서버 포트 하나만 사용함. 아마 장치에서 서버 연결을 끄면 쓰일 수도 있을 것 같은데, 굳이 테스트해보진 않았다.
연결 성공시 30초 단위로 ping 을 보내면서 연결을 유지하고, 서버에서 지문 인증 요청 등 요청을 보내면 이 채널을 통해서 단말로 명령을 보내고 단말이 작동하는 구조.
등록용 단말기를 테스트한다고 집으로 가져왔는데, 여기서도 잘 작동하는 것을 확인…ㅎㅎㅎ
이제 관리실에 내려가지 않고도 지문 등록이 가능해졌다. 다만 서버 컴퓨터가 항상 켜져있어야 한다는 제약이 생김..
이대로만 끝냈으면 글을 쓰지도 않았을 것,, 시스템 자체에 관심이 생겨서 좀 더 살펴봤다.
DB 암·복호화
로컬에 설치된 DB 는 어찌저찌 접속해도, 사용자 정보에 관한 부분은 대부분 암호화되어 있다.
사실 API 로 가져오면 되니까 크게 필요는 없기도 하다.
이 DB를 그대로 쓴다면, 기기 동기화 시켜야하니 API 호출이 어차피 필요하고, BioStar 서버 자체를 안쓰겠다면 DB 암호화를 깰 필요도 없으니.. 그래도 일단 작업해본 김에 간단하게 기록삼아.
눈으로 보이다시피, &@~ 로 시작하면 암호화된 데이터이고, AES + PKCS7 패딩으로 이루어져있다.
BioStar 설치 폴더/util/enckey 에 BioStar.secure_communication.encryption_key 로 암호화를 하는데, 이 키를 그대로 쓰진 않고 여기다가 xor 및 시저 암호를 간단히 적용하여 key, iv 를 만들어낸다.
이 후 각 record 를 복호화하면 됨.
프로토콜 분석
Suprema 는 위에서 내가 사용한, BioStar 2 서버를 사용하지 않고도 단말기를 제어할 수 있게 Device SDK 란걸 제공한다.
관련 문서는 BioStar Device SDK 에서 확인할 수 있고, 샘플 코드와 Windows/Linux 각 32bit/64bit 라이브러리를 제공한다. (ARM은 없지만…)
위에서 얘기한, ‘장치에서 서버 연결’ 를 설정해두면 기기에서 서버의 tcp 포트로 소켓을 연결한다. 초기 키 교환 이후 요청은 AES로 암호화하여 주고받는다.
- 서버는 연결되자마자 32B source_key 를 고정 키로 암호화하여 응답 반환
- 장비는 source_key 를 해싱하여 key, iv 생성, 이 후 상호 통신 간엔 AES-256-CBC 로 암호화하여 통신
- 평문 20B + 암호화 데이터{ 헤더 16B + Payload }
SDK 에 통신 프로토콜에 대한 구조는 없어서, SDK 없이 직접 구현은 좀 까다롭다.
그래도 최소 기능만 사용 기준으로 어찌저찌 거의 대부분 다 만든 것 같은데…
방금 새로 스캔한 지문이 이미 누군가에게 등록된 지문인지 확인할 방법이 없다ㅠ
이 기능 하나가 없어서 기껏 만든게 모두 도로묵...ㅠㅠㅠ
지문 template 분석
지문 검사를 내가 직접해줄 순 없을까? 싶기도 하고 이 쯤 오니 궁금해져서, 지문 template 데이터도 분석해봤다.
template은 지문 스캔 이미지를 일부 전처리한 후 융선과 특징점을 추출한 데이터로, 최대 384B 의 데이터를 base64 인코딩되어 있다.
설정상 ISO 나 ANSI378 이란 포맷도 있던데,, 현재 기본 값은 Suprema 포맷.
지문 이미지가 최대 288x320 로 만드는 듯 하고, 한 셀이 16px, 최대 18x20의 융선과 특징점으로 표현하고 있다. 세로는 20셀 고정에 가로는 14,16,18 등등 가변으로 사용하는 듯?

지문 원본 이미지는 회색 음영인 PGM 포맷이고, 설정에서 지문 - 이미지 표시 활성화시 단말 기기에서 바로 볼 수 있는 이미지이다.
이 raw 이미지는 스캔시 받을 수 있도록 API 구조에 있긴 한데, 실제로 이미지를 주진 않았던 같다. (이런식으로 API 가 뭔가 구멍이 하나씩 빠져있다..ㅠ) 난 SDK 구현 이용해서 가져옴.
웹이나 API 사용시 기본적으로 template 을 이미지로 변환한, 두번째 형태의 이미지를 준다.
template 구조를 분석하면 3번쨰 이미지를 자체적으로 생성할 수도 있음. 세부 구조 분석 결과는 생략.
분석한 구조를 바탕으로 자체 지문 매칭을 구현할 수 있을까,, 도 좀 고민해봤는데 쉽지도 않고 실제 작동과 차이도 발생할 것 같아서 일단 말았다ㅠㅜ
기껏 시간 투자했는데, 그냥 간단했던 API 방식으로 회귀하는 것으로...ㅠㅠㅠ
아직 만들진 않았는데, 자체 ERP 에 지문 등록 기능을 만들어두고 각자 직원이 스스로 직원 등록을 하게 진행할 예정이다.
보안 문제가 살짝 있을 순 있겠지만,, 이게 근태나 엄격한 시설 출입에 사용되는 것도 아니라서, 일단 괜찮을 듯?
'프로젝트 모음' 카테고리의 다른 글
| 전자책(EPUB) DRM 해제 (0) | 2026.02.22 |
|---|---|
| 카테고리 프롤로그 (0) | 2026.02.22 |

















