주식회사 누리아이티

정보자산의 보안강화를 위한 3단계 인증 보안SW 및 지문인식 OTP/출입/보안카드 전문기업

▶ BaroSolution/가이드

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

누리아이티 2023. 5. 13. 14:25

목차
 
1. 일회용 인증키(One Time Authentication key)
1.1 일회용 인증키 개요
1.2 인증키 생성 및 인식 방식
1.3 인증키 전달 방식
1.4 메시지 인증코드

 
2. BaroPAM 연동 API
2.1 연동 API 함수
2.2 인증키 검증 부분

 

3. BaroPAM 적용
3.1 BaroPAM 적용 프로세스
3.2 BaroPAM 적용 화면
3.3 본인확인 적용 프로세스

3.4 본인확인 적용 화면

3.5 BaroPAM 웹 설치 및 정보 설정
 

4. NTP(Network Time Protocol) 설정
4.1 Linux 환경
 
5. About BaroPAM

 

 

 

1. 일회용 인증키(One Time Authentication key)

1.1 일회용 인증키 개요

전자거래 중에 교환되는 데이터가 변경되지 않고 허가되지 않은 제3자에 의해 간섭받지 않도록하기 위해 사용되는 디지털(전자키로 그것은 인증 및 보안 트랜잭션의 고유 한 정보(날짜시간)를 기반으로하는 디지털(전자코드 세트로 구성된다일명 디지털 키 또는 전자 키라고도 불린다.

 

고정된 비밀번호 대신 무작위로 생성한 일회용 인증키로 사용자를 인증하는 방법으로, 보안을 강화하려고 도입한 시스템이다로그인 할 때마다 일회성 인증키를 생성한다동일한 일회성 인증키가 사용되지 않아 보안을 강화할 수 있다주로 전자 거래에서 사용된다.

 

사용자는 "일회용 인증키"를 생성하는 하드웨어인 일회용 인증키의 생성기(Authentication key Token)를 이용한다별도 일회성 인증키의 생성기를 소지해야 하는 불편함으로 전자 거래에만 주로 사용된다. 일회용 인증키의 생성기는 버튼을 누르면 8자리의 일회성 인증키가 생성되는 방식이다.

 

매 1분마다 자동으로 서로 다른 8자리의 일회용 인증키가 나오는 시간 동기 방식과 키패드에 4자리 비밀번호를 입력하면 8자리 일회용 인증키를 보여 주는 방식 등이 있다형태로는 소형 단말기 형태 토큰형과 카드형이 사용된다최근에는 휴대폰 범용 가입자 식별모듈(USIM)을 기반으로 하는 모바일 인증키(Mobile Authentication key)의 도입이 늘고 있다.

  

1.2 인증키 생성 및 인식 방식

1. S/KEY 방식

 

벨 통신 연구소에서 개발한 인증키 생성 방식으로, 유닉스 계열 운영 체제에서 인증에 사용되고 있다그 생성 알고리즘은 아래와 같다.

 

① 클라이언트에서 정한 임의의 비밀키를 서버로 전송한다.

 클라이언트로부터 받은 비밀키를 첫 값으로 사용하여, 해시 체인 방식으로이전 결과 값에 대한 해시 값을 구하는 작업을 n번 반복한다.

 그렇게 생성된 n개의 인증키를 서버에 저장한다.

 

또한 이를 통해, 클라이언트에서 i번째로 서버에 인증을 요구할 때의 인증 방식은 아래와 같다.

 

① 클라이언트에서 정한 인증키에 해시 함수를 n-i번 중첩 적용하여 서버로 전송한다.

 서버에서는 클라이언트로부터 받은 값에 해시 함수를 한 번 적용하여, 그 결과가 서버에 저장된 n-i+1번째 인증키와 일치하는지 검사한다.

 일치하면 인증에 성공한 것으로, 카운트를 1 증가시킨다.

 

해시 체인에 기반하고 있는 이 알고리즘은, 해시 함수의 역연산을 하기 어렵다는 점에 착안하여 만들어졌다.

 

해킹에 의해 클라이언트에서 서버로 전송되는 값이 노출된다 해도, 그 값은 일회용이므로 다시 사용될 수 없다또한 그 다음 인증을 위해서는 그 전에 전송된 값보다 해시 함수가 한 번 적게 적용된 값을 사용해야 하는데그 값을 유추하는 것 또한 매우 어렵다.

 

다만 생성했던 인증키를 모두 소진하면 다시 새로 설정을 해야 하며, 서버에 저장돼 있는 인증키 목록이 유출될 경우 보안에 대단히 취약해진다는 단점이 있다.

  

2. 시간 동기화 방식

 

인증키를 생성하기 위해 사용하는 입력 값으로 시각을 사용하는 방식이다. 클라이언트는 현재 시각을 입력값으로 인증키를 생성해 서버로 전송하고서버 역시 같은 방식으로 인증키를 생성하여 클라이언트가 전송한 값의 유효성을 검사한다.

 

임의의 입력값이 필요하지 않다는 점에서 사용하기 간편하고, 클라이언트가 서버와 통신해야 하는 횟수가 비교적 적다또 서버에서 클라이언트에 입력값을 보내는 방식이 아니므로여타 인증키 생성 방식에 비해 피싱에 안전하다한편 클라이언트에서 시각 정보를 이용해 인증키를 생성하므로스마트폰 등의 모바일 기기도 클라이언트로 사용되기 적합하다는 점 역시 비용 절감 측면에서 장점이다.

 

하지만 클라이언트와 서버의 시간 동기화가 정확하지 않으면 인증에 실패하게 된다는 단점이 있으며, 이를 보완하기 위해 일반적으로 1~2 분 정도를 인증키 생성 간격으로 둔다.

 

미국 RSA사에서 만든 '시큐어 ID'가 이 방식을 사용한다.

  

3. 챌린지.응답 방식

 

서버에서 난수 생성 등을 통해 임의의 수를 생성하고 클라이언트에 그 값을 전송하면, 클라이언트가 그 값으로 인증키를 생성해 응답한 값으로 인증하는 방식이다.

 

입력값이 매번 임의의 값이 된다는 측면에서는 안전성을 갖추고 있으나, 네트워크 모니터링에 의해 전송되는 값들이 노출될 경우 매우 취약해진다는 단점이 있다또 서버와 클라이언트 사이의 통신 횟수도 비교적 많이 요구된다.

  

4. 이벤트 동기화 방식

 

서버와 클라이언트가 카운트 값을 동일하게 증가시켜 가며, 해당 카운트 값을 입력값으로 인증키를 생성해 인증하는 방식이다.

 

다만 클라이언트에서 인증키를 생성하기만 하고 인증에 사용하지 않으면, 서버와 클라이언트의 카운트 값이 불일치하게 된다는 문제점이 있다이러한 문제를 보완하기 위해 어느 정도 오차 범위 내에서는 인증을 허용하는 방법이나카운트가 어긋났다고 판단될 경우 연속된 인증키를 받아 유효성을 판별하는 방법 등이 사용된다.

 

 1.3 인증키 전달 방식

 

인증키는 사용자 인증에 사용되므로, 기본적으로 서버와 클라이언트 사이에 통신 및 전달 수단이 필요하다이러한 수단으로는아래와 같은 것들이 있다.

 

1. 인증키 토큰

 

인증키 토큰이라 불리는 별도의 하드웨어를 클라이언트로 사용하는 방식이다. 기기 자체에서 해킹이 이루어지기는 힘들지만토큰을 구입해야 하므로 추가 비용이 필요하며 휴대하기에 불편하다는 단점이 있다.

  

2. 카드형 인증키 토큰

 

기존의 토큰의 불편한 휴대성을 개선하기 위해, 얇은 두께로 휴대하기에 편리한 카드형 토큰도 출시된 바 있다일반 카드에 비해 별로 두껍지 않아 지갑에도 휴대가 가능하지만처리 속도가 느려 인증키 생성에 시간이 더 걸리고 수명이 짧으며 가격도 비싸다는 단점이 있다.

  

3. 스마트폰 앱

 

별도의 하드웨어 장비를 필요로 하지 않아서 추가 비용 없이도 인증키 서비스를 이용할 수 있는 방식이다. 해당 스마트폰에 맞게 제공되는 앱을 설치함으로써 이용할 수 있다물론 서버 측에서 이 방식을 지원하지 않으면 이용할 수 없다는 단점이 있다.

  

4. SMS

 

SMS로 인증키를 전달하는 방식이다. 스마트폰이 아닌 어떤 종류의 휴대전화만 있어도 이용 가능하다는 장점이 있지만, SMS 자체의 해킹 위험성에 의해 현재는 거의 사용되지 않고 있다.

  

1.4 메시지 인증코드

1. 메시지 인증코드란?

 

메시지인증코드(Message Authentication Code)의 약어로서

 

■ 이 기술은 메시지에 붙여지는 작은 데이터 블록을 생성하기 위해 비밀키를 이용하는 방법이다.

■ 이 기술을 이용하면 전송되는 메시지의 무결성을 확인하여, 메시지에 대한 인증을 할 수 있다.

■ 메시지 인증 코드는, 임의 길이의 메시지와 송신자와 수신자가 공유하는 키라는 2개의 입력을 기초로 해서고정 비트 길이의 출력을 계산하는 함수이다.

■ 이 함수의 출력을 MAC 값이라 부른다.

 

MAC는 메시지의 인증에 쓰이는 작은 크기의 정보이다.  MAC을 이용하여메시지의 무결성과 신뢰성을 보장하는데 사용한다.

 

MAC의 알고리즘은 인증을 위한 Secret Key와의 임의 길이의 메시지를 입력 받아 MAC을 출력하는Keyed Hash Function을 사용한다.

 

MAC은 Cryptographic Hash Function과 같은 특성을 가진다그 메인 속성은 다음과 같다.

① Hash value로 계산하기 쉽다.
 생성된 Hash를 통해서 Message Generate 하는 것이 불가능하다.
 Hash를 수정하지 않고, Message를 수정하는 것이 불가능하다.
 다른 두 Message가 동일한 Hash를 보내는 것이 불가능하다.

 

사용되는 Hash 알고리즘은 MD5, SHA-1, SHA-2 등 일반적인 암호화 알고리즘을 그대로 사용할 수 있으며사용된 알고리즘에 따라서 고정 길이의 Hash value가 생성된다.

 

MAC을 간단하게 도식화 하면 다음과 같다. 

 

MAC에 사용되는 Key에 따라서 CMAC, HMAC, UMAC, VMAC 등으로 나눈다.

 

① CMAC

암호 기반 메시지 인증 방식으로 Cipher-based MAC이다.

AES와 triple-DES를 이용하는 방법으로 많이 사용된다.

 

② UMAC

Universal Hashing 기반으로 메시지 인증코드를 사용하는 방법이다.

Universal Hashing는 다음의 특성을 가지는 Hash 함수 F를 선택하기 위한 확률적 알고리즘이다.

F(x) = F(y)

 

③ VMAC

블럭 함호 기반 메시지 인증(block cipher-based message authentication code) 방식으로 보편적 해시 알고리즘을 사용한다.

 

이런 것을 사용하는 이유는 다음과 같다. 

① 짧고, 고정 길이 이다.
 중복을 방지할 수 있다.
 메시지 구조를 숨길 수 있다.
 그러면서도 메시지에 대한 유효성 및 인증이 가능하다.

 

암호화 알고리즘과 동일한 방법을 사용하므로, 알고리즘에 따라서 속도가 많이 달라진다속도는 MD%가 빨라서 많이 사용했으나암호화 결함이 발견되어 사용이 줄어 들었다.

 

보완 관련 용도는 SHA-256을 권장하지만아직까지는 한국에서는 SHA-1을 많이 사용한다.

  

1) 일방향 함수와 MAC의 차이점 

 

■ 일방향 해시 함수로 해시 값을 계산할 때는 키를 사용하지 않았다.

■ 메시지 인증 코드에서는 송신자와 수신자가 공유하는 키를 사용한다.

 

2) MAC의 이용순서 

 

MAC은 Cryptographic Hash Function과 같은 특성을 가진다그 메인 속성은 다음과 같다. 

① 주어진 Message Hash값으로 계산하기는 쉽다.
② 주어진 Hash값으로 Message를 계산하는 것은 거의 불가능하다.
③ 아주 약간의 차이를 가진 두 Message가 동일한 Hash값을 갖는 일은 거의 불가능하다.

  

2. HMAC(Hash-based Message Authentication Code)란?

 

해시 함수(hash function)는 임의의 길이를 갖는 메시지를 입력 받아 고정된 길이의 해쉬값을 출력하는 함수이다암호 알고리즘에는 키가 사용되지만해쉬 함수는 키를 사용하지 않으므로 같은 입력에 대해서는 항상 같은 출력이 나오게 된다이러한 함수를 사용하는 목적은 입력 메시지에 대한 변경할 수 없는 증거값을 뽑아냄으로서 메시지의 오류나 변조를 탐지할 수 있는 무결성을 제공하는 목적으로 주로 사용된다.

 

해쉬 함수는 전자 서명과 함께 사용되어 효율적인 서명 생성을 가능하게 한다. 긴 메시지에 대해 서명을 하는 경우전체 메시지에 대해 직접 서명을 하는 것이 아니고 짧은 해쉬값을 계산해 이것에  대해 서명을 하게 된다공개케 연산은 많은 계산량을 필요로 하기 때문에 전체 미시지를 공개키 길이의 블록 단위로 나누어 모든 블록에 대해 서명을 하는 것은 매우 비효율적이다그러므로 먼저 메시지를 입력 받아 짧은 해쉬값을 계산하고이것에 대해 한 번의 서명 연산을 하는 것이다이 계산값은 원래의 메시지에 대한 서명으로 인정된다.

 

해쉬값에 대한 서명이 원 메시지에 대한 서명으로 인정되기 위해서는 같은 해쉬값을 갖는 또 다른 메시지를  찾아내기가 계산적으로 어려워야 한다해쉬 함수는 임의의 길이의 입력으로부터 짧은 길이의 해쉬값을 출력하므로 입력은 서로 다르지만 같은 출력을 내는 충돌이 반드시 존재한다만일 같은 해쉬값을 갖는 다른 메시지를 찾아내기가 쉽다면서명자는 자신의 서명에 대해 다른 메시지에 대한 서명이라고 우길 수 있을 것이기 때문이다이것이 가능하다면전자 서명에 대한 신뢰가 불가능하고 전자 거래에 사용할 수 없게 될 것이다그러므로 안전한 해쉬 함수로 사용될 수 있기 위해서는 충돌을 찾아내기 어렵다는 특성을 가져야 한다.

 

한편, 해쉬 함수는 전자 서명에 사용된다고 했는데이것은 서명자가 특정 문서에 자신의 개인키를 이용하여 연산함으로서 데이터의 무결성과 서명자의 인증성을 함께 제공하는 방식이다메시지 전체에 대해 직접 서명하는 것은 공개키 연산을 모든 메시지 블록마다 반복해야 하기 때문에 매우 비효율적이다따라서 메시지에 대한 해쉬값을 계산한 후이것에 대해 서명함으로서 매우 효율적으로 전자 서명을 생성할 수 있다서명자는 메시지 자체가 아니라 해쉬값에 대해 서명을 하였지만 같은 해쉬값을 갖는 다른 메시지를 찾아내는 것이 어렵기 때문에이 서명은 메시지에 대한 서명이라고 인정된다.

 

송신자의 신분에 대한 인증이 필요 없고, 데이터가 통신 중 변조되지 않았다는 무결성만이필요한 경우에는 해쉬 함수를 메시지인증코드(MAC, Message Authentication Code)라는 형태로 사용할 수 있다송신자와 수신자가 비밀키를 공유하고 있는 경우송신자는 메시지와 공유된 비밀키를 입력으로 하여 해쉬값을 계산하면 메시지인증코드가 된다메시지와 함께 메시지인증코드를 함께 보내면 수신자는 메시지가 통신 도중 변조되지 않았다는 확신을 가질 수 있다.

 

대표적인 해쉬 함수는 다음과 같다.

 

최조의 알고리즘은 1993년 미국 국가 안전 보장국(NSA)이 설계하였으며미국 표준 기술 연구소(NIST)에 의해 SHS(Secure Hash Standard, FIPS PUB 180)으로 출판되었으며다른 함수들과 구별하기 위해 보통 SHA-0으로 불린다. 2년 후 SHA-0의 압축 함수에 비트 회전 연산을 하나 추가한 SHA-1(FIPS PUB 180-1)이 발표되었으며그 후에 4종류의 변형 SHA-224, SHA-256, SHA-384, SHA-512(FIPS PUB 180-2)가 추가로 발표되었다이들을 통칭해서 SHA-2라고 하기도 한다. SHA-1 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다하지만 최근 SHA-0 SHA-1에 대한 분석 결과가 발표됨에 따라 SHA-2를 사용할 것이 권장되고 있다.

 

국내에서 개발된 대표적인 해쉬 함수인 HAS-160[28] 2000 12월 국내 해쉬 함수 표준(TTAS.KO-12.0011/R1)으로 채택되었다. HAS-160의 설계 원리는 SHA-1의 설계 사상이 유사하지만메시지 확장 과정이 기존의 MD계열 해쉬 함수와는 차이가 있어최근 제안된 다양한 해쉬 함수 분석 기법에 대하여 아직까지는 안전성을 가지고 있다.

 

한마디로 HMAC Key를 조합하여 Hash 함수를 구하는 방식으로 송신자와 수신자만이 공유하고 있는 Key와 메시지를 혼합하여 Hash 값을 만드는 방식이며채널을 통해 보낸 메시지가 훼손되었는지 여부를 확인하는데 사용할 수 있으며, MAC 특성상 역산이 불가능하므로수신된 메시지와 Hash 값을 다시 계산하여계산된 HMAC과 전송된 HMAC이 일치하는지를 확인하는 방식이다. 

 

① HMAC은 일방향 해시 함수를 이용해서 메시지 인증 코드를 구성하는 방법인데, HMAC에서는 사용하는 일방향 해시 함수를 단 한 종류로 정해 놓고 있는 것은 아니다.
 강한 일방향 해시 함수라면 뭐든지 HMAC에 이용할 수 있다.
 장래 새로운 일방향 해시 함수가 고안된다면 그것을 사용할 수도 있다.
 이와 같은 형태로 만들어진 알고리즘을 모듈형 알고리즘이라고 한다.

 

HMAC 의 순서는 다음과 같이 단방향 해시 함수를 사용한 메시지 인증코드의 예 

 

대칭블록암호에 기반을 둔 MAC 방식으로 알고리즘에 따라서 HMAC value size가 달라진다. 

HMAC_MD5   ("", "") = 0x74e6f7298a9c2d168935f58c001bad88
HMAC_SHA1  ("", "") = 0xfbdb1d1b18aa6c08324b7d64b71fb76370690e1d
HMAC_SHA256("", "") = 0xb613679a0814d9ec772f95d778c35fc5ff1697c493715653c6c712144292c5ad

 

암호화 알고리즘과 동일한 방법을 사용하므로, 알고리즘에 따라서 속도가 많이 달라진다속도는 MD5가 빨라서 많이 사용했으나암호화 결함이 발견되어 사용이 줄어들었다보안관련 용도는 SHA-256을 권장하지만아직까지 한국에서는 SHA-1을 많이 사용한다.

 

 

 

2. BaroPAM 연동 API

 

PHP 환경에서 어플리케이션 로그인 시 비밀번호를 대체 또는 2차 인증(추가 인증)하기 위하여 일회용 인증키(OTA key, One-Time Authentication key)를 검증하는 기능을 제공한다.

 

2.1 연동 API 함수

 

1) verifyKEY() 메소드

 

- NAME

  verifyKEY

 

- SYNOPSIS

  bool verifyKEY(String login_id, String phone_no, String cycle_time, String ota_key)

 

- DESCRIPTION

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

 

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

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

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

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

 

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

 

- RETURN VALUES

 성공 시에는 true을 반환하며, 실패 시는 false을 반환.

 

 

2.2 인증키 검증 부분

 

 

curl의 명칭은 "client URL"을 대표하는 것으로 1997년에 처음 출시되었다. 즉 클라이언트가 스크립트로써 서버에 데이터를 요청하는 것으로 curlhttp/https 되어 있는 일회용 인증키의 검증하기 위하여 일회용 인증키의 검증을 요청한다.

 

일회용 인증키 검증 요청)

 

<%
// phone_no, cycle_time login_id별로 사용자DB에서 가져옴.
$phone_no   = "01027714076"
$cycle_time = "30"
 
// cURL 세션을 초기화하는 PHP 함수
$ch = curl_init();
 
// cURL 전송 옵션 설정
curl_setopt($ch, CURLOPT_URL,"http://nuriapp.com/baropam/web/result_ota.jsp");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
$post = array('login_id' => $login_id, 'phone_no' => $phone_no, 'cycle_time' => $cycle_time, 'ota_key' => $ota_key);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
 
// http request 수행
$server_output = curl_exec($ch);
 
// cURL 세션 닫기
curl_close($ch);
 
// OTA key 검증(실패)
if (strops($server_output, "00") == false) {
    echo "Authentication faild.";

// OTA key 검증(성공)
} else {
    echo "Authentication success.";
}
%>

 

일회용 인증키 검증 결과)

 

BaroPAM에서 사용하는 인증 코드인 일회용 인증키 Java를 기반으로 작성되었기 때문에 반드시 최신 JDK 6.x 이상이 설치되어 있어야 한다. 만약, 설치되어 있지 않으면 최신 JDK를 설치해야 한다.

 

일회용 인증키를 검증하는 API "barokey.jar"로 제공되며, WAS(Web application Server) lib 디렉토리 "barokey.jar"를 위치 시키거나 classpath "barokey.jar"가 존재하는 디렉토리를 포함해서 설정해 주면 된다.

 

<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="org.apache.log4j.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.barokey.*"%>
<% request.setCharacterEncoding("utf-8"); %>
<% response.setContentType("text/html; charset=utf-8"); %>
<%!
private Logger logger = Logger.getLogger("JspLogger");
%>
<%
/*---------------------------------------------------------------------------*/
/* 변수선언 및 초기화.                                                       */
/*---------------------------------------------------------------------------*/
int     ii = 0, jj = 0, kk = 0, ll = 0;                  // Index
 
String  result   = "";                                   // Result
boolean bota_key = false;                                // 인증키 검증
/*---------------------------------------------------------------------------*/
/* Request에서 데이터를 얻어옴(로그인 정보).                                 */
/*---------------------------------------------------------------------------*/
String  login_id   = request.getParameter("login_id"  );
String  phone_no   = request.getParameter("phone_no"  );
String  cycle_time = request.getParameter("cycle_time");
String  ota_key    = request.getParameter("ota_key"   );
 
logger.info("(result_ota.jsp)Starting......................");
String  param = request.getServerName() + request.getRequestURI()
              + "?remote_addr="         + request.getRemoteAddr()
              + "&login_id="            + login_id
              + "&phone_no="            + phone_no
              + "&cycle_time="          + cycle_time
              + "&ota_key="            + ota_key
              ;
logger.info(param);
/*---------------------------------------------------------------------------*/
/* Begin.                                                                    */
/*---------------------------------------------------------------------------*/
try {
    /*-----------------------------------------------------------------------*/
    /* 인증키 검증.                                                          */
    /*-----------------------------------------------------------------------*/
    bota_key = barokey.verifyKEY(login_id, phone_no, cycle_time, ota_key);
    /*-----------------------------------------------------------------------*/
    /* 인증키 검증(성공).                                                    */
    /*-----------------------------------------------------------------------*/
    if (bota_key == true) {
        result = "00";
    /*-----------------------------------------------------------------------*/
    /* 인증키 검증(실패).                                                    */
    /*-----------------------------------------------------------------------*/
    } else {
        result = "99";
    }
    out.println(result);
/*---------------------------------------------------------------------------*/
/* 예외사항 처리(Exception).                                                 */
/*---------------------------------------------------------------------------*/
} catch(Exception e) {
    logger.info("Exception = [" + e + "]");
    e.printStackTrace();
/*---------------------------------------------------------------------------*/
/* Finally.                                                                  */
/*---------------------------------------------------------------------------*/
} finally {
    logger.info("(result_ota.jsp)Ending......................");
}
%>

 

 

 

3. BaroPAM 적용

 

3.1 BaroPAM 적용 프로세스

 

 

3.2 BaroPAM 적용 화면

 

 

3.3 본인확인 적용 프로세스

 

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

 

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

 

 

3.4 본인확인 적용 화면

 

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

 

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

 

 

3.5 BaroPAM 웹 설치 및 정보 설정

 

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

 

 

 

 

 

4. NTP(Network Time Protocol) 설정

 

최근에는 서버/네트워크 장비에 대한 시간 동기화(타임서버 시간 동기화)하는 방법으로 NTP(Network Time Protocol)을 이용하여 관리자 계정에서 시스템의 시각을 현재 시각으로 설정할 수 있다.

 

4.1 Linux 환경

 

최근에는 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 시간 동기화(타임서버 시간 동기화)하는 방법으로 NTP(Network Time Protocol)을 이용하여 루트 계정에서 시스템의 시각을 현재 시각으로 설정할 수 있다.

 

NTP를 사용하기 위해서는 기본적으로 NTP 패키지가 반드시 설치되어 있어야 한다. 설치 확인은 다음의 명령어를 실행하여 확인한다. 만약, 설치되어 있지 않으면 Redhat, CentOS 8 이하 버젼은 "yum install ntp" 그외는 "sudo apt-get install ntp" 명령어로 설치하면 된다.

 

[root]# rpm -qa | grep ntp
ntp-4.2.2p1-18.el5.centos
chkfontpath-1.10.1-1.1

 

ntpd 서비스를 서버 부팅 시 시작프로그램에 등록 및 ntp 활성화 여부 확인은 다음과 같은 명령어로 확인 할 수 있다.

 

[root]# chkconfig ntpd on
[root]# chkconfig --list | grep ntp
ntpd            0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제

 

chkconfig 이용하여 서버 부팅시 ntpd 데몬 활성화 여부 확인 3, 5 level off(해제) 가 되어 있으면 자동 활성화 되지 않는다. 자동 활성화 하기 위해서는 3, 5 on(활성)으로 다음과 같은 명령어로 변경해야 한다.

 

[root]# chkconfig --level 3 ntpd on
[root]# chkconfig --level 5 ntpd on

 

우리나라에서 운영되고 있는 NTP 서버는 다음과 같다.

 

server kr.pool.ntp.org
server time.bora.net
server time.kornet.net

 

우리나라에서 운영되고 있는 NTP 서버를 ntpd 데몬 설정을 위한 설정 파일인 "/etc/ntp.conf"에 다음과 같이 설정한다.

 

[root]# vi /etc/ntp.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
#server 3.centos.pool.ntp.org
server kr.pool.ntp.org iburst
server time.bora.net   iburst
server time.kornet.net iburst

 

iburst 옵션은 일종의 옵션 설정으로써 동기화 하는데 걸리는 시간을 짧게 줄여주는 옵션임.

 

ntpd 데몬 설정을 위한 설정이 끝나면 반드시 NTP 설정이 제대로 추가되었는지 확인한 후 NTP 데몬의 Restart 작업이 반드시 필요하다.

 

[root]# /etc/init.d/ntpd restart
ntpd를 종료 중: [  OK  ]
ntpd ()를 시작 중: [  OK  ]

 

ntpd 시간 확인은 다음과 같은 명령어로 확인할 수 있다.

 

[root]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 static.betaidc. 106.247.248.106  3 u    7   64    1    2.884  287.718   0.001
 time.bora.net   .INIT.          16 u    -   64    0    0.000    0.000   0.000
 183.110.225.61  .INIT.          16 u    -   64    0    0.000    0.000   0.000
 LOCAL(0)        .LOCL.          10 l    4   64    1    0.000    0.000   0.001

* 표시된 ip 가 현재 시간을 가져오고 있는 ntp 서버임

 

NTP를 사용하기 위해서는 기본적으로 NTP 패키지가 반드시 설치되어 있어야 한다. 설치 확인은 다음의 명령어를 실행하여 확인한다. 만약, 설치되어 있지 않으면 Redhat, CentOS 8 이상 버젼은 "yum install chrony" 명령어로 설치하면 된다.

 

[root@baropam ~]# rpm -qa | grep chrony
chrony-3.5-1.el8.x86_64

 

우리나라에서 운영되고 있는 NTP 서버는 다음과 같다.

 

server kr.pool.ntp.org
server time.bora.net
server time.kornet.net

 

우리나라에서 운영되고 있는 NTP 서버를 ntpd 데몬 설정을 위한 설정 파일인 "/etc/chrony.conf"에 다음과 같이 설정한다.

 

[root@baropam ~]# vi /etc/chrony.conf
 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool 2.centos.pool.ntp.org iburst
server kr.pool.ntp.org iburst
server time.bora.net   iburst
server time.kornet.net iburst
 
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
 
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
 
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
 
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
 
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
 
# Allow NTP client access from local network.
allow 192.168.0.0/16
 
# Serve time even if not synchronized to a time source.
#local stratum 10
 
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys
 
# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC
 
# Specify directory for log files.
logdir /var/log/chrony
 
# Select which information is logged.
#log measurements statistics tracking

 

ntpd 데몬 설정을 위한 설정이 끝나면 반드시 NTP 설정이 제대로 추가되었는지 확인한 후 NTP 데몬의 Restart 작업이 반드시 필요하다. (chrony 서비스 시작 및 부팅시 구동 등록)

 

[root@baropam ~]# systemctl start chronyd
[root@baropam ~]# systemctl enable chronyd

 

ntpd 시간 확인은 다음과 같은 명령어로 확인할 수 있다.

 

시간을 받아오는 서버 리스트 / chrony.conf 파일에 등록한 server 리스트)

 

[root@baropam ~]# chronyc sources
210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^* ec2-54-180-134-81.ap-nor>     2   6   377    43   -349us[-1059us] +/-   24ms
^- time.bora.net                 2   6   377    42  +1398us[+1398us] +/-   90ms

 

시간을 받아 오는 서버 정보)

 

[root@baropam ~]# chronyc tracking
Reference ID    : 36B48651 (ec2-54-180-134-81.ap-northeast-2.compute.amazonaw)
Stratum         : 3
Ref time (UTC)  : Sun Mar 22 07:07:43 2020
System time     : 0.000130027 seconds slow of NTP time
Last offset     : -0.000710122 seconds
RMS offset      : 0.000583203 seconds
Frequency       : 19.980 ppm fast
Residual freq   : +0.142 ppm
Skew            : 3.235 ppm
Root delay      : 0.013462566 seconds
Root dispersion : 0.017946836 seconds
Update interval : 65.0 seconds
Leap status     : Normal

 

시간 상태 및 동기화 등 정보 확인)

 

[root@baropam ~]# timedatectl status
               Local time: Sun 2020-03-22 16:08:45 KST
           Universal time: Sun 2020-03-22 07:08:45 UTC
                 RTC time: Sun 2020-03-22 07:08:44
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

 

 

 

5. 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)