66
자체발간물 KISA-2012-0009 바이오인식시스템 시험 인증 해설서 2012. 7. 한국인터넷진흥원

바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

자체발간물 KISA-2012-0009

바이오인식시스템 시험ㆍ인증 해설서

2012 7

한국인터넷진흥원

- i -

목 차

제1장 K-NBTC 업무소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot1

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot1

2 기 효과 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot1

3 향후계획 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot2

제2장 K-NBTC 시험ㆍ인증 차 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

2 1단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot4

3 2-1단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot5

4 2-2단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot9

5 3단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot12

6 4단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

7 5단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

8 인증연장 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot21

제3장 표 합성 소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

2 표 합성 평가 상 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

3 시나리오 종류 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot23

4 SPI middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot26

5 테스트어서션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot27

6 주의할 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot35

제4장 지문인식 성능시험 소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

2 DLL 개발 방법 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

3 성능시험용 데이타베이스 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot41

제5장 얼굴인식 성능시험 소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot43

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot43

2 DLL 개발 방법 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot43

3 성능시험에서의 함수 호출 순서 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot47

4 주의사항 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot49

5 성능시험용 데이터베이스 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot49

6 자료구조 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot50

7 제 일 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot52

- ii -

표 목 차

【표 2-1】K-NBTC 시험인증 단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

【표 2-2】시험신청서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot5

【표 2-3】BCS(BioAPI Conformity Statement) middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot7

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보 middotmiddotmiddot9

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보 middot 10

【표 2-6】표 합성 사 시험 결과표 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot10

【표 2-7】 임장 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot13

【표 2-8】계약서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot14

【표 2-9】지문인식 얼굴인식 성능 인증기 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

【표 2-10】성능 시험항목 계산식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot19

【표 2-11】인증연장 신청서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot21

【표 3-1】BSP 제공 기능에 따른 시험 시나리오 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

【표 3-2】시험 시나리오에 따른 필수 함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot25

【표 3-3】SPI 함수 기능 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot26

【표 3-4】테스트어셔션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot28

【표 3-5】테스트어셔션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot32

【표 3-6】테스트어셔션의 라미터 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot33

【표 4-1】등록용 특징량 추출함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

【표 4-2】지문인식 센서종류 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

【표 4-3】비교용 특징량 추출함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot39

【표 4-4】비교용 함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot39

【표 4-5】지문인식 성능시험용 DB 구성정보 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot42

【표 5-1】얼굴인식 성능시험용 데이터베이스 구성 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot50

그 림 목 차

【그림 2-1】K-NBTC홈페이지 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot4

【그림 2-2】인증서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot20

- 1 -

제1장 K-NBTC 업무소개

1 개요

K-NBTC는 바이오인식정보시험센터(Korea National Biometric Test

Center)로 바이오인식시스템에 한 경쟁력 강화와 수출 진을 해

표 합성 성능시험에 한 시험 인증을 하는 국내 유일의 기 이다

K-NBTC는 한국인터넷진흥원(KISA)내에서 운 하고 있으며 국제표 화

기구인 ISOIEC JTC1 SC37(바이오인식)에서 제정한 국제표 에 따라

시험을 실시한다

2006년에 K-NBTC를 개소하여 BioAPI 표 합성 시험인증 서비스

제공을 시작으로 지문 얼굴인식 성능 시험ㆍ인증 서비스를 제공하고

있다 한 국내 KBA(Korea Biometric Association)와 아시아지역의

ABC(Asian Biometric Consortium) 등과 시험인증 방법 개선 표 화

력을 추진하고 있다

2 기 효과

K-NBTC에서 수행하는 바이오인식 시험ㆍ인증은 ISOIEC의 국제표

규격에 합한지를 시험하여 일정기 을 통과하면 KISA가 인증서를

발 한다

K-NBTC는 지문인식과 얼굴인식에 한 국내 DB를 구축하여 구나

DB를 이용하여 자사의 BioAPI 구 모드 알고리즘 성능에 해 시험을

할 수 있으며 이를 통해 자사의 제품이 국제표 규격에 얼마나 근 한지를

가늠할 수 있어 제품 경쟁력 향상의 기반이 될 수 있다

- 2 -

한 KISA의 바이오인식 인증서는 국내 유일의 바이오인식 분야 인증서로

인증서를 받은 BioAPI 알고리즘을 탑재한 제품 매시 홍보의 효과를

기 할 수 있다 한 바이오인식 제품 납품을 한 입찰 경쟁시 KISA의

인증서를 통해 품질의 우수성을 증명할 수 있다

실제로 국내 정부기 공공기 에 바이오인식 제품 입찰 경쟁시

KISA의 바이오인식 인증서 제출을 하면 가산 을 부여하는 곳도 있었다

다만 바이오인식 인증서 제출에 따른 가산 부여는 필수사항은 아니다

이에 KISA는 국내 정부 공공기 과 력하여 바이오인식 인증서

제출을 필수사항으로 하거나 는 가산 을 부여하는 방안에 해 논의

이다

3 향후계획

재 K-NBTC는 바이오인식 표 합성 지문 얼굴인식 성능에 한

시험ㆍ인증을 수행하고 있으며 앞으로 그 범 를 차 확 할 정이다

앞으로 K-NBTC는 홍채 정맥인식 분야 알고리즘의 성능에 한 시험

인증 시범서비스를 거친 후 본 서비스를 수행할 정이다

한 K-NBTC에서 발 하는 바이오인식 인증서는 해외 력을 통해

아시아 등 해외에서도 상호인정이 될 수 있도록 추진할 정이다

- 3 -

제2장 K-NBTC 시험ㆍ인증 차

1 개요

K-NBTC에서는 바이오인식 표 합성 성능에 해 시험 인증을

실시하며 아래와 같이 총 5단계로 구성된다 1단계 비에서 마지막 5단계

인증까지 약 3개월 정도 소요된다

【표 2-1】K-NBTC 시험ㆍ인증 단계

구 분 단 계 세부내용 참 조

1단계 비단계- (신청 정인) 시험 차 문의

- (KISA) 제반 차 안내3페이지

2

2-1 시험신청- (신청인) 시험 신청서 제출

- (KISA) 신청서 검토4~7페이지

2-2사

시험

합성

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 사 시험

8~10페이지

성능

- (KISA) 시험용 성능 DB를 제공

- (신청인) 시험용 성능 DB로

사 시험

단 DB는 K-NBTC내에서만 사용 가능

3단계 계약

- (신청인) 계약 제반 서류 비

제출

- (KISA) 계약 체결

11~16페이지

4단계 본시험

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 본시험

17페이지

5단계(본시험 통과시)

인증

- (KISA) 인증 원회 개최하여

인증 통과시 인증서 발17~19페이지

기타 인증연장- (신청인) 인증연장 신청서 제출

- (KISA) 검토 후 인증서 발20페이지

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 2: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- i -

목 차

제1장 K-NBTC 업무소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot1

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot1

2 기 효과 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot1

3 향후계획 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot2

제2장 K-NBTC 시험ㆍ인증 차 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

2 1단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot4

3 2-1단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot5

4 2-2단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot9

5 3단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot12

6 4단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

7 5단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

8 인증연장 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot21

제3장 표 합성 소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

2 표 합성 평가 상 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

3 시나리오 종류 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot23

4 SPI middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot26

5 테스트어서션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot27

6 주의할 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot35

제4장 지문인식 성능시험 소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

2 DLL 개발 방법 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

3 성능시험용 데이타베이스 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot41

제5장 얼굴인식 성능시험 소개 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot43

1 개요 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot43

2 DLL 개발 방법 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot43

3 성능시험에서의 함수 호출 순서 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot47

4 주의사항 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot49

5 성능시험용 데이터베이스 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot49

6 자료구조 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot50

7 제 일 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot52

- ii -

표 목 차

【표 2-1】K-NBTC 시험인증 단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

【표 2-2】시험신청서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot5

【표 2-3】BCS(BioAPI Conformity Statement) middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot7

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보 middotmiddotmiddot9

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보 middot 10

【표 2-6】표 합성 사 시험 결과표 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot10

【표 2-7】 임장 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot13

【표 2-8】계약서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot14

【표 2-9】지문인식 얼굴인식 성능 인증기 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

【표 2-10】성능 시험항목 계산식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot19

【표 2-11】인증연장 신청서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot21

【표 3-1】BSP 제공 기능에 따른 시험 시나리오 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

【표 3-2】시험 시나리오에 따른 필수 함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot25

【표 3-3】SPI 함수 기능 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot26

【표 3-4】테스트어셔션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot28

【표 3-5】테스트어셔션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot32

【표 3-6】테스트어셔션의 라미터 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot33

【표 4-1】등록용 특징량 추출함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

【표 4-2】지문인식 센서종류 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

【표 4-3】비교용 특징량 추출함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot39

【표 4-4】비교용 함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot39

【표 4-5】지문인식 성능시험용 DB 구성정보 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot42

【표 5-1】얼굴인식 성능시험용 데이터베이스 구성 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot50

그 림 목 차

【그림 2-1】K-NBTC홈페이지 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot4

【그림 2-2】인증서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot20

- 1 -

제1장 K-NBTC 업무소개

1 개요

K-NBTC는 바이오인식정보시험센터(Korea National Biometric Test

Center)로 바이오인식시스템에 한 경쟁력 강화와 수출 진을 해

표 합성 성능시험에 한 시험 인증을 하는 국내 유일의 기 이다

K-NBTC는 한국인터넷진흥원(KISA)내에서 운 하고 있으며 국제표 화

기구인 ISOIEC JTC1 SC37(바이오인식)에서 제정한 국제표 에 따라

시험을 실시한다

2006년에 K-NBTC를 개소하여 BioAPI 표 합성 시험인증 서비스

제공을 시작으로 지문 얼굴인식 성능 시험ㆍ인증 서비스를 제공하고

있다 한 국내 KBA(Korea Biometric Association)와 아시아지역의

ABC(Asian Biometric Consortium) 등과 시험인증 방법 개선 표 화

력을 추진하고 있다

2 기 효과

K-NBTC에서 수행하는 바이오인식 시험ㆍ인증은 ISOIEC의 국제표

규격에 합한지를 시험하여 일정기 을 통과하면 KISA가 인증서를

발 한다

K-NBTC는 지문인식과 얼굴인식에 한 국내 DB를 구축하여 구나

DB를 이용하여 자사의 BioAPI 구 모드 알고리즘 성능에 해 시험을

할 수 있으며 이를 통해 자사의 제품이 국제표 규격에 얼마나 근 한지를

가늠할 수 있어 제품 경쟁력 향상의 기반이 될 수 있다

- 2 -

한 KISA의 바이오인식 인증서는 국내 유일의 바이오인식 분야 인증서로

인증서를 받은 BioAPI 알고리즘을 탑재한 제품 매시 홍보의 효과를

기 할 수 있다 한 바이오인식 제품 납품을 한 입찰 경쟁시 KISA의

인증서를 통해 품질의 우수성을 증명할 수 있다

실제로 국내 정부기 공공기 에 바이오인식 제품 입찰 경쟁시

KISA의 바이오인식 인증서 제출을 하면 가산 을 부여하는 곳도 있었다

다만 바이오인식 인증서 제출에 따른 가산 부여는 필수사항은 아니다

이에 KISA는 국내 정부 공공기 과 력하여 바이오인식 인증서

제출을 필수사항으로 하거나 는 가산 을 부여하는 방안에 해 논의

이다

3 향후계획

재 K-NBTC는 바이오인식 표 합성 지문 얼굴인식 성능에 한

시험ㆍ인증을 수행하고 있으며 앞으로 그 범 를 차 확 할 정이다

앞으로 K-NBTC는 홍채 정맥인식 분야 알고리즘의 성능에 한 시험

인증 시범서비스를 거친 후 본 서비스를 수행할 정이다

한 K-NBTC에서 발 하는 바이오인식 인증서는 해외 력을 통해

아시아 등 해외에서도 상호인정이 될 수 있도록 추진할 정이다

- 3 -

제2장 K-NBTC 시험ㆍ인증 차

1 개요

K-NBTC에서는 바이오인식 표 합성 성능에 해 시험 인증을

실시하며 아래와 같이 총 5단계로 구성된다 1단계 비에서 마지막 5단계

인증까지 약 3개월 정도 소요된다

【표 2-1】K-NBTC 시험ㆍ인증 단계

구 분 단 계 세부내용 참 조

1단계 비단계- (신청 정인) 시험 차 문의

- (KISA) 제반 차 안내3페이지

2

2-1 시험신청- (신청인) 시험 신청서 제출

- (KISA) 신청서 검토4~7페이지

2-2사

시험

합성

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 사 시험

8~10페이지

성능

- (KISA) 시험용 성능 DB를 제공

- (신청인) 시험용 성능 DB로

사 시험

단 DB는 K-NBTC내에서만 사용 가능

3단계 계약

- (신청인) 계약 제반 서류 비

제출

- (KISA) 계약 체결

11~16페이지

4단계 본시험

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 본시험

17페이지

5단계(본시험 통과시)

인증

- (KISA) 인증 원회 개최하여

인증 통과시 인증서 발17~19페이지

기타 인증연장- (신청인) 인증연장 신청서 제출

- (KISA) 검토 후 인증서 발20페이지

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 3: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- ii -

표 목 차

【표 2-1】K-NBTC 시험인증 단계 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot3

【표 2-2】시험신청서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot5

【표 2-3】BCS(BioAPI Conformity Statement) middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot7

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보 middotmiddotmiddot9

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보 middot 10

【표 2-6】표 합성 사 시험 결과표 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot10

【표 2-7】 임장 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot13

【표 2-8】계약서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot14

【표 2-9】지문인식 얼굴인식 성능 인증기 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot18

【표 2-10】성능 시험항목 계산식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot19

【표 2-11】인증연장 신청서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot21

【표 3-1】BSP 제공 기능에 따른 시험 시나리오 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot22

【표 3-2】시험 시나리오에 따른 필수 함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot25

【표 3-3】SPI 함수 기능 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot26

【표 3-4】테스트어셔션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot28

【표 3-5】테스트어셔션 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot32

【표 3-6】테스트어셔션의 라미터 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot33

【표 4-1】등록용 특징량 추출함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

【표 4-2】지문인식 센서종류 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot38

【표 4-3】비교용 특징량 추출함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot39

【표 4-4】비교용 함수 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot39

【표 4-5】지문인식 성능시험용 DB 구성정보 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot42

【표 5-1】얼굴인식 성능시험용 데이터베이스 구성 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot50

그 림 목 차

【그림 2-1】K-NBTC홈페이지 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot4

【그림 2-2】인증서 양식 middotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddotmiddot20

- 1 -

제1장 K-NBTC 업무소개

1 개요

K-NBTC는 바이오인식정보시험센터(Korea National Biometric Test

Center)로 바이오인식시스템에 한 경쟁력 강화와 수출 진을 해

표 합성 성능시험에 한 시험 인증을 하는 국내 유일의 기 이다

K-NBTC는 한국인터넷진흥원(KISA)내에서 운 하고 있으며 국제표 화

기구인 ISOIEC JTC1 SC37(바이오인식)에서 제정한 국제표 에 따라

시험을 실시한다

2006년에 K-NBTC를 개소하여 BioAPI 표 합성 시험인증 서비스

제공을 시작으로 지문 얼굴인식 성능 시험ㆍ인증 서비스를 제공하고

있다 한 국내 KBA(Korea Biometric Association)와 아시아지역의

ABC(Asian Biometric Consortium) 등과 시험인증 방법 개선 표 화

력을 추진하고 있다

2 기 효과

K-NBTC에서 수행하는 바이오인식 시험ㆍ인증은 ISOIEC의 국제표

규격에 합한지를 시험하여 일정기 을 통과하면 KISA가 인증서를

발 한다

K-NBTC는 지문인식과 얼굴인식에 한 국내 DB를 구축하여 구나

DB를 이용하여 자사의 BioAPI 구 모드 알고리즘 성능에 해 시험을

할 수 있으며 이를 통해 자사의 제품이 국제표 규격에 얼마나 근 한지를

가늠할 수 있어 제품 경쟁력 향상의 기반이 될 수 있다

- 2 -

한 KISA의 바이오인식 인증서는 국내 유일의 바이오인식 분야 인증서로

인증서를 받은 BioAPI 알고리즘을 탑재한 제품 매시 홍보의 효과를

기 할 수 있다 한 바이오인식 제품 납품을 한 입찰 경쟁시 KISA의

인증서를 통해 품질의 우수성을 증명할 수 있다

실제로 국내 정부기 공공기 에 바이오인식 제품 입찰 경쟁시

KISA의 바이오인식 인증서 제출을 하면 가산 을 부여하는 곳도 있었다

다만 바이오인식 인증서 제출에 따른 가산 부여는 필수사항은 아니다

이에 KISA는 국내 정부 공공기 과 력하여 바이오인식 인증서

제출을 필수사항으로 하거나 는 가산 을 부여하는 방안에 해 논의

이다

3 향후계획

재 K-NBTC는 바이오인식 표 합성 지문 얼굴인식 성능에 한

시험ㆍ인증을 수행하고 있으며 앞으로 그 범 를 차 확 할 정이다

앞으로 K-NBTC는 홍채 정맥인식 분야 알고리즘의 성능에 한 시험

인증 시범서비스를 거친 후 본 서비스를 수행할 정이다

한 K-NBTC에서 발 하는 바이오인식 인증서는 해외 력을 통해

아시아 등 해외에서도 상호인정이 될 수 있도록 추진할 정이다

- 3 -

제2장 K-NBTC 시험ㆍ인증 차

1 개요

K-NBTC에서는 바이오인식 표 합성 성능에 해 시험 인증을

실시하며 아래와 같이 총 5단계로 구성된다 1단계 비에서 마지막 5단계

인증까지 약 3개월 정도 소요된다

【표 2-1】K-NBTC 시험ㆍ인증 단계

구 분 단 계 세부내용 참 조

1단계 비단계- (신청 정인) 시험 차 문의

- (KISA) 제반 차 안내3페이지

2

2-1 시험신청- (신청인) 시험 신청서 제출

- (KISA) 신청서 검토4~7페이지

2-2사

시험

합성

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 사 시험

8~10페이지

성능

- (KISA) 시험용 성능 DB를 제공

- (신청인) 시험용 성능 DB로

사 시험

단 DB는 K-NBTC내에서만 사용 가능

3단계 계약

- (신청인) 계약 제반 서류 비

제출

- (KISA) 계약 체결

11~16페이지

4단계 본시험

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 본시험

17페이지

5단계(본시험 통과시)

인증

- (KISA) 인증 원회 개최하여

인증 통과시 인증서 발17~19페이지

기타 인증연장- (신청인) 인증연장 신청서 제출

- (KISA) 검토 후 인증서 발20페이지

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 4: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 1 -

제1장 K-NBTC 업무소개

1 개요

K-NBTC는 바이오인식정보시험센터(Korea National Biometric Test

Center)로 바이오인식시스템에 한 경쟁력 강화와 수출 진을 해

표 합성 성능시험에 한 시험 인증을 하는 국내 유일의 기 이다

K-NBTC는 한국인터넷진흥원(KISA)내에서 운 하고 있으며 국제표 화

기구인 ISOIEC JTC1 SC37(바이오인식)에서 제정한 국제표 에 따라

시험을 실시한다

2006년에 K-NBTC를 개소하여 BioAPI 표 합성 시험인증 서비스

제공을 시작으로 지문 얼굴인식 성능 시험ㆍ인증 서비스를 제공하고

있다 한 국내 KBA(Korea Biometric Association)와 아시아지역의

ABC(Asian Biometric Consortium) 등과 시험인증 방법 개선 표 화

력을 추진하고 있다

2 기 효과

K-NBTC에서 수행하는 바이오인식 시험ㆍ인증은 ISOIEC의 국제표

규격에 합한지를 시험하여 일정기 을 통과하면 KISA가 인증서를

발 한다

K-NBTC는 지문인식과 얼굴인식에 한 국내 DB를 구축하여 구나

DB를 이용하여 자사의 BioAPI 구 모드 알고리즘 성능에 해 시험을

할 수 있으며 이를 통해 자사의 제품이 국제표 규격에 얼마나 근 한지를

가늠할 수 있어 제품 경쟁력 향상의 기반이 될 수 있다

- 2 -

한 KISA의 바이오인식 인증서는 국내 유일의 바이오인식 분야 인증서로

인증서를 받은 BioAPI 알고리즘을 탑재한 제품 매시 홍보의 효과를

기 할 수 있다 한 바이오인식 제품 납품을 한 입찰 경쟁시 KISA의

인증서를 통해 품질의 우수성을 증명할 수 있다

실제로 국내 정부기 공공기 에 바이오인식 제품 입찰 경쟁시

KISA의 바이오인식 인증서 제출을 하면 가산 을 부여하는 곳도 있었다

다만 바이오인식 인증서 제출에 따른 가산 부여는 필수사항은 아니다

이에 KISA는 국내 정부 공공기 과 력하여 바이오인식 인증서

제출을 필수사항으로 하거나 는 가산 을 부여하는 방안에 해 논의

이다

3 향후계획

재 K-NBTC는 바이오인식 표 합성 지문 얼굴인식 성능에 한

시험ㆍ인증을 수행하고 있으며 앞으로 그 범 를 차 확 할 정이다

앞으로 K-NBTC는 홍채 정맥인식 분야 알고리즘의 성능에 한 시험

인증 시범서비스를 거친 후 본 서비스를 수행할 정이다

한 K-NBTC에서 발 하는 바이오인식 인증서는 해외 력을 통해

아시아 등 해외에서도 상호인정이 될 수 있도록 추진할 정이다

- 3 -

제2장 K-NBTC 시험ㆍ인증 차

1 개요

K-NBTC에서는 바이오인식 표 합성 성능에 해 시험 인증을

실시하며 아래와 같이 총 5단계로 구성된다 1단계 비에서 마지막 5단계

인증까지 약 3개월 정도 소요된다

【표 2-1】K-NBTC 시험ㆍ인증 단계

구 분 단 계 세부내용 참 조

1단계 비단계- (신청 정인) 시험 차 문의

- (KISA) 제반 차 안내3페이지

2

2-1 시험신청- (신청인) 시험 신청서 제출

- (KISA) 신청서 검토4~7페이지

2-2사

시험

합성

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 사 시험

8~10페이지

성능

- (KISA) 시험용 성능 DB를 제공

- (신청인) 시험용 성능 DB로

사 시험

단 DB는 K-NBTC내에서만 사용 가능

3단계 계약

- (신청인) 계약 제반 서류 비

제출

- (KISA) 계약 체결

11~16페이지

4단계 본시험

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 본시험

17페이지

5단계(본시험 통과시)

인증

- (KISA) 인증 원회 개최하여

인증 통과시 인증서 발17~19페이지

기타 인증연장- (신청인) 인증연장 신청서 제출

- (KISA) 검토 후 인증서 발20페이지

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 5: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 2 -

한 KISA의 바이오인식 인증서는 국내 유일의 바이오인식 분야 인증서로

인증서를 받은 BioAPI 알고리즘을 탑재한 제품 매시 홍보의 효과를

기 할 수 있다 한 바이오인식 제품 납품을 한 입찰 경쟁시 KISA의

인증서를 통해 품질의 우수성을 증명할 수 있다

실제로 국내 정부기 공공기 에 바이오인식 제품 입찰 경쟁시

KISA의 바이오인식 인증서 제출을 하면 가산 을 부여하는 곳도 있었다

다만 바이오인식 인증서 제출에 따른 가산 부여는 필수사항은 아니다

이에 KISA는 국내 정부 공공기 과 력하여 바이오인식 인증서

제출을 필수사항으로 하거나 는 가산 을 부여하는 방안에 해 논의

이다

3 향후계획

재 K-NBTC는 바이오인식 표 합성 지문 얼굴인식 성능에 한

시험ㆍ인증을 수행하고 있으며 앞으로 그 범 를 차 확 할 정이다

앞으로 K-NBTC는 홍채 정맥인식 분야 알고리즘의 성능에 한 시험

인증 시범서비스를 거친 후 본 서비스를 수행할 정이다

한 K-NBTC에서 발 하는 바이오인식 인증서는 해외 력을 통해

아시아 등 해외에서도 상호인정이 될 수 있도록 추진할 정이다

- 3 -

제2장 K-NBTC 시험ㆍ인증 차

1 개요

K-NBTC에서는 바이오인식 표 합성 성능에 해 시험 인증을

실시하며 아래와 같이 총 5단계로 구성된다 1단계 비에서 마지막 5단계

인증까지 약 3개월 정도 소요된다

【표 2-1】K-NBTC 시험ㆍ인증 단계

구 분 단 계 세부내용 참 조

1단계 비단계- (신청 정인) 시험 차 문의

- (KISA) 제반 차 안내3페이지

2

2-1 시험신청- (신청인) 시험 신청서 제출

- (KISA) 신청서 검토4~7페이지

2-2사

시험

합성

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 사 시험

8~10페이지

성능

- (KISA) 시험용 성능 DB를 제공

- (신청인) 시험용 성능 DB로

사 시험

단 DB는 K-NBTC내에서만 사용 가능

3단계 계약

- (신청인) 계약 제반 서류 비

제출

- (KISA) 계약 체결

11~16페이지

4단계 본시험

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 본시험

17페이지

5단계(본시험 통과시)

인증

- (KISA) 인증 원회 개최하여

인증 통과시 인증서 발17~19페이지

기타 인증연장- (신청인) 인증연장 신청서 제출

- (KISA) 검토 후 인증서 발20페이지

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 6: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 3 -

제2장 K-NBTC 시험ㆍ인증 차

1 개요

K-NBTC에서는 바이오인식 표 합성 성능에 해 시험 인증을

실시하며 아래와 같이 총 5단계로 구성된다 1단계 비에서 마지막 5단계

인증까지 약 3개월 정도 소요된다

【표 2-1】K-NBTC 시험ㆍ인증 단계

구 분 단 계 세부내용 참 조

1단계 비단계- (신청 정인) 시험 차 문의

- (KISA) 제반 차 안내3페이지

2

2-1 시험신청- (신청인) 시험 신청서 제출

- (KISA) 신청서 검토4~7페이지

2-2사

시험

합성

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 사 시험

8~10페이지

성능

- (KISA) 시험용 성능 DB를 제공

- (신청인) 시험용 성능 DB로

사 시험

단 DB는 K-NBTC내에서만 사용 가능

3단계 계약

- (신청인) 계약 제반 서류 비

제출

- (KISA) 계약 체결

11~16페이지

4단계 본시험

- (신청인) 표 규격에 맞는 DLL

개발 후 제출

- (KISA) 제출된 DLL로 본시험

17페이지

5단계(본시험 통과시)

인증

- (KISA) 인증 원회 개최하여

인증 통과시 인증서 발17~19페이지

기타 인증연장- (신청인) 인증연장 신청서 제출

- (KISA) 검토 후 인증서 발20페이지

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 7: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 4 -

2 1단계 ( 비단계)

신청 정인은 가장 먼 K-NBTC에서 수행하는 바이오인식 표 합

성 성능에 한 시험 인증이 어떤 차로 진행되는지 홈페이지 는

KISA 담당자에게 문의하여 알아볼 수 있다

K-NBTC 홈페이지는 ldquoknbtckisaorkrrdquo 이며 해당 홈페이지에서 시험ㆍ

인증 련 자료 차 인증된 제품들을 조회할 수 있다

【그림 2-1】K-NBTC 홈페이지

한 K-NBTC 련 담당자에게 직 연락해서 안내받을 수 있다

- 연락처 화번호 02-405-6631 이메일 bioapikisaorkr

그 외 사 약속 후 K-NBTC를 직 방문하여 안내받을 수 있다

- 주소 서울시 송 구 로 109 는 가락동 78 IT 벤처타워 서 8층

ldquohttpwwwkisaorkrintromap01jsprdquo 참조

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 8: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 5 -

3 2-1단계 (시험신청)

신청 정인은 아래 표의 시험신청서를 작성하여 KISA의 K-NBTC

담당자에게 메일(bioapikisaorkr)로 제출한다

【표 2-2】시험신청서 양식

접수번호

제 호 시험신청서(1)

신 청 인

① 신청형태 단독신청 공동신청

② 상 호 ③ 구 분 제조자 판매자

수입자

④ 주 소-

⑤ 대 표 자

성 명사업자등록번호

⑥ 담 당 자 연 락 처

전 화

팩 스

전자우편

시 험 대 상

제 품

⑦ 적용시험 성능 표준적합성

⑧ 제 품 명

시스템명⑨ 제품번호

⑩ 개발 국가 ⑪ 개발자명

⑫ 신청구분 최초시험 재시험 ⑬ 기술 분야 얼굴 지문

⑭ 인증번호

983689983703 결과보고 공인성적서 비공인성적서 시험결과통보

국문 영문

제출물목록

제품매뉴얼 1부(Hardcopy File)

시험대상 제품 1개

센서 1개

바이오인식시스템 시험인증지침에 의하여 상기와 같이 시험을 신청하며 기재사항에

허위사실이 없음을 확인합니다

년 월 일

신 청 인 (서명 또는 인)

한국인터넷진흥원장 귀하

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 9: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 6 -

시험신청서(2)

Items(항목) Contents

Company

Company (Eng)

CEO (Eng)

Address (Eng)

CI (Corporate

Identity) Image File(jpg gif 파일로 제출)

Description

Product

Name(Kor)

Name(Eng)

Version

Developer(Eng)

Description

Score

Max

Min

Threshold

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 10: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 7 -

Conformance subclass of the BSP (one of the following)

verification BSP

identification BSP

capture BSP

verification engine

identification engine

Optional functions supported by the BSP

(zero or more of the following)

BioSPI_Capture

BioSPI_CreateTemplate

BioSPI_Process

BioSPI_VerifyMatch

BioSPI_Enroll

BioSPI_Verify

BioSPI_Identify

Optional features supported by the BSP

(zero or more of the following)

BSP-controlled database

template adaptation

generation of SOURCE PRESENT events

setting of the Quality field in an intermediate BIR

setting of the Quality field in a processed BIR

Additional information

UUID of the BSP

BioAPI specification version

Product version

Supported BDB formats (one or more format owner

format type pairs)

Supported biometric types (one or more)

Maximum supported size for the payload

표 합성 시험일 경우에는 아래 표 2-3을 같이 첨부하여야 한다

【표 2-3】BCS(BioAPI Conformity Statement)

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 11: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 8 -

Test Assertion Parameters

_inserttimeout (msec)

_sourcepresenttimeout (msec)

_capturetimeout (msec)

_verifytimeout (msec)

_maxFMRRequested

_payloadPolicy

_supportPayload (or _payloadSupported) (truefalse)

_supportAuditData (truefalse)

_intermediateQualitySupported (truefalse)

_processedQualitySupported (truefalse)

_noSourcePresentSupported (truefalse)

_dbUuid (for DB)

_nbrRecords (for DB)

_readAccessRequest (for DB) (truefalse)

_writeAccessRequest (for DB) (truefalse)

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 12: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 9 -

4 2-2단계 (사 시험)

일반 으로 사 시험은 바이오인식 제품의 인증을 받기 한 사 단계로

자사의 제품이 표 합성이나 성능시험의 인증기 을 통과할 수 있는지

여부를 사 에 가늠하여 인증기 에 근 한지 여부를 단하기 함이다

그 외 연구 목 은 자사가 개발한 바이오인식 제품이 어느 정도 표 에

합한지 성능 수 을 악하기 해서 시험하는 경우가 존재한다 이

런 목 을 해서는 2-1단계 시험 신청 없이 K-NBTC 담당자에게 연락해

K-NBTC Lab을 이용해 시험할 수 있다

성능 사 시험은 신청인이 신청한 기술 분야(얼굴인식 는 지문인식)의

시험용 성능 DB를 KISA의 K-NBTC가 제공하고 신청인은 이를 이용하여

자사제품의 성능을 시험할 수 있다 얼굴인식 사 시험 성능용 DB 구성

정보는 아래와 같다

【표 2-4】사 성능시험에 사용되는 얼굴인식 DB 구성정보

구 분 내 용

인 원(명) 50명

Subset

Gallery(장) 50장 (Normal)

Probe(장)

조명방향

(8종류)표정(4종류) 포즈(3종류)

액세서리

(2종류)

400

(508)

200

(504)

150

(503)

100

(502)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는 표정 화난표정 감은 표정 놀란 표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

배경은 모두 블루 스크린만 사용 함

형식 - 이미지크기 640times480

- 일 포맷 비 압축 BMP(24비트) 압축 JPEG Thumbnail JPEG

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 13: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 10 -

지문인식 시험용 성능 DB는 총 3천장이 제공되며 구성정보는 아래와 같다

【표 2-5】사 성능시험에 사용되는 지문인식 DB 구성정보

센서

구성Sensor 1 Sensor 2 Sensor 3 Sensor4

Subject 150 150 150 150

Subject 당 상(장) 5 5 5 5

총 상(장) 750 750 750 750

상가로 x 세로크기(Pixel) 280x320 288x320 248x292 292x525

표 합성 사 시험은 신청인이 lsquo제3장 표 합성 소개rsquo에 기술한

내용에 따라 DLL 일을 개발하여 KISA에 제출하여야 하며 제출된

DLL 일은 시험기 인 K-NBTC에서 표 합성 Tool인

CTS(Conformance Test Suite)로 시험하여 그 결과를 아래 표와 같이

신청인에게 제공한다

구분①

VerificationBSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

시험결과1)

BioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits BioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle BioSPI_EnableEvents BioSPI_Capture BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify BioSPI_Cancel BioSPI_Free

【표 2-6】표 합성 사 시험 결과표

1 ) 시 험 결 과 P ass 또 는 Fa il로 표 기

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 14: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 11 -

이상과 같이 사 시험이 진행되며 표 합성 성능 사 시험 시

신청인은 꼭 KISA의 K-NBTC를 방문하여 직 이를 수행해야 한다

한 사 시험 단계를 건 띄고 곧바로 계약 본시험 진행도 가능

하지만 사 시험을 수행하는 것이 본시험에서 오류를 이고 인증에

걸리는 시간을 단축할 수 있다

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 15: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 12 -

5 3단계 (계약)

계약은 신청인이 인증을 받기 해서 신청인과 KISA간 상호 의무

권리를 규약하는 것이다

신청인은 계약을 해서 아래와 같은 서류를 비해야 한다

- 사업자등록증 사본 1부

- 등기부 등본 1부

- 인감증명서 1부

- 시국세완납증명서 1부

- 사용인감계 1부

- 임장 1부

상기에서 임장은 신청인이 속한 기 의 표가 KISA와 직 계약을

하지 않을 경우 즉 기 의 직원이 KISA와 계약을 수행할 경우에 필요한

서류로 신청인의 기 표가 직원에게 KISA와의 계약을 모두 임하는

것을 증명하는 서류이다 임장은 신청인의 기 내 사용하는 양식이

있으면 이를 이용하고 만약 없으면 표 2-7의 양식을 이용하면 된다

계약에 필요한 서류가 모두 비되면 신청인은 K-NBTC 담당자에게 이를

알리고 K-NBTC는 KISA내 계약을 담당하는 부서에게 계약 체결을 요청

한다 그러면 KISA 계약 담당부서는 신청인에게 계약에 련된 내용을

안내하고 상호 가능한 일자에 계약을 진행한다 계약에 걸리는 시간은

보통 1주일 정도 소요된다 신청인과 KISA간 계약에 사용되는 계약서는

표 2-8과 같다

본 계약을 통해 K-NBTC와 신청인간 바이오인식 시험ㆍ인증에 한 상호

의무 권리를 규약하게 되고 인증에 한 상호 신뢰성을 제고하게 된다

한 K-NBTC 바이오인식 시험ㆍ인증에 드는 비용은 무료이다

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 16: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 13 -

【표 2-7】 임장 양식

위 임 장

대리인

성명 주민등록번호

주소 TEL

위의 사람을 본인의 대리인으로 정하여

KISA(한국인터넷진흥원)와의

계약체결에 있어서 일체의 행위를 위임합니다

위임인

대표자사업자번호

회사명

주소 TEL

201X

위임인 (인)

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 17: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 14 -

【표 2-8】계약서 양식

표 준 계 약 서 (시험)

계 약 번 호 시험201X-XXX

계 약 명

제 품 명

평 가 수 수 료 ₩ 0원

신 청 등

계약이행장소 ldquo갑rdquo의 지정장소

본 계약은 신의와 성실로써 계약내용을 수할 것을 확약하고 ldquo갑rdquo과

ldquo을rdquo이 상호 서명날인한 날로 부터 그 효력이 발생하며 이를 증명하기 하여

계약서 2부를 작성하여 각각 1부씩 보 하기로 한다

201X년 X월 X일

ldquo진흥원rdquo

주소 서울시 송 구 가락동 78번지

상호 한국인터넷진흥원 화번호 02-4055-118

표자 (인)

ldquo신청인rdquo

주소

상호 화번호

표자 (인)

첨부 시험계약서

특이

사항 ⃞ 최 시험 ⃞ 재시험

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 18: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 15 -

시험계약서

시험신청 제품명

계약 당사자

(갑) 한국인터넷진흥원 원장

(을)

시험신청 제품(이하 ldquo제품rdquo이라 한다)에 한 시험을 하여 (갑)과

(을)은 다음과 같이 계약을 체결한다

제1조(목 ) 이 계약의 목 은 (갑)이 (을)의 신청에 의하여 제품시험을 수행

함에 있어 (갑)과 (을)의 권리와 의무를 명확히 정하는데 있다

제2조(신의성실) (갑)과 (을)은 제품의 시험이 원만히 이루어질 수 있도록

한국인터넷진흥원 원장이 정한 바이오인식시스템 시험인증지침(이하 ldquo시험

인증지침rdquo이라 한다) 본 계약서의 내용을 성실히 이행하여야 한다

제3조(시험수수료) ①(을)은 시험계약 체결을 하여 시험인증지침의 [별표 1]2)의

양식을 한 시험신청서를 제출하여야 한다

제4조(제출물 보완) ①(갑)이 시험을 하여 (을)에게 제출물 보완을 요청한

경우 (을)은 제출물 보완을 요청한 날로부터 10일 이내에 제출물을 보완

하여 (갑)에게 제출하여야 한다

②(갑)은 (을)이 제1항의 규정에 의한 기간 내에 제출물 보완을 아니한

때에는 추가로 제출물 보완을 요구할 수 있다 이 경우 제출물 보완의

기간은 10일로 한다

③ (갑)은 (을)이 제1항 제2항의 규정에 따라 기한 내에 제출물 보완을

하지 아니 하는 경우 는 동일사안의 보완사항에 하여 2회까지 제출물

보완이 되지 않는 경우에는 시험을 보류 는 단 할 수 있으며 이를

서면으로 통보한다

2) 별표 1 본 지침서 4~8 페이지 참조

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 19: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 16 -

제5조(제출물 보안유지 리) ① (갑)은 (을)이 시험을 해 제출한 모든

제출물을 안 하게 보 리할 책임을 진다 다만 천재지변 는 불가항력에

의하여 제출물이 손상되거나 유실된 경우에는 (갑)이 책임지지 아니한다

② (갑)은 (을)의 동의 없이 (을)이 제출한 제출물을 시험업무 이외의

목 으로 외부에 유출하거나 공개하여서는 아니 된다

③ (갑)은 시험이 완료되면 제출물을 해당 제품의 인증서 유효기간 동안 보

한다 다만 (을)의 귀책사유로 인하여 시험이 단되는 경우에 (갑)은

제품 제출물을 (을)에게 반환한다

④ 해당 제품의 인증서 유효기간이 만료된 경우 시험신청인과 의 하에

보 인 제출물을 반환 는 기한다

제6조( 조) ①(갑)은 효율 인 시험수행을 하여 필요한 경우 (을)이

사용한 형상 리도구 컴퓨터장비 시험도구 등을 (갑)이 (갑)의 시험실내

에서 사용할 수 있도록 (을)에게 업무 조를 요청할 수 있고 (을)은 최 한

조하여야 한다

②업체실사로 인한 출장에 소요되는 제반비용은 시험신청인이 부담하며

기 액은 한국인터넷진흥원 내규를 따른다

제7조(지 재산권 련분쟁) (갑)은 (을)이 제출한 시험제출물에 타인이

제작한 로그램의 무단도용 제출문서를 무단복제 하는 등 타인의

지 재산권을 침해함으로 인한 분쟁 발생 시 이와 련하여 아무런 책임도

지지 않는다

제8조(계약의 해지) (갑)은 다음 각호의 사항이 발생한 때에는 계약을 해지한다

1 (을)이 산 부도 해산 등으로 인하여 시험을 계속하여 진행할 수 없는 경우

2 (을)이 자발 으로 시험을 철회하는 경우

제9조(권리의무 승계) (을)의 유고와 같은 불가항력 인 사정으로 인하여

(을)이 (을)권리 의무를 수행할 수 없을 때에는 (갑)의 동의하에 본

계약의 부 는 일부를 타인에게 양도할 수 있다

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 20: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 17 -

제10조(분쟁의 해결) ① 본 계약의 수행 (갑)과 (을)간에 발생하는 분쟁은

의에 의하여 해결한다

② 제1항의 규정에 불복하는 경우에는 인증기 과 의하에 해결한다

③ 제2항의 규정에 불복하는 경우에는 (갑)의 소재지를 할하는 법원

의 결에 의한다

제11조(계약의 효력) 본 계약은 방이 서명날인한 날로부터 인증을 종료한

시 까지 유효하다

제12조(기타사항) 본 계약서는 2부를 작성하여 (갑)과 (을)이 각기 기명날

인하여 각각 1부씩 보 한다

201X년 X월 X일

(갑) 한국인터넷진흥원 원장 (직 인)

주 소 서울시 송 구 가락동 78번지

(을) (인)

주 소

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 21: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 18 -

6 4단계 (본시험)

본시험을 해서는 신청인이 원하는 시험ㆍ인증 기술 분야에 따라

DLL 일을 개발 후 K-NBTC 담당자에게 제출하여야 한다

표 합성 성능의 각 기술 분야에 따른 DLL을 만드는 방법은

3장~5장에 기술되어 있는 내용을 수하여야 한다

- 표 합성 제3장 표 합성 소개

- 지문인식 제4장 지문인식 성능시험 소개

- 얼굴인식 제5장 얼굴인식 성능시험 소개

7 5단계 (인증)

본시험에서는 표 합성의 경우 요구되는 필수 SPI가 모두 구 되어

야 하며 지문인식과 얼굴인식 성능의 경우는 아래 표 2-9에서 요구하

는 인증기 을 통과해야 한다

즉 지문인식과 얼굴인식에서 사용되는 인증기 은 EER(Equal Error

Rate)을 사용하며 FTE(Failure to Enroll Rate) FTA(Failure to Acquire

Rate)로부터 FAR(False Accept Rate) FRR(False Reject Rate)

FMR(False Match Rate) FNMR(False Non-Match Rate)을 도출하여

계산된다

EER 값은 KISA 내부 외부 문가로 구성된 K-NBTC 인증 원회를

통해 결정되며 시장상황 표 변화에 따라 그 값이 변화한다 2011년

에 결정된 지문인식 얼굴인식의 성능기 은 다음과 같다

【표 2-9】지문인식 얼굴인식 성능 인증기

분야 구분 기

지문인식 EER() 1내외

얼굴인식 EER()조명 표정 포즈 액세서리

1내외 2내외 2내외 15내외

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 22: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 19 -

EER 련 값의 자세한 내용은 아래 표와 같다

【표 2-10】성능 시험항목 계산식

항목 세부내용

FAR

- 타인수락율(오수락율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 다름에도

불구하고 동일한 사용자로 잘못 정하여 타인을 수락하는 오류의 비율

FAR = FMRtimes(1-FTA)

FRR

- 본인거부율(오거부율)

- 바이오인식시스템이 인증하려는 사용자와 등록된 사용자가 동일함에도

불구하고 다른 사용자로 잘못 정하여 본인을 거부하는 오류의 비율

FRR = FTA + FNMRtimes(1-FTA)

FMR

- 타인 수락율

- 타인의 시도(NI Number of Imposter Recog- nition Attempts)에

해 임계 값(t) 이상으로 나타나는 정합 함수(sim Imposter

Matching Score)를 가진 타인의 비율

FM R (t ) =ca rd sim |sim e t

N I card(집합의 원소개수)

FNMR

- 본인 거부율

- 본인의 시도(NG Number of Genuine Recog- nition Attempts)에

한 어떤 임계 값(t) 미만 보이는 정합 함수(sgm Genuine

Matching Score)를 가진 본인과 본인의 등록 거부 비교 거부

회수의 합(REJNG)의 비율

FN M R (t ) =ca rd sgm |sg m z t + R EJ N G

N GEER - FMR과 FNMR의 합이 같을 때의 Error Rate

FTE- 갤러리 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

FTA- 루 군에서 인식 알고리즘이 정의한 특징을 추출하지 못하는

경우를 평가

K-NBTC는 인증 원회를 개최하여 본시험 결과를 심의하고 인증기

을 통과하면 그림 2-2와 같은 인증서를 발 한다

단 얼굴인식은 조명 표정 포즈 액세서리 4가지 한가지 이상만

통과시 부분인증이 가능하며 이 경우 통과된 분야를 인증서에 명시한다

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 23: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 20 -

【그림 2-2】인증서 양식

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 24: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 21 -

8 인증연장

바이오인식 표 합성 성능에 한 인증 유효기간은 인증서가

발 된 날로부터 3년이다

인증 유효기간은 1회에 한해 2년간 유효기간을 연장할 수 있는데

기 인증받은 모듈에 수정사항이 없을 경우에 한하며 이를 해서는 최

인증 유효기간이 만료되기 에 표 2-11의 인증연장 신청서를 작성해

K-NBTC에 제출해야 한다

【표 2-11】인증연장 신청서 양식

인 증 연 장 신 청 서

1 신청인

2 인증 연장 상 제품

- 인증내용

- 인증번호

3 제출물 인증연장 상 제품 1개

바이오인식시스템 시험ㆍ인증지침에 의하여 상기 제품의 인증

을 1회에 한하여 2년간 연장 신청합니다

년 월 일

신청인 (서명 는 인)

한국인터넷진흥원장 귀하

단 K-NBTC의 성능시험용 DB 는 시험기 이 변경되었을 경우에는

변경된 내용을 용하여 재시험을 실시할 수 있다

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 25: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 22 -

제3장 표 합성 시험 소개

1 개요

표 합성 평가는 바이오인식 제품의 BioAPI BSP(Biometrics Service

Provider) 모듈이 ISOIEC 19784-1에서 정의한 BioAPI 표 규격을

수하여 구 됨을 검증하기 한 시험이며 시험기술에 한 표 안은

ISOIEC 24709-1에 포함되어 있다

시험방법은 ISOIEC 24709-2에 기술된 시험방법을 따른다

2 표 합성 평가 상

표 합성은 BSP 제품이 제공하는 기능에 따라 크게 Verification

Identification 2가지 기능에 하여 시험한다

즉 신청인의 BSP가 Verification 기능만 제공하는 경우 Identification

기능만 제공하는 경우 둘 다 제공하는 경우 등 총 3가지 종류가 있으며

각 경우에 하여 진행할 시험 시나리오가 존재한다(아래 표 3-1 참조)

신청인의 BSP 제품이 제공하는 기능에 따라 시험될 시나리오가 결정되고

결정된 시나리오를 지원하는 함수(SPI)를 구 하여 KISA에 제출 평가받는다

【표 3-1】BSP 제공 기능에 따른 시험 시나리오

구분

제공 기능시험 시나리오명 련내용

Verification

Verification BSP 31

Capture BSP 33

Verification Engine 34

Identification

Identification BSP 32

Capture BSP 33

Identification Engine 35

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 26: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 23 -

3 시나리오 종류

31 시나리오① Verification BSP

BSP 는 어 리 이션에서 상을 획득하고 장된 템 릿과 비교하는

BioSPI Enroll BioSPI_Verify 함수를 상으로 시험한다 13개의 SPI를

필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Cancel() BioSPI_Free()

32 시나리오② Identification BSP

Verification BSP와 동일하게 BSP 는 어 리 이션에서 상을 획득

한 후 11 비교가 아닌 장된 다수의 템 릿과 비교하는 BioSPI_Enroll

BioSPI_Verify 함수를 상으로 시험한다 14개의 SPI를 필수 함수로

구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Enroll() BioSPI_Verify()

BioSPI_Identify() BioSPI_Cancel() BioSPI_Free()

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 27: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 24 -

33 시나리오③ Capture BSP

바이오정보 획득을 한 BioSPI_Capture 함수를 상으로 시험한다 12

개의 SPI를 필수 함수로 구 해야 하며 아래와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_QueryUnits() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_Capture() BioSPI_Cancel() BioSPI_Free()

34 시나리오④ Verification Engine

바이오정보를 획득하여 템 릿을 생성하고 BioSPI_Process를 통해 상

을 처리한 후 검증하기 한 비교는 BioSPI_VerifyMatch를 통해 이루어지

며 BioSPI_CreateTemplate BioSPI_Process BioSPI_VerifyMatch 함수

를 상으로 시험한다 13개의 SPI를 필수 함수로 구 해야 하며 아래

와 같다

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle() BioSPI_GetBIRFromHandle()

BioSPI_GetHeaderFromHandle() BioSPI_EnableEvents() BioSPI_CreateTemplate()

BioSPI_Process() BioSPI_VerifyMatch() BioSPI_Cancel() BioSPI_Free()

35 시나리오⑤ Identification Engine

로세스는 Verification Engine BSP와 동일하나 BioSPI_VerifyMatch를

통해 1N 비교가 수행되며 BioSPI_CreateTemplate BioSPI_Process

BioSPI_VerifyMatch 함수를 상으로 시험한다 14개의 SPI를 필수 함수

로 구 해야 하며 아래와 같다

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 28: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 25 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

Component Management

FunctionsBioSPI_BSPLoad BioSPI_BSPUnload BioSPI_BSPAttach BioSPI_BSPDetach BioSPI_QueryUnits

Handle FunctionsBioSPI_FreeBIRHandle BioSPI_GetBIRFromHandle BioSPI_GetHeaderFromHandle

Callback and

Event FunctionsBioSPI_EnableEvents

Biometric FunctionsBioSPI_Capture BioSPI_CreateTemplate

【표 3-2】시험 시나리오에 따른 필수 함수

- 필수 구 함수

BioSPI_BSPLoad() BioSPI_BSPUnload() BioSPI_BSPAttach()

BioSPI_BSPDetach() BioSPI_FreeBIRHandle()

BioSPI_GetBIRFromHandle() BioSPI_GetHeaderFromHandle()

BioSPI_EnableEvents() BioSPI_CreateTemplate() BioSPI_Process()

BioSPI_VerifyMatch() BioSPI_IdentifyMatch() BioSPI_Cancel()

BioSPI_Free()

36 시험 시나리오에 따른 필수 함수 정리

시나리오에 따라 필수 으로 구 해야 하는 함수를 로 표시하여 아래

표에 정리하 으며 함수들은 순서 로 개된다

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 29: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 26 -

시나리오

함수

①Verification

BSP

②Identification

BSP

③Capture

BSP

④Verification

Engine

⑤Identification

Engine

BioSPI_Process BioSPI_VerifyMatch BioSPI_IdentifyMatch BioSPI_Enroll BioSPI_Verify BioSPI_Identify

Utility FunctionsBioSPI_Cancel BioSPI_Free

필수 함수 총계 13개 14개 12개 13개 14개

SPI Component Management FunctionsBioSPI_BSPLoad BioAPI와 BSP간의 컴포넌트를 초기화 함BioSPI_BSPUnload BioAPI_BSPLoad에서 수행된 초기화를 되돌림

BioSPI_BSPAttach어플리케이션에 의해 예상되었던 BSP시스템의 버전과

적합하다는 것을 검증하기 위해 프레임워크에 의해 실행BioSPI_BSPDetach 모든 BSP의 연결 해제BioSPI_QueryUnits 모든 BioAPI유닛에 대한 정보를 제공함

Handle FunctionsBioSPI_FreeBIRHandle 특정한 BIR핸들과 관련된 메모리와 자원 해제BioSPI_GetBIRFromHandle 특정한 BIR 핸들 얻음BioSPI_GetHeaderFrom

Handle핸들로부터 헤더정보 반환

Callback and Event FunctionsBioSPI_EnableEvents 이벤트 mask에 의해 지정된 이벤트 활성화

Biometric FunctionsBioSPI_Capture 센서로부터 데이터(바이오정보) 입력받음BioSPI_CreateTemplate 새로운 등록 템플릿을 생성할 목적으로 BIR을 취함BioSPI_Process Capture를 통해 획득된 데이터를 검증 식별위해 처리BioSPI_VerifyMatch 두 개의 BIR간에 검증 수행

4 SPI(Service Provider Interface)

41 SPI 함수 기능

【표 3-3】SPI 함수 기능

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 30: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 27 -

BioSPI_IdentifyMatch 11 식별 매칭BioSPI_Eroll 검증을 위한 사용자 등록과정 수행BioSPI_Verify 데이터를 추출하고 참조 템플릿과 비교 BioSPI_Identify 1N 식별 매칭

Utility FunctionsBioSPI_Cancel BSPHandle과 관련된 함수호출을 취소 BioSPI_Free 메모리 블록을 해제함

42 SPI 함수 입출력

SPI 기본함수에 한 입출력은 ISOIEC 19784-1의 9 BioAPI Service

Provider Interface를 참고하여야 하며 24709-1 24709-2도 구 시 함께

참고한다 ISOIEC 문서는 한국표 정보망(httpwwwkssnnet)에서

구입할 수 있다

5 테스트어서션

51 테스트어서션 종류

BioAPI BSP 표 합성 평가의 상이 되는 것은 BioSPI 함수들 에서

14가지 주요 함수이며 총 50개의 테스트어서션이 해당된다

테스트어서션은 각 함수의 입출력 검증 라미터 리턴 값들을 명

확하게 구분하기 해 각 필수 함수에 한 가정으로 실질 인 표

합성 시험은 시나리오에 기반을 둔 테스트어서션을 통해 수행하게 된다 

테스트어서션의 ID는 1a 1b 2a 2b처럼 숫자와 알 벳으로 표 되는데

숫자는 테스트 상이 되는 BioSPI 함수의 종류를 의미하고 알 벳은

테스트 종류를 나타낸다

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 31: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 28 -

ID 어서션 이름 목적

1aBioSPI_BSPLoad_InvalidUUID

Verify if calling the function BioSPI_BSPLoad with an invalid input parameter UUID returns BioAPIERR_H_FRAMEWORK_IN VALID_UUID

1bB ioSP I_BSPLoad_Va lidParam

Verify if calling BioSPI_BSPLoad with valid input parameters returns BioAPI_OK

2aBioSPI_BSPUnload_ValidParam

Verify if calling BioSPI_BSPUnload with valid input parameters returns BioAPI_OK

2bBioSPI_BSPUnload_InvalidUUID

Verify if calling BioSPI_BSPUnload with an invalid input parameter UUID returns BioAPIERR_INVALID_UUID

2cB io S P I _ B S P U n lo a d _UnmatchedLoad

Verify if calling BioSPI_BSPUnload without a matching call to BioSPI_BSPLoad returns BioAPIERR_BSP_NOT_LOADED

2d BioSPI_BSPUnload_Confirm Verify if calling BioSPI_BSPUnload truly unloads the BSP

3aBioSPI_BSPAttach_ValidParam

Verify if a call to the function BioSPI_BSPAttach with valid input parameters returns BioAPI_OK

3bBioSPI_BSPAttach_InvalidUUID

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INVALID_UUID when the input UUID is invalid

3cBioSPI_BSPAttach_InvalidVersion

Verify if a call to the function BioSPI_BSPAttach returns BioAPIERR_INCOMPATIBLE_VERSION when the caller specifies an incompatible version

3dBioSPI_BSPAttach_InvalidBSPHandle

Verify if the function BioSPI_BSPAttach returns an error when called with an invalid BSP handle

4aBioSPI_BSPDetach_ValidParam

Verify if a call to the function BioSPI_BSPDetach with a valid module handle returns BioAPI_OK

4bBioSPI_BSPDetach_InvalidBSPHandle

Verify if a call to BioSPI_BSPDetach with an invalid module handle returns an error

4c BioSPI_BSPDetach_ConfirmVerify if a call to the function BioSPI_BSPDetach truly terminates the attach session

【표 3-4】테스트어서션

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 32: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 29 -

5aBioSPI_FreeBIRHandle_ValidParam

Verify if calling the function BioSPI_FreeBIRHandle with a valid BIR handle frees the BIR handle

5bBioSPI_FreeBIRHandle_InvalidBSPHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BSP handle returns an error

5cBioSPI_FreeBIRHandle_InvalidBIRHandle

Verify if calling BioSPI_FreeBIRHandle with an invalid BIR handle returns an error

6aBioSPI_GetBIRFromHandle_ValidParam

Verify if calling BioSPI_GetBIRFromHandle with valid parameters returns BioAPI_OK

6bBioSPI_GetBIRFromHandle_InvalidBSPHandle

Verify if calling BioSPI_GetBIRFromHandle with an invalid BSP handle returns an error

6cBioSPI_GetBIRFromHandle_InvalidBIRHandle

Verify if calling the function BioSPI_GetBIRFromHandle with an invalid BIR handle returns an error

7aBioSPI_GetHeaderFromHandle_ValidParam

Verify if a call to the function BioSPI_GetHeaderFromHandle with valid input parameters returns BioAPI_OK

7bBioSPI_GetHeaderFromHandle_InvalidBSPHandle

Verify if invoking the function BioSPI_GetHeaderFromHandle with an invalid module handle returns an error

7cBioSPI_GetHeaderFromHandle_InvalidBIRHand

Verify if a call to the function BioSPI_GetHeaderFromHandle with an invalid BIR handle returns an error

7dBioSPI_GetHeaderFromHandle_BIRHandleNotFreed

Verify that after a call to the function BioSPI_GetHeaderFromHandle the BIR handle has not been freed

8aB io SP I_Enab leEven ts_ValidParam

Verify BioSPI_EnableEvents with valid input parameters

8bB io SP I_En ab leEven ts_InvalidBSPHandle

Verify BioSPI_EnableEvents with an invalid module handle

9a BioSPI_Capture_AuditDataVerify the function BioSPI_Capture with AuditData having a non-NULL value

9bBioSPI_Capture_ReturnQuality

Verify if the header of the captured BIR contains a valid quality value (in the range 0-100)

9cBioSPI_Capture_IntermediateProcessedBIR

Verify if the BIR returned by the function BioSPI_Capture has a processed level of either INTERMEDIATE or PROCESSED

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 33: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 30 -

9dBioSPI_Capture_InvalidBSPHandle

Verify if calling BioSPI_Capture with an invalid BSP handle returns an error BioAPIERR_INVALID_BSP_HANDLE

10aBioSPI_CreateTemplate_PayloadSupported

Verify BioSPI_CreateTemplate with valid parameters and payload

10bBioSPI_CreateTemplate_BIRHeaderQuality

Verify the function BioSPI_CreateTemplate with valid parameters and the returned quality value

10cBioSPI_CreateTemplate_OutputBIRDataType

Verify BioSPI_CreateTemplate with valid parameters The new template BIR is expected to have the processed level PROCESSED

10dBioSPI_CreateTemplate_OutputBIRPurpose

Verify if the purpose of the created template is the same as the purpose of the captured BIR

10eBioSPI_CreateTemplate_InputBIRDataType

Verify BioSPI_CreateTemplate with an input BIR that has an invalid processed level

10fBioSPI_CreateTemplate_Inconsistent_Purpose

Verify function BioSPI_CreateTemplate with an invalid input BIR purpose

11aB io S P I_P ro ce s s _V a lidParam

Verify BioSPI_Process with valid parameters and the returned processed level

11bBioSPI_Process_BIRHeaderQuality

Verify BioSPI_Process with valid parameters and if the returned quality is valid

11cBioSPI_Process_OutputBIRPurpose

Verify BioSPI_Process with valid parameters and if the purpose of the processed BIR is the same as the purpose of the captured BIR

11dB ioSP I_P rocess_Bu ild sProcessedBIR

Verify BioSPI_Process with valid parameters and the returned processed level

11eBioSPI_Process_InputBIRDataType

Verify BioSPI_Process with an input BIR having a processed level of PROCESSED and if the BioSPI_Process call fails

12aB io S P I_V e r i f yM a tc h _ValidParam

Verify if calling BioSPI_VerifyMatch with validinput parameters returns BioAPI_OK

12bB io S P I_ V e r i f yM a t c h _Payload

Verify the support of payload in the function BioSPI_VerifyMatch The function is expected to return BioAPI_OK

12cB io S P I_V e r ifyM a tch _Inconsistent_Purpose

Verify BioSPI_VerifyMatch with a BIR whose purpose is invalid for the function The function is expected to

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 34: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 31 -

return BioAPIERR_BSP_INCONSISTENT_PURPOSE

13a BioSPI_Enroll_ValidParamVerify if calling BioSPI_Enroll with valid input parameters returns BioAPI_OK

13b B ioSP I_En ro ll_P ay lo adVerify if calling BioSPI_Enroll with a payload returns BioAPI_OK

13c BioSPI_Enroll_AuditDataVerify BioSPI_Enroll with a non-NULL AuditData parameter The function is expected to return audit data if the BSP supports audit data

13dBioSPI_Enroll_BIRHeaderQuality

Verify if calling the function BioSPI_Enroll returns a valid quality value in the new template BIRs header

14a BioSPI_Verify_ValidParamVerify if calling the function BioSPI_Verify with valid input parameters returns BioAPI_OK

14b BioSPI_Verify_PayloadVerify if calling the function BioSPI_Verify with a payload returns BioAPI_OK

14c BioSPI_Verify_AuditDataVerify if calling BioSPI_Verify withaudit data returns BioAPI_OK

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 35: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 32 -

52 테스트어서션 패러미터

테스트어서션은 XML로 작성된 일종의 테스트 실행 스크립트이다 CTS

평가 도구는 테스트어서션 분석기능과 실행기능을 포함하고 있어서

테스트어서션을 실행함으로써 BSP 제품의 표 합성 시험을 진행한다

다음 그림은 테스트어서션의 한 를 보여 다

【표 3-5】테스트어서션

ltxml version=10gtltpackage name=01f6c6f0-0c19-1085-97fe-0002a5d5fd2egt

ltauthorgtISOIEC JTC1 SC37

ltauthorgtltdescriptiongt

ltdescriptiongtltassertion name=BioSPI_BSPLoad_ValidParam model=BSPTestinggt

ltdescriptiongt

ltdescriptiongtltinput name=_BspUuidgtltinput name=_BioAPINotifyCallbackgtltinput name=_BFPEnumerationHandlergtltinput name=_MemoryFreeHandlergtltinvoke activity=BioSPI_BspLoadgt

ltinput name=BspUuid var=_BspUuidgtltinput name=BioAPIdNotifyCallback var=_BioAPINotifyCallbackgtltinput name=BFPEnumerationHandler var=_BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=_MemoryFreeHandlergt

ltinvokegtltassertiongtltactivity name=BioSPI_BspLoadgt

ltinput name=BspUuidgtltinput name=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandlergtltinput name=MemoryFreeHandlergtltinvoke function=BioSPI_BSPLoadgt

ltinput name=BSPUuid var=BspUuidgtltinput name=BioAPINotifyCallback var=BioAPIdNotifyCallbackgtltinput name=BFPEnumerationHandler var=BFPEnumerationHandlergtltinput name=MemoryFreeHandler var=MemoryFreeHandlergtltreturn setvar=returngt

ltinvokegtltassert_conditiongt

ltdescriptiongtThe function BioSPI_BSPLoad has returned BioAPI_OK

ltdescriptiongtltequal_to var1=return var2=__BioAPI_OKgt

ltassert_conditiongtltinvoke function=BioSPI_BSPUnloadgt

ltinput name=BSPUuid var=BspUuidgtltreturn setvar=returngt ltinvokegtltassert_condition response_if_false=undecidedgt

ltequal_to var1=return var2=__BioAPI_OKgtltassert_conditiongt

ltactivitygtltpackagegt

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 36: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 33 -

패러미터 이름 설명 기본값

_inserttimeoutTimeout for the BioAPI_NOTIFY_INSERT event (msec)

10000

_sourcepresenttimeoutTimeout for the BioAPI_NOTIFY_SOURCE_PRESENT event (msec)

10000

_capturetimeout Timeout for BioSPI_Capture (msec) 10000

_verifytimeout Timeout for BioSPI_Verify (msec) 10000

테스트어서션을 실행하기 해서는 테스트어서션의 입력 패러미터 값이

지정되어야 한다 표 3-5의 에서는

ltinput name=_BspUuidgt

ltinput name=_BioAPINotifyCallbackgt

ltinput name=_BFPEnumerationHandlergt

ltinput name=_MemoryFreeHandlergt

등과 같이 4개의 입력 패러미터가 필요하다 이 입력 값에 따라 테스트

어서션 실행 결과가 달라질 수 있기 때문에 입력 패러미터 결정은 요

하다

ISOIEC 24709-22007에 기술된 테스트어서션들의 입력 패러미터 상당

부분은 복되거나 는 시스템 내부 으로 처리할 수 있다 그러나

BSP 제품의 lsquoUUIDrsquo나 lsquoPayload 지원가능 여부rsquo 등과 같은 정보는 BSP

제품의 특성에 기반한 것이기 때문에 이러한 입력 패러미터는 신청업체

가 표 2-3의 BCS를 작성하여 테스트 기 에 제출하여야 한다

신청업체가 작성해야 할 테스트어서션 입력 패러미터 항목은 다음과 같다

【표 3-6】테스트어서션의 라미터

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 37: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 34 -

_maxFMRRequested MaxFMRRequested for BioSPI_Verify (msec) 214748

_payloadPolicy Payload policy 214748

_supportPayload (or _payloadSupported)

Indicates whether the BSP under test claims support for payload

false

_supportAuditDataIndicates whether the BSP under test claims supports for audit data

false

_intermediateQualitySupported

Indicates whether the BSP under test claims support for quality in an intermediate BIR

false

_p ro ce ssedQ ua litySupported

Indicates whether the BSP under test claims support for quality in a processed BIR

false

_n o So u rce P re se n tSupported

Indicates whether the BSP under test does not claim support for the BioAPI_NOTIFY_SOURCE_PRESENT event notification

false

_dbUuid (for DB)

Database UUID to be opened

_nbrRecords (for DB)

Number of Records used in BioSPI_DbCreate() 1000

_readAccessRequest (for DB)

Read Access Request to the database true

_writeAccessRequest (for DB)

Write Access Request to the database false

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 38: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 35 -

53 평가 수행

본 기 의 표 합성 평가도구인 CTS는 각 테스트어서션을 읽어서

실행하는 일종의 인터 리터로 볼 수 있다

각 테스트어서션의 실행결과는 PASS FAIL UNDECIDED로 구분된다

PASS는 해당 테스트항목에 하여 BSP 제품이 제 로 동작하 음을

의미하며 FAIL은 BSP제품이 제 로 기능이 동작하지 않거나 상되는

응 (response)를 하지 않았음을 의미한다 UNDECIDED는 테스트 상이

되는 기능이 아닌 다른 부분에서 문제가 발생하여 테스트를 제 로 수

행할 수 없음을 나타낸다

평가 상인 BSP 제품이 표 합성 테스트를 통과하기 해서는 테스트

어서션 목록에 포함된 모든 테스트어서션들의 수행결과가 PASS가 되어야

한다 하나라도 그 결과가 FAIL이나 UNDECIDED가 된다면 표 합성

테스트를 통과하지 못함을 의미한다

6 주의할

61 평가 취약

기에 표 합성 시험을 받은 BSP제품들에서 payload 련된 테스트

어서션( TA 14b)을 통과하지 못하는 경우가 자주 발생하 다 공통

으로 payload를 지원하지 않는 BSP 제품들로 테스트어서션 패러미터인

_payloadSupported가 false로 지정되었다

payload를 지원하지 않는 BSP제품의 경우에도 테스트어서션을 통과할

수 있도록 작성되었음에도 이런 상이 발생한 것에 하여 그 원인을

살펴보면 payload를 지원하지 않는 BSP 제품이 표 합성 시험을 통

과하기 해서는 몇 개의 BioSPI 함수들의 동작이 ISOIEC 24709-2에

기술된 테스트 이스에 맞도록 동작해야 한다 만일 이와 다르게 구 이

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 39: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 36 -

되어있다면 국제 표 합성 시험을 통과하지 못한다

테스트어서션 통과에 문제가 되는 BioSPI함수들은 BioSPI_Enroll()

BioSPI_CreateTemplate() BioSPI_Verify() 이다 테스트어서션을 통과하기

하여 이들 함수가 특정 상황에서 반응해야 하는 내용은 다음과 같다

- BioSPI_Enroll() BioSPI_CreateTemplate()

ㆍ 상황 payload를 지원하지 않는 BSP모듈에 있는 함수들을 호출

할 때 NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자 값이 NULL이

아니라면 함수 종료시 에러메시지를 반환해야 한다 그러나 에러메시지

반환과는 별도로 함수의 작업은 계속 진행하여 newTemplate값을

생성(양수값) 하여야 한다 즉 작업을 진행하여 newTemplate값을

생성한 후 함수를 종료할 때 에러메시지를 반환한다

ㆍ 반환값 __BioAPIERR_BSP_UNABLE_TO_STORE_PAYLOAD

- BioSPI_Verify()

ㆍ 상황 payload를 지원하지 않는 BSP모듈의 이 함수를 호출할 때

NULL 값이 아닌 payload 값을 인자로 넣어 호출하는 상황이다

ㆍ 동작 payload를 지원하지 않는데 payload 인자값이 NULL이 아니라면

이를 무시하고 작업을 진행한다 다른 특별한 문제가 없다면

_BioAPI_OK를 반환한다 즉 BioSPI_Enroll()함수같이 작업을

진행하는 것은 동일하지만 함수 종료시 __BioAPI_OK를 반환하는

이 다르다

ㆍ 반환값 __BioAPI_OK

62 테스트어서션 로직 제공

BSP 제품 개발자가 표 합성 평가를 비하고 문제발생시 이를

해결하는데 도움을 주고자 ISOIEC 24709-2에 정의된 50개의 테스트

어서션들의 실행 흐름을 순서도(flow chart)로 기술한 문서가 있으며

신청기 은 필요시 본 기 에 요청하면 배부 받을 수 있다

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 40: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 37 -

BSP 제품이 표 합성 테스트를 통과하지 못한 경우 신청기 은

수행결과가 PASS가 아닌 테스트어서션 목록을 평가기 으로부터 넘겨

받은 후 테스트어서션 순서도와 BSP 제품의 실행흐름을 비교 분석하여

문제를 해결하여야 한다

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 41: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 38 -

제4장 지문인식 성능시험 소개

1 개요

지문인식 성능시험을 진행하기 해서는 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 지문인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 3가지 함수를

반드시 내장하여야 한다

- 등록용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-1】등록용 특징량 추출함수

__declspec(dllexport) int KISA_Enroll(

IN int iType 아래 pImage의 센서 종류(아래 표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 등록용 지문 상 주소

OUT unsigned char pEnroll 추출된 특징량이 장될 공간

OUT int piEnrollSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

【표 4-2】지문인식 센서종류

구분 센서 종류 회사명 iType 크기(WH)

DIG00 IZZIX FD-100 디젠트 5 280320

PER00 UareU Digital Persona 7 292525

NIT00 EyeD Hamster 니트젠 8 248292

HUN00 MagicSecure2500 휴노 9 288320

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 42: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 39 -

- 비교용 특징량 추출 함수이며 내용은 아래와 같다

【표 4-3】비교용 특징량 추출함수

__declspec(dllexport) int KISA_Attempt(

IN int iType 아래 pImage의 센서 종류 (표 4-2 참조)

IN unsigned char pImage 센서 종류에 따른 비교용 지문 상 주소

OUT unsigned char pAttempt 추출된 특징량이 장될 공간

OUT int piAttemptSize 추출된 특징량 크기

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

)

- 비교용 함수이며 내용은 아래와 같다

【표 4-4】비교용 함수

__declspec(dllexport) int KISA_Compare(

IN unsigned char pEnroll 등록용 특징량

IN unsigned char pAttempt

OUT double pdScore 0(타인지문)에서 1(동일지문)사이의 정합 수

OUT int piErrorCode 신청인이 지정하는 에러 코드

OUT char arErrorMessage[256] 신청인이 지정하는 에러 메시지

KISA 지문인식 성능평가 도구에서 상기 세 함수를 호출할 시 다음과 같은

규약을 따른다 먼 등록용 특징량 추출 함수 KISA_Enroll()의 로토타입

상에 표시된 첫 번째 iType은 그 다음 매개변수인 pImage를 취득한 센

서 종류를 표기하기 한 것으로 표 4-2에 해당 값이 나와 있다

즉 DIG00을 의미하는 5 값이 iType 매개변수로 입력되면 신청인은

표 4-2에 맞추어 히 인식 알고리즘이 동작되도록 응 처리한다

두번째 매개변수인 pImage는 KISA 성능평가 도구가 상 종류에 맞추어

미리 할당해 놓은 메모리를 가리키는 포인터로서 DIG00의 경우 표 4-2에

280320(WH)으로 표기되어 있으므로 총 89600 바이트의 크기를 지니게

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 43: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 40 -

된다 만일 신청인이 이 크기를 수하지 않는 경우 버퍼 오버 로우

에러가 발생할 수 있으므로 이에 주의한다

DIG00의 경우 280x320화소 크기를 지니므로 (pImage+89601)과 같은

표기는 버퍼 오버 로우 에러를 발생시키며 이는 성능지표상 FTE 수치를

증가시킨다

그리고 실제 시험도구에서 pImage는 3차에 수집된 지문 상의 경우에도

12바이트를 스킵(skip)한 상태 즉 pImage의 첫번째 바이트가 좌상단의

첫번째 화소인 것으로 처리하고 있으므로 신청인은 이를 혼동하지 않도록

주의한다 즉 제출물에서는 1차와 2차 3차를 구분하지 않고 pImage의

첫번째 바이트가 지문 상의 좌상단 첫번째 화소인 것으로 간주하여야 한다

즉 (pImage+0)은 DIG00 지문 상의 좌상단 첫번째 화소를 가리킨다

한 실제 시험도구에서는 신청인의 요청에 따라 지문 상의 배경을

흰색으로 혹은 반 로 배경을 검정색으로 세 한 후 시험을 진행하므로

신청인은 자신의 알고리즘에게 유리한 방식을 선택한 다음 그 결과를

담당자에게 반드시 알리도록 한다

세번째 매개변수인 pEnroll은 KISA 성능평가 도구가 미리 할당해 놓은

충분한 크기(1000000 바이트)의 메모리 공간으로 KISA_Enroll()함수가

수행된 후 네번째 매개변수인 piEnrollSize에 실제 추출된 특징량 사이즈가

담기어 넘어오면 성능평가 도구는 해당 크기로 다시 조 한 후

KISA_Compare() 함수에 매개변수로 달한다

다섯번째와 여섯번째 매개변수인 piErrorCode와 arErroMessage는 신청인

이 임의로 지정하는 에러 표시로 KISA 성능평가 도구는 해당 함수 호

출 결과로 반환되는 값이 0 이하인 경우 이를 로그 화면에 표시한다 이

경우 FTE(성능 지표 부분 참조)에 향을 미치므로 신청인은 이를 주의

깊게 처리하도록 한다

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 44: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 41 -

비교용 특징량 추출 함수인 KISA_Attempt()는 상기 KISA_Enroll()과

동일하다 만일 신청인이 등록과 비교용 특징량 추출부를 구분하지 않고

하나로 동일하게 처리하고 있는 경우 KISA_Attempt()와 KISA_Enroll()

에서 해당(즉 하나의) 특징량 추출 함수를 호출하도록 처리한다

그리고 비교용 특징량 추출 함수 KISA_Compare()의 로토타입 상에

표시된 첫 번째 pEnroll은 등록용 함수에서 구해진 것을 신청인측 알고리즘이

넘겨 크기(piEnrollSize)로 조 하여 입력되는 것이다

두번째 pAttempt는 비교용 특징량 추출 함수에서 구해진 것을 신청인측

알고리즘이 넘겨 크기(piAttemptSize)로 조 하여 입력되는 것이다

이 때 신청인은 KISA 성능평가도구가 응용에 따라 이 기종 센서간에도

비교 결과를 볼 수 있도록 허용하고 있음을 참고하도록 한다

세번째 pdScore는 신청인측 알고리즘이 계산한 비교 결과 값이다 반드

시 0(타인지문)과 1(동일지문)사이의 값이어야 하며 만일 그 이외의 값

을 지정할 경우 비교 거부로 정하여 FNMR(성능 지표 부분 참조)값

에 향을 미칠 수 있음에 주의한다

네번째와 다섯번째 매개변수인 piErrorCode와 arErrorCode는 등록용

함수의 경우와 동일하다 이 역시 함수 호출 결과로 반환되는 값이 0

이하인 경우 의미를 가지게 되며 이러한 경우 이 역시 비교 거부로 정

하여 FNMR(성능 지표 부분 참조)값에 향을 미칠 수 있음에 주의하여야

한다

3 성능시험용 데이터베이스

지문인식 성능시험용 데이터베이스는 사 시험용 성능 DB 구성정보와

동일하나 DB 숫자가 더 크다

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 45: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 42 -

【표 4-5】지문인식 성능시험용 DB 구성정보

센서구성 Sensor1 Sensor2 Sensor3 Sensor4

Subject 1500 1500 1500 1500

Subject 당 상(장) 5 5 5 5

총 상(장) 7500 7500 7500 7500

상가로X세로크기(Pixel) 280x320 288x320 248x292 292x525

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 46: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 43 -

제5장 얼굴인식 성능시험 소개

1 개요

얼굴인식 성능시험을 해서도 아래 에서 설명하는 도우용

DLL(Dynamic Linking Library)을 구 해서 제출하여야 한다 K-NBTC

담당자는 신청인의 DLL로 얼굴인식 성능시험을 하게 되며 시험결과가

인증기 을 통과하면 인증 원회 심의를 거쳐 인증서를 발 한다

2 DLL 개발 방법

신청인이 개발할 DLL은 다음과 같은 입출력을 가지는 7가지 함수를

반드시 내장하여야 한다

21 BioAPI_Init

BioAPI_Init()함수는 체 모듈을 기화하는 기능을 담당한다 따라서

신청인은 BioAPI_Init() 함수에서 바이오인식장치를 기화하거나 변수설정

이나 기타 기화를 완료하도록 구 해야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Init

(const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

- Parameters는 모두 사용되지 않는다 모두 0 는 NULL로 설정하면 된다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 47: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 44 -

22 BioAPI_Terminate

바이오인식 모듈을 종료하는 함수이다 따라서 신청인은 BioAPI_

Terminate() 함수에서 바이오 인식장치를 종료하거나 내부 메모리 반환

등과 같은 종료작업을 완료하도록 구 하여야 한다 함수의 선언은 다음과 같다

BioAPI_RETURN BioAPI BioAPI_Terminate ( )

- Parameters는 없다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

23 BioAPI_FreeBIRHandle

이 함수는 핸들(Handle)에 연결된 BioAPI_BIR 메모리를 해제한다 더 이상

BioAPI_BIR 데이터가 사용되지 않을 경우 호출한다

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 메모리를 해제하고자 하는 핸들이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

24 BioAPI_GetBIRFromHandle

이 함수는 핸들(Handle)로부터 BioAPI_BIR 데이터를 반환한다

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 48: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 45 -

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle

(BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

- Parameters는 아래와 같다

ㆍModuleHandle 0으로 설정한다

ㆍHandle 데이터를 가져오고자 하는 Handle이다

ㆍBIR (output) 반환되는 BioAPI_BIR 데이터이다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

25 BioAPI_CreateTemplate

Gallery(비교 상) 이미지를 Raw 데이터로 입력 받아 분석 후 얼굴의 특징

정보를 포함하는 BIR 데이터를 만들고 그 데이터에 해당하는 핸들을

반환한다

BioAPI_RETURN BioAPI BioAPI_CreateTemplate

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍNewTemplate (output) 새로 생성된 템 릿의 BioAPI_BIR 데이터를

가리키는 핸들 값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를

넣어 다

ㆍ나머지 Parameters는 무시한다

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 49: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 46 -

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

26 BioAPI_Process

Probe (비교할) 이미지를 분석 후 분석 처리된 데이터를 장하고 그 해당

핸들 값을 반환한다

BioAPI_RETURN BioAPI BioAPI_Process

(BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

- Parameters는 아래와 같다

ㆍCapturedBIR 실제 그림 일의 Raw데이터가 장된다

ㆍProcessedBIR (output) 분석된 BioAPI_BIR 데이터를 가리키는 핸들

값이 지정되어야 하며 이 핸들 값을 담기 한 포인터를 넣어 다

ㆍ나머지 라미터는 무시한다

- Return Value는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

27 BioAPI_VerifyMatch

실제로 분석된 템 릿 BIR 데이터와 Processed BIR 데이터를 비교하여

매칭 결과를 반환한다 피 평가 모듈에서는 이 함수의 결과 값을 통하여

얼굴인식 알고리즘 성능을 평가 받는다

BioAPI_RETURN BioAPI BioAPI_VerifyMatch

(BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR MaxFRRRequested

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 50: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 47 -

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

- Parameters는 아래와 같다

ㆍProcessedBIR Probe(비교하고자 하는) 이미지를 분석한 데이터가

들어간다 데이터의 핸들 값을 넣을 수도 있다

ㆍStoredTemplate Gallery(비교 상) 이미지를 분석한 데이터가 들어간다

데이터의 핸들 값을 넣을 수도 있다

ㆍResult (output) 두 이미지 사이의 유사도를 정수로 표 한다

ㆍ나머지 라미터는 무시한다

- Return Values는 성공하면 BioAPI_OK를 실패하면 그 이외의 값을

반환한다

3 성능시험에서의 함수 호출 순서

신청인은 상기에서 개발한 DLL을 K-NBTC에 제출하면 K-NBTC에서는

성능시험 도구를 통해 DLL의 함수를 아래와 같이 호출한다

단 TestModule을 신청인이 제출한 DLL(피평가 모듈)이라고 가정한다

31 기화

TestModuleBioAPI_Init()를 호출한다 피평가 모듈의 기화를 하여

성능평가 수행 시작 때 한번 호출한다

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 51: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 48 -

32 갤러리 이미지의 템 릿 데이터 생성

성능시험 도구에서 피평가 모듈의 BioAPI_CreateTemplate() 함수를 이용

하여 모든 갤러리 이미지들의 템 릿 데이터를 미리 생성한 후 이들

데이터를 로컬디스크에 임시 일로 장한다

갤러리집합에 있는 모든 갤러리 이미지에 하여 다음의 차를 수행한다

- TestModuleBioAPI_CreateTemplate(ampBIRHandle) 호출하여 갤러리 이

미지에 한 템 릿 데이터 생성한다

- TestModuleBioAPI_GetBIRFromHandle( BIRHandle amppBIR) 호출하여

BIR데이터 생성한다

- 생성된 BIR 데이터를 로컬디스크에 임시 일로 장한다

- TestModuleBioAPI_FreeBIRHandle(BIRHandle) 호출하여 템 릿데이터

를 메모리에서 해제한다

일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크에서

메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI_CreateTemplate() 함수의 인자로 넘겨지기 때문에 이 함수를

구 하는데 있어서 이미지 정보는 앞에 선언된 자료구조를 통하여 메모리

에서 읽어야 한다

BioAPI_GetBIRFromHandle() 함수를 통하여 반환된 BioAPI_BIR 자료구조

내부 Signature의 Data와 Length에 값이 장되어 있어야 한다

33 매칭 작업 수행

로 (Probe) 집합에 있는 모든 로 이미지에 하여 다음 차를

수행한다

- TestModuleBioAPI_Process() 호출하여 로 이미지에 한 처리

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 52: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 49 -

데이터 핸들(handle)을 생성한다

- TestModuleBioAPI_GetBIRFromHandle() 호출하여 로 이미지에

한 BIR 데이터를 획득한다

- 로컬디스크에 임시 일로 장된 모든 갤러리들의 BIR 데이터를 하나씩

읽은 후 TestModuleBioAPI_VerifyMatch()를 호출하여 로 BIR

데이터와 갤러리 BIR 데이터를 이용하여 매칭 작업을 수행한다

- 매칭 수행 결과값은 성능평가 분석을 한 자료로 장된다

- 모든 갤러리와의 매칭 작업이 끝난 로 의 처리데이터는

TestModuleBioAPI_FreeBIRHandle() 함수를 통하여 메모리에서 해제된다

4 주의사항

얼굴 인식 업체에서 제출한 피평가 모듈이 BioAPI DLL 일 이외에 부속

일들(dll exe)을 포함할 경우 성능평가 도구 내에서 피평가 모듈이

로드되어 실행될 때 기화를 못하고 실행이 되지 않는 문제가 종종 발생

한다 Win32 API인 LoadLibrary를 사용하지 않고 MFC에서 사용하는 방

법을 그냥 사용하는 등 여러 가지 문제로 발생한다

이는 성능평가 도구 로그램의 치가 피평가 모듈 일들의 치와 다른

경로상에 존재하기 때문이다 이를 해결하기 해서는 기본 으로 피평가

모듈 내에서 부속 일들을 근할 때 재 실행되는 로그램(성능 평가

도구)의 치에서 찾지 말고 피평가 모듈의 치에서 찾도록 구 되어야 한다

5 성능시험용 데이터베이스

얼굴 인식 성능시험용 데이터베이스는 아래 표 5-1과 같이 구성되어 있

다 K-NBTC는 복 없는 500여명에 한 서로 다른 Set에 하여 조명ㆍ

표정ㆍ포즈ㆍ액세서리에 한 Subset을 구성해 성능시험에 제공한다

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 53: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 50 -

【표 5-1】얼굴인식 성능시험용 DB 구성

1 set 2 set

인 원 (명) 500명 500명

Subset

분류 Probe 수 분류 Probe 수

1 조명방향(8)4000

(5008)조명방향(8)

4000

(5008)

2 표정변화(4)2000

(5004)표정변화(4)

2000

(5004)

3 포즈(3)1500

(5003)포즈(3)

1500

(5003)

4 액세서리(2)1000

(5002)액세서리(2)

1000

(5002)

Gallery - Normal 정면주백색(형 등)무표정정면조명정면포즈

Probe

- 조명방향(8종류) 0deg 45deg 90deg 135deg 180deg 225deg 270deg 315deg

DB구성상 0deg(주 색(백열등=Y) 45deg~315deg(주백색형 등) 조건임

- 표정(4종류) 웃는표정 화난표정 감은표정 놀란표정

- 포즈(3종류) 225deg(Left Right) 45deg(Left)

- 액세서리(2종류) 헤어밴드 안경

6 자료구조

61 BioAPI_BIR

typedef struct bioapi_bir

BioAPI_BIR_HEADER Header

BioAPI_BIR_BIOMETRIC_DATA_PTR BiometricData length indicated in

header

BioAPI_DATA_PTR Signature NULL if no signature length is inherent in

this type

BioAPI_BIR BioAPI_BIR_PTR

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 54: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 51 -

62 BioAPI_BIR_HEADER

typedef struct bioapi_bir_header

uint32 Length Length of Header + Opaque Data

BioAPI_BIR_VERSION HeaderVersion

BioAPI_BIR_DATA_TYPE Type

BioAPI_BIR_BIOMETRIC_DATA_FORMAT Format

BioAPI_QUALITY Quality

BioAPI_BIR_PURPOSE Purpose

BioAPI_BIR_AUTH_FACTORS FactorsMask

BioAPI_BIR_HEADER BioAPI_BIR_HEADER_PTR

NOTE All integer values in the BIR header are little-endian

63 BioAPI_BIR_BIOMETRIC_DATA

typedef uint8 BioAPI_BIR_BIOMETRIC_DATA

64 BioAPI_DATA

일의 경로 는 처리된 데이터 정보를 가진다

The BioAPI_DATA structure is used to associate a length in bytes

with an arbitrary block of contiguous memory

typedef struct bioapi_data

uint32 Length in bytes

uint8 Data

BioAPI_DATA BioAPI_DATA_PTR

Definitions

Length - length of the data buffer in bytes

Data - points to the start of an arbitrary length data buffer

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 55: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 52 -

65 BioAPI_INPUT_BIR

BioAPI_CreateTemplate() 함수나 BioAPI_Process() 함수의 인자들 에서

테스트 이미지 정보를 넘겨받을 때 사용되는 CapturedBIR인자의 자료형

이다 일반 으로 본 평가 도구에서는 테스트 이미지 일이 로컬 디스크

에서 메모리에 읽 진 다음 해당 메모리 주소가

ldquoBioAPI_INPUT_BIRInputBIRBIR-gtSignatureDatardquo 변수에 장되어

BioAPI 함수의 인자로 넘겨진다

typedef struct bioapi_input_bir

BioAPI_INPUT_BIR_FORM Form

union

BioAPI_DBBIR_ID_PTR BIRinDb

BioAPI_BIR_HANDLE_PTR BIRinBSP

BioAPI_BIR_PTR BIR

InputBIR

BioAPI_INPUT_BIR BioAPI_INPUT_BIR_PTR

7 제 일

이상에서 얼굴인식 성능시험을 해 신청인이 개발해야 할 DLL 련

정보에 해서 알아보았다 본 에서는 DLL 개발을 한 제 일인

ModuleDummydll을 기술하 다

신청인이 개발한 성능 알고리즘이 BioAPI 국제규격으로 개발된 것이

아니라면 아래의 ModuleDummydll을 참고하여 API를 구 할 수 있다

ModuleDummycpp Defines the initialization routines for the DLL

include stdafxh

include ModuleDummyh

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 56: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 53 -

include BioAPIh

pragma warning(disable4786)

include ltmapgt

using namespace std

ifdef _DEBUG

define new DEBUG_NEW

undef THIS_FILE

static char THIS_FILE[] = __FILE__

endif

CModuleDummyApp

BEGIN_MESSAGE_MAP(CModuleDummyApp CWinApp)

AFX_MSG_MAP(CModuleDummyApp)

NOTE - the ClassWizard will add and remove mapping macros here

DO NOT EDIT what you see in these blocks of generated code

AFX_MSG_MAP

END_MESSAGE_MAP()

CModuleDummyApp construction

CModuleDummyAppCModuleDummyApp()

TODO add construction code here

Place all significant initialization in InitInstance

The one and only CModuleDummyApp object

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 57: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 54 -

CModuleDummyApp theApp

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgt g_vtBIR

BioAPI_BIR_PTR GetBIRFromHandle(BioAPI_HANDLE Handle)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return NULL

return it-gtsecond

BioAPI_BIR_PTR GetBIRFromInput(const BioAPI_INPUT_BIR InputBIR)

if(InputBIR == NULL || InputBIR-gtForm ==

BioAPI_DATABASE_ID_INPUT)

return NULL

if(InputBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

return GetBIRFromHandle((InputBIR-gtInputBIRBIRinBSP))

else if(InputBIR-gtForm == BioAPI_FULLBIR_INPUT)

return InputBIR-gtInputBIRBIR

return NULL

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 58: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 55 -

BOOL FreeBIRHandle(BioAPI_HANDLE Handle)

BioAPI_BIR_PTR pBIR = GetBIRFromHandle(Handle)

if(pBIR == NULL)

return FALSE

delete [] pBIR-gtSignature-gtData

delete pBIR-gtSignature

delete pBIR

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

it = g_vtBIRfind(Handle)

g_vtBIRerase(it)

return TRUE

BioAPI_HANDLE AddNewBIR(uint8 Data uint32 Length)

uint8 pData = new uint8[Length]

memcpy(pData Data Length)

set bir

BioAPI_BIR_PTR pNewBIR = new BioAPI_BIR

pNewBIR-gtSignature = new BioAPI_DATA

pNewBIR-gtSignature-gtData = pData

pNewBIR-gtSignature-gtLength = Length

find unbounded handle

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 59: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 56 -

BioAPI_HANDLE Handle = 0

for( Handle++)

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

break

g_vtBIR[Handle] = pNewBIR

return Handle

BioAPI_RETURN BioAPI BioAPI_Init(

const BioAPI_VERSION Version

uint32 Reserved1

const void Reserved2

uint32 Reserved3

const void Reserved4)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 60: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 57 -

BioAPI_RETURN BioAPI BioAPI_Terminate()

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

while((it = g_vtBIRbegin()) = g_vtBIRend())

if(FreeBIRHandle(it-gtfirst))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_FreeBIRHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle)

if(FreeBIRHandle(Handle))

return BioAPI_OK

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_GetBIRFromHandle(

BioAPI_HANDLE ModuleHandle

BioAPI_BIR_HANDLE Handle

BioAPI_BIR_PTR BIR)

mapltBioAPI_BIR_HANDLE BioAPI_BIR_PTRgtiterator it

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 61: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 58 -

it = g_vtBIRfind(Handle)

if(it == g_vtBIRend())

return BioAPI_OK

BIR = it-gtsecond

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_CreateTemplate(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE_PTR NewTemplate

const BioAPI_DATA Payload)

if(CapturedBIR == NULL || NewTemplate == NULL)

return BioAPI_OK

if(CapturedBIR-gtForm == BioAPI_BIR_HANDLE_INPUT)

NewTemplate =

(CapturedBIR-gtInputBIRBIRinBSP)

else if(CapturedBIR-gtForm == BioAPI_FULLBIR_INPUT)

BioAPI_BIR_PTR pBIR =

CapturedBIR-gtInputBIRBIR

if(pBIR == NULL || pBIR-gtSignature ==

NULL)

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 62: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 59 -

return BioAPI_OK

if(pBIR-gtSignature-gtLength gt 1024 1024

1024)

return BioAPI_OK

set bir data

const uint32 nMaxLength = 512

const uint32 nOffset = 0x500

uint32 nLength = nMaxLength

nLength = min(nMaxLength

pBIR-gtSignature-gtLength - nOffset)

uint8 pData[nMaxLength]

memset(pData 0 nMaxLength)

memcpy(pData pBIR-gtSignature-gtData +

nOffset nMaxLength)

BioAPI_HANDLE Handle =

AddNewBIR(pData nMaxLength)

NewTemplate = Handle

simulate time

srand((uint32 )(pData))

Sleep(100 + rand() 100)

else

return BioAPI_OK

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 63: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 60 -

return BioAPI_OK

BioAPI_RETURN BioAPI BioAPI_Process(

BioAPI_HANDLE ModuleHandle

const BioAPI_INPUT_BIR CapturedBIR

BioAPI_BIR_HANDLE_PTR ProcessedBIR)

return BioAPI_CreateTemplate(NULL CapturedBIR NULL

ProcessedBIR NULL)

BioAPI_RETURN BioAPI BioAPI_VerifyMatch(

BioAPI_HANDLE ModuleHandle

const BioAPI_FAR MaxFARRequested

const BioAPI_FRR

MaxFRRRequested

const BioAPI_BOOL FARPrecedence

const BioAPI_INPUT_BIR ProcessedBIR

const BioAPI_INPUT_BIR StoredTemplate

BioAPI_BIR_HANDLE AdaptedBIR

BioAPI_BOOL Result

BioAPI_FAR_PTR FARAchieved

BioAPI_FRR_PTR FRRAchieved

BioAPI_DATA_PTR Payload)

if(ProcessedBIR == NULL || StoredTemplate == NULL ||

Result == NULL)

return BioAPI_OK

BioAPI_BIR_PTR pProcessedBIR =

GetBIRFromInput(ProcessedBIR)

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 64: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 61 -

BioAPI_BIR_PTR pStoredTemplate =

GetBIRFromInput(StoredTemplate)

uint16 nSeed1 = ((uint16 )pProcessedBIR-gtSignature-gtData

+ pProcessedBIR-gtSignature-gtLength 4)

uint16 nSeed2 = ((uint16

)pStoredTemplate-gtSignature-gtData + pProcessedBIR-gtSignature-gtLength 4)

uint32 nSeed = nSeed1 nSeed2

TRACE(d d dn nSeed nSeed1 nSeed2)

srand(nSeed)

Result = 80 + rand() 20

simulate process time

Sleep(200 + rand() 100)

return BioAPI_OK

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 65: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 62 -

문 의 처

한국인터넷진흥원(KISA)

주 소 (우)138-950 서울특별시 송 구 로 135 IT벤처타워

서 8층 한국인터넷진흥원 지식정보보안산업

담 당 지식정보보안산업

화 02) 405-6631

E-mail bioapikisaorkr

Web wwwkisaorkr

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다

Page 66: 바이오인식시스템 시험ㆍ인증 해설서 - KISA · 2012. 7. 31. · K-NBTC 홈페이지는 “knbtc.kisa.or.kr” 이며, 해당 홈페이지에서 시험ㆍ 인증관련

- 63 -

바이오인식시스템 시험ㆍ인증 해설서

인 쇄 2012년 7월 발 행 2012년 7월 발행인 서 종 렬 발행처 한국인터넷진흥원(KISA Korea InternetampSecurity Agency) 서울시 송파구 중대로 109 대동빌딩 Tel (02) 405-4118 인쇄처 한올 Tel (02) 2279-8494

lt비매품gt

1 본 자체발간물은 지식경제부의 출연금으로 수행한 지식정보보안 산업 경쟁력 강화의 결과입니다

2 본 자체발간물의 내용을 발표할 때에는 반드시 한국인터넷진흥원 지식정보보안 산업 경쟁력 강화의 결과임을 밝혀야 합니다

3 본 자체발간물의 판권은 한국인터넷진흥원이 소유하고 있으며 당 진흥원의 허가 없이 무단 전재 및 복사를 금합니다