주식회사 누리아이티

정보자산의 보안강화를 위한 3단계 인증 보안SW(BaroPAM) 전문기업인 누리아이티

▶ BaroSolution/가이드

기억할 필요 없는 비밀번호를 위한 BaroPAM 솔루션의 API 가이드(C)

누리아이티 2019. 2. 26. 07:23

목차

 

1. BaroPAM 연동 API

1.1 연동 API 구성

1.2 연동 API 함수

1.3 인증키 검증 부분

 

2. BaroPAM 적용

2.1 BaroPAM 적용 프로세스

2.2 BaroPAM 적용 화면

2.3 본인인증 적용 프로세스

2.4 본인인증 적용 화면

2.5 BaroPAM 앱 설치 및 정보 설정

 

3. About BaroPAM

 


 

1. BaroPAM 연동 API

1.1 연동 API 구성

BaroPAM 관련 Shared object(libbarokey-x.x.x.so)는 필드 또는 데이터 암복호화 및 일회용 인증키를 검증하는데 사용된다.

API구분
설명
위치
barokey.h
BaroPAM Header 파일
/usr/baropam/key
libbarokey-x.x.x.so
BaroPAM 모듈
/usr/baropam/key

 

필드 또는 데이터 암복호화에 사용되는 대칭 키(64byte)를 프로그램 내부에 고정되어 있으며, Shared object(libbarokey-x.x.x.so)를 사용하기 위해서는 반드시 shared object file이 존재하는 디렉토리(/usr/baropam/key)를 Library path에 설정해야 한다.

Linux/Solaris인 경우 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/baropam/key
HP-UX인 경우 export SHLIB_PATH=$SHLIB_PATH:/usr/baropam/key
AIX인 경우   export LIBPATH=$LIBPATH:/usr/baropam/key

 

BaroPAM에 대한 header 파일인 barokey.h은 다음과 같다. 

#ifndef BAROKEY_INCLUDED
#define BAROKEY_INCLUDED
 
#include <stdlib.h>
 
#ifdef __cplusplus
extern "C" {
#endif
 
char *baro_encrypts(const char *data);
char *baro_decrypts(const char *data);
 
long  get_timestamps(void);
long  getRemainingTime(const char *cycle_time);
char *getSecureKeyCreate(void);
char *generateKEYL(const char *login_id, const char *phone_no, const char *cycle_time, const char *key_method);
char *generateKEYP(const char *secure_key, const char *cycle_time, const char *key_method);
long  verifyKEY(const char *login_id, const char *phone_no, const char *cycle_time, const char *key_method, const char *tkey);
long  verifyKEYL(const char *login_id, const char *phone_no, const char *cycle_time, const char *key_method, const char *tkey);
long  verifyKEYP(const char *secure_key, const char *cycle_time, const char *key_method, const char *tkey);
 
#ifdef __cplusplus
}
#endif
 
#endif

 

1.2 연동 API 함수

1) 암복호화 함수


baro_encrypts 함수


- NAME

  baro_encrypts


- SYNOPSIS

  char *baro_encrypts(const char * data)


- DESCRIPTION

  데이터를 암호화 하는 함수.

 

  data: 암호화할 데이터


- RETURN VALUES

  암호화한 데이터를 반환.


baro_decrypts 함수


- NAME

  baro_decrypts


- SYNOPSIS

  char *baro_decrypts(const char * data)


- DESCRIPTION

  데이터를 복호화 하는 함수.

 

  data: 복호화할 데이터


- RETURN VALUES

  복호화한 데이터를 반환.


③ 데이터 암복호화 사용 예

#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include “/usr/baropam/key/barokey.h”
 
int main(int argc, char *argv[]) {
    const char *source_data = argv[1];
    const char *encrypt_data;
    const char *decrypt_data;
 
    encrypt_data = baro_encrypts(source_data );
    decrypt_data = baro_decrypts(encrypt_data);
 
    printf("Source  data = [%s]\n", source_data );
    printf("encrypt data = [%s]\n", encrypt_data);
    printf("decrypt data = [%s]\n", decrypt_data);
 
    return 0;
}

 

2) 일회용 인증키 검증 함수


verifyKEYL 함수(로그인-ID를 사용하는 경우)


- NAME

  verifyKEYL


- SYNOPSIS

  long verifyKEYL(const char *login_id, const char *phone_no, const char *cycle_time, const char *key_method, const char *auth_key)


- DESCRIPTION

  입력한 일회용 인증키가 맞는지 검증하는 함수.

   

   login_id: 로그인-ID 항목에 입력한 ID를 설정.

   phone_no: 사용자별 스마트 폰 번호를 숫자만 설정.

   cycle_time: 사용자별로 지정한 일회용 인증키의 생성 주기(3~60)를 설정.

   key_method: 일회용 인증키의 검증 방식(app1, app256, app384, app512: )을 설정.

   auth_key: BaroPAM 앱에서 생성하여 입력한 일회용 인증키를 설정.

 

만약, 사용자별로 스마트 폰 번호 및 개인별로 지정한 일회용 인증키의 생성 주기가 일회용 인증키의 생성기와 다른 경우 일회용 인증키가 달라서 검증에 실패할 수 있다. 반드시 정보를 일치시켜야 한다.

 

- RETURN VALUES

  성공 시에는 1을 반환하며, 실패 시는 0을 반환.


 verifyKEYP 함수(Secure key를 사용하는 경우)

 

- NAME

  verifyKEYP

 

- SYNOPSIS

  long verifyKEYP(const char *secure_key, const char *cycle_time, const char *key_method, const char *auth_key)

 

- DESCRIPTION

  입력한 일회용 인증키가 맞는지 검증하는 함수.

  

   secure_key: 사용자 또는 카드별로 부여한 Secure key를 설정.

   cycle_time: 사용자 또는 카드별로 지정한 일회용 인증키의 생성 주기(3~60)를 설정

   key_method: 일회용 인증키의 검증 방식(app1, app256, app384, app512: )을 설정.

   tkey: BaroPAM 앱에서 생성하여 입력한 일회용 인증키를 설정.

 

만약, 사용자 또는 카드별로 지정한 Secure key 일회용 인증키의 생성 주기가 일회용 인증키의 생성기와 다른 경우 일회용 인증키가 달라서 검증에 실패할 수 있다. 반드시 정보를 일치시켜야 한다.

 

- RETURN VALUES

  성공 시에는 1을 반환하며, 실패 시는 0을 반환.

 

1.3 인증키 검증 부분

 

Sample program) verifyKEYL 함수(로그인-ID를 사용하는 경우)

#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include "/usr/baropam/key/barokey.h"
 
int main(int argc, char *argv[]) {
    const char *login_id   = argv[1];    // 로그인-ID
    const char *phone_no   = argv[2];    // 폰번호
    const char *cycle_time = argv[3];    // 생성주기
    const char *key_method = argv[4];    // 인증키 생성방식
          char *auth_key   = argv[5];    // 일회용 인증키
 
    // 일회용 인증키 검증
    long bauth_key = verifyKEYL(login_id, phone_no, cycle_time, key_method, auth_key);
 
    // 일회용 인증키 검증(성공)
    if (bauth_key == 1) {
        printf("Auth key success.\n");
    // 일회용 인증키 검증(실패)
    } else {
        printf("Auth key faild.\n");
    }
}

 

Sample program) verifyKEYP 함수(Secure key를 사용하는 경우)

#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include "/usr/baropam/key/barokey.h"
 
int main(int argc, char *argv[]) {
    const char *secure_key = argv[1];    // Secure key
    const char *cycle_time = argv[2];    // 생성주기
    const char *key_method = argv[3];    // 인증키 생성방식
          char *auth_key   = argv[4];    // 일회용 인증키
 
    // 일회용 인증키 검증
    long bauth_key = verifyKEYP(secure_key, cycle_time, key_method, auth_key);
 
    // 일회용 인증키 검증(성공)
    if (bauth_key == 1) {
        printf("Auth key success.\n");
    // 일회용 인증키 검증(실패)
    } else {
        printf("Auth key faild.\n");
    }
}
 

 

컴파일)

$ gcc -o barokeys barokeys.c -L/usr/baropam/key –lbarokey-x.x.x

 

실행)

$ ./barokeys mc529@hanmail.net 01027714076 20 0 app512 490661
Auth key success.

 

참고) 실행시 다음과 같은 오류가 발생하는 경우

./barokeys: error while loading shared libraries: libbarokey.so: cannot open shared object file: No such file or directory

 

이런 경우 shared object file이 존재하지 않거나 shared object file가 존재하는 디렉토리가 Library path에 설정되어 있지 않아서 발생하므로 shared object file이 존재여부를 확인하고 shared object file가 존재하는 디렉토리(/usr/baropam/key) Library path에 설정해야 한다.

Linux/Solaris인 경우 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/baropam/key
HP-UX인 경우 export SHLIB_PATH=$SHLIB_PATH:/usr/baropam/key
AIX인 경우   export LIBPATH=$LIBPATH:/usr/baropam/key


2) 일회용 인증키의 검증 모듈 사용 예(Tuxedo 환경)

 

Sample program) verifyKEYL 함수(로그인-ID를 사용하는 경우)

#include <stdio.h>
#include <ctype.h>
#include <atmi.h>       /* TUXEDO Header File */
#include <userlog.h>    /* TUXEDO Header File */
 
#include "/usr/baropam/key/barokey.h"
 
TOUPPER(TPSVCINFO *rqst) {
    const char *login_id   = "mc529@hanmail.net";
    const char *phone_no   = "01027714076";
    const char *cycle_time = "20";
    const char *key_method = "app512";
          char *auth_key   = rqst->data;
 
    strcpy(auth_key, rqst->data);
    long bkey = verifyKEYL(login_id, phone_no, cycle_time, key_method, tkey);
 
    sprintf(rqst->data, "%d", bkey);
    /* Return the transformed buffer to the requestor. */
    tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}

 

Sample program) verifyKEYP 함수(Secure key를 사용하는 경우)

#include <stdio.h>
#include <ctype.h>
#include <atmi.h>       /* TUXEDO Header File */
#include <userlog.h>    /* TUXEDO Header File */
 
#include "/usr/baropam/key/barokey.h"
 
TOUPPER(TPSVCINFO *rqst) {
    const char *secure_key = "jIqIcHbVqdpj7b4PzBpM2DiIeBvmHFV/";
    const char *cycle_time = "20";
    const char *key_method = "card512";
          char *tkey       = rqst->data;
 
    strcpy(tkey, rqst->data);
    long bkey = verifyKEYP(secure_key, cycle_time, key_method, tkey);
 
    sprintf(rqst->data, "%d", bkey);
    /* Return the transformed buffer to the requestor. */
    tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
 

 

컴파일)

$ CFLAGS="-L/usr/baropam/key –lbarokey-x.x.x" buildserver -v -o simpserv -f simpserv.c -s TOUPPER

 

참고) Tuxedo 서비스에서 일회용 인증키를 검증하는 경우, 컴파일 시 CFLAGS 옵션에 일회용 검증키 모듈을"-L/usr/baropam/key –lbarokey-x.x.x" 설정해야 한다.


Tuxedo 서버 프로세스 기동시 다음과 같은 오류가 발생하는 경우

error while loading shared libraries: libbarokey-x.x.x.so: cannot open shared object file: No such file or directory

 

이런 경우 shared object file이 존재하지 않거나 shared object file가 존재하는 디렉토리가 Library path에 설정되어 있지 않아서 발생하므로 shared object file이 존재여부를 확인하고 shared object file가 존재하는 디렉토리(/usr/baropam/key) Library path에 설정해야 한다.

Linux/Solaris인 경우 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/baropam/key
HP-UX인 경우 export SHLIB_PATH=$SHLIB_PATH:/usr/baropam/key
AIX인 경우   export LIBPATH=$LIBPATH:/usr/baropam/key

 

 

2. BaroPAM 적용

 

2.1 BaroPAM 적용 프로세스

 

 

2.2 BaroPAM 적용 화면

 

 

2.3 본인확인 적용 프로세스

 

아이폰(iPhone)의 기기정보를 얻지 못해서 2차 인증키(일회용 인증키)를 생성하기 위해서 로그인 정보 항목을 선택 했을 때 "일회용 인증키" 생성 화면으로 이동하지 않은 경우가 발생할 수 있다.

 

또한, 타인의 폰번호를 부정으로 사용하지 못하도록 하기 위해서 별도의 본인확인 기능을 적용할 필요가 있는데, "BaroPAM" 앱에서는 자체 알고리즘을 적용하여 자체적으로 본인확인 절차를 실행하고 있다.

 

 

2.4 본인확인 적용 화면

 

아이폰(iPhone)의 기기정보를 얻지 못해서 2차 인증키(일회용 인증키)를 생성하기 위해서 로그인 정보 항목을 선택 했을 때 "일회용 인증키" 생성 화면으로 이동하지 않은 경우가 발생할 수 있다.

 

또한, 타인의 폰번호를 부정으로 사용하지 못하도록 하기 위해서 별도의 본인확인 기능을 적용할 필요가 있는데, "BaroPAM" 앱에서는 자체 알고리즘을 적용하여 자체적으로 본인확인 절차를 실행하고 있다.

 

 

2.5 BaroPAM 앱 설치 및 정보 설정

 

정보자산에 로그인 시 Verification code에 입력할 일회용 인증키의 생성기인 BaroPAM 앱의 다운로드(https://play.google.com/store/apps/details?id=com.baro.pam)는 구글의 "Play 스토어" Apple "App 스토어"에서 가능하며, 설치는 일반 앱의 설치와 동일하다.

 

 

 

 

3. About BaroPAM

 

Version 1.0 - Official Release - 2016.12.1

Copyright ⓒ Nurit corp. All rights reserved.

http://www.nurit.co.kr


제 조 사 : 주식회사 누리아이티
등록번호 : 258-87-00901
대표이사 : 이종일
대표전화 : 02-2665-0119(영업문의/기술지원)
이 메 일 : mc529@nurit.co.kr
주    소 : 서울시 강서구 마곡중앙2로 15, 913호(마곡동, 마곡테크노타워2)