주식회사 누리아이티

지문인식카드 및 정보자산 2차 인증 보안SW 전문기업

가볍고 가장 빠른 암호화 알고리즘을 위한 BaroCRYPT 가이드(C, Java, Oracle, Tibero)

댓글 0

▶ BaroSolution/BaroCRYPT

2018. 1. 18.

목차
 
1. 정보보안(Information Security)
1.1 정보보안의 정의
1.2 정보보안의 3요소
1.3 정보보안 관련 용어 정리
1.4 정보보안의 침해사고
1.5 정보보안의 대비책
1.6 정보보안의 주요 법령과 규정
1.7 개인정보 암호화 대상 항목
 
2. BaroCRYPT
2.1 BaroCRYPT 개요
2.2 BaroCRYPT 특/장점
 
3. BaroCRYPT 연동 API
3.1 연동 API 사용 전 준비사항
3.2 BaroCRYPT 연동 API
 
4. BaroCRYPT 연동 API(DB)
4.1 External Procedure란?
4.2 장점 및 단점
4.3 Java 모듈(barocrypts.java)
4.4 C 모듈(libbarocrypts.so)
 
5. About BaroCRYPT

 

 

1. 정보보안(Information Security)

1.1 정보보안의 정의

 

정보보안에 대한 정의는 정보보안을 다루는 주체나 기관에 따라 다양하게 정의를 내리고 있다.

 

"정보의 기밀성, 무결성, 가용성의 보존. 추가적으로 진정성(authenticity), 책임성(accountability), 부인방지(non-repudiation), 그리고 신뢰성(reliability)와 관계가 있을 수 있다." (ISO/IEC 27000:2009)

 

"인가되지 않은 접근, 사용, 폭로, 붕괴, 수정, 파괴로부터 정보와 정보 시스템을 보호해 기밀성, 무결성, 가용성을 제공하는 것." (CNSS, 2010)

 

"인가된 사용자만이(기밀성) 정확하고 완전한 정보로(무결성) 필요할 때 접근할 수 있도록(가용성) 하는 일련의 작업." (ISACA, 2008)

 

"조직의 지적 자산을 보호하는 절차." (Pipkin, 2000)

 

"...정보보안은 위험 관리 규율로, 사업의 정보 위험 가치를 관리하는 작업이다." (McDermott and Geer, 2001)

 

종합해보면, 정보보안은 정보자산에 대한 기밀성, 무결성, 가용성을 보장하기 위한 작업이다. 물론 이러한 작업에는 보안정책을 수립하고, 관리적, 물리적, 기술적 보안대책을 마련하는 등 세부사항들이 포함된다.

 

1.2 정보보안의 3요소

 

정보보안의 정의에서도 언급된바와 같이 정보보안의 3요소는 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)이며, 약어로 CIA라고도 한다.

 

 

 

기밀성은 정보를 오직 인가된 사용자에게만 허가하는 것을 말한다. 중요 정보가 권한이 없는 일반인에게 공개되거나 혹은 접근되지 않도록 제한을 가한다는 의미다.

 

무결성은 부적절한 정보의 변경이나 파기 없이 정확하고 완전하게 보존된 것을 말한다. , 원래 저장된 정보에 변경이 발생하여 다른 정보와 일치하지 않는 부분이 있다면 이는 무결성이 깨진 상태다. 무결성은 세부적으로 정확성, 완전성, 일관성을 요한다.

 

마지막으로 가용성은 시기적절하면서 신뢰할 수 있는 정보로의 접근과 사용을 의미한다.

 

① 기밀성(Confidentiality) - 인가된 사람, 프로세스, 시스템만이 보호된 시스템에 접근해야 함

비 승인

무결성(Integrity) - 정보는 고의적인, 비인가된, 우연한 변경으로부터 보호되어야 함

가용성(Availability) - 정보는 사용자가 필요로 하는 시점에 접근 가능해야 함

 

1.3 정보보안 관련 용어 정리

 

정보보안과 관련하여 빈번히 사용되지만 개념이 모호한 용어들에 대해서 정확히 숙지를 하고 있어야 정보보안에 대해서 이해하기가 수월하기 때문이다.

 

① 자산(Asset) - 데이터 혹은 자산의 소유자가 가치를 부여한 개체 (개인정보, 영업비밀, 기자재)

위협원(Threat agents) - 정보자산에 해를 끼치는 행동을 할 수 있는 주체 (해커, 임직원, 단체, 자연재해)

위협(Threat) - 자산에 대한 위협원의 공격 행동 (해킹, /변조, 삭제, 파손, 유출)

취약점(Vulnerability) - 위협이 발생하기 위한 사전 조건/상황 (평문전송, 입력값 미검증, 비밀번호 공유)

위험(Risk) - 위협원이 취약점을 이용하여 위협이라는 행동을 통해 자산에 악영향을 미치는 결과를 가져올 가능성

 

위험 = 자산의 가치 X 취약점 X 위협

 

위의 정보보안관련 용어를 좀더 이해하기 쉽게 도식화하면 [그림1.1]과 같다.

 

 

[그림1.1] 자산, 취약점, 위협, 위협원, 위험의 상호관계

 

자산 내에 크고 작은 보안 취약점들이 존재하며 해커 또는 악의적인 내부자 등 위협원에 의한 해킹, 정보유출, 시스템 파괴 등의 위협이 발생한다. 이를 종합하면, 위험이 발생할 확률은 자산의 가치가 높을수록, 취약점이 많을 수록, 위협의 대상에 노출될 수록 증가하며 위험으로 인해 자산에 악영향을 끼친다.

 

1.4 정보보안의 침해사고

 

최근 인터넷 쇼핑몰 "인터파크" 25 1,030만명의 고객 개인정보가 해커의 공격에 의해 유출된 사실을 밝혔다. 이번 정보보호 침해 사고는 APT 기반 공격에 의한 개인정보 유출 사례다. APT란 지능형 지속 위협(Advanced Persistent Threats)으로 개인 해커에 의한 공격이 아니라, 정보 또는 금전 및 특정 회사의 중요 정보 획득을 목적으로 범죄 그룹에 의해서 지속적으로 취약점과 목적을 가지고 해킹하는 방법을 의미한다.

 

2008 2 4일 옥션 1,081, 2011 7 26일 네이트 3,500만 건의 개인정보 유출 사건이 APT 기반 공격으로 발생하고 있다. 아래는 역대 천만 건 이상 개인정보 유출 사건 피해 사례다.

 

 

 

이러한 침해사고의 문제는 점점 더 지능적인 수법이 동원되며 피해 규모 또한 커지고 있다는 것이다. 피해자들의 규모가 엄청난 만큼 기업에서 판결에 따라 배상해야 하는 금전적인 손해액이 클 뿐만 아니라 기업 이미지 훼손 등 무형의 손해까지 고려하면 기업 입장에서는 천문학적인 손해가 발생한다고 할 수 있다.

 

또한 정보통신망법과 7 25일 개인정보보호법 개정을 통하여 "개인정보 유출에 대한 징벌적 손해배상 제도"가 시행되면서 개인정보를 고의적으로 유출시킨 기관과 사업자 등에게는 실제 손해액을 초과하여 최대 3배까지 배상하도록 하는 징벌적 손해배상제도가 도입 됨에 따라 기업의 피해는 더 커질 수 있다. 보안이 단순한 기술의 범주에 머물러 있는 것이 아니라 기업의 생과 사에 영향을 미칠 수 있다는 것을 시사한다.

 

이렇게 침해사고의 빈도 수가 늘어나고 피해 규모도 커짐에 따라 정보보호(보안)의 필요성이 높아지고 있다. 그런데 "보안성을 높인다"라고 할 때 그것이 어떠한 특성을 지니고 있는지 개념을 정확이 알아야 정보보호 관련 대책을 수립할 수 있다.

 

정보보호는 "정보자산을 공개/노출, 변경/파괴, 지체/재난 등의 위협으로 부터 보호하여 정보의 기밀성, 무결성, 가용성을 확보하는 것으로 정의할 수 있다.

 

정보자산이란 좁은 의미로는 정보 그 자체만을 의미하지만 넓은 의미로는 그 정보를 포함해 정보를 생성, 가공 및 저장하는 설비를 모두 포함한다.

 

일반적으로 기업의 정보자산은 정보 및 데이터, 하드웨어, 소프트웨어, 물리적 환경, 인적 자산 등으로 분류할 수 있으며 서비스, 기업 이미지 또는 브랜드 가치 등도 보호해야 할 중요한 대상이 된다.

 

정보는 데이터에서 나온다. 그러나 데이터에서 나온 모든 것이 정보가 되는 것은 아니다. 데이터가 정보가 되기 위해서는 의미가 부여되어야 하는 것이다. , 데이터(Data)가 가공하기 전의 순수한 상태의 수치들 이라면 정보(Information)는 유의미하게 가공된 2차 데이터의 형태인 것이다. 만약 기업이라면 기업이 보유한 핵심 기술이 될 것이고, 행정 기관이라고 한다면 민원인의 개인 정보 등이 될 것이다. 참고로 지식(Knowledge)은 정보의 이용에 대한 노하우로 정보에 가치가 더해진 것이고 지혜(Wisdom)는 지식을 실생활에서 활용하는 것을 말한다.

 

1.5 정보보안의 대비책

 

정보보안이 단순한 기술의 범주에 머물러 있는 것이 아니라 기업의 생과 사에 영향을 미칠 수 있기 때문에 보안 사고를 막기 위한 대비책은 다음과 같다.

 

① 기밀성은 비 승인 사용자의 데이터베이스 접근이나 개인정보를 포함한 파일의 외부 유출은 기밀성을 훼손시키는 공격이다. 이에 대한 대책으로 PC를 끄고 퇴근하는 보안 정책의 적용이나 자료 유출 방지 솔루션의 사용을 들 수 있겠다.

 

② 무결성은 악성 코드가 포함된 파일을 내려 받게 되거나 악성 코드가 포함된 소프트웨어를 설치하면 무결성이 깨지게 된다. 따라서 악성코드 탐지와 차단 솔루션을 사용하고 비승인 소프트웨어의 사용과 설치를 금지하는 보안 솔루션을 사용해야 한다.

 

③ 가용성은 대표적으로 가용성을 노리는 공격으로 DDOS 공격을 들 수 있다. 이를 막기 위해 DDOS 차단 장비를 사용하고 트래픽을 제어하는 정책을 사용하는 등의 대비책이 있겠다.

 

보안성을 강화하는 것은 기술적인 대안인 보안 제품을 사용하는 것도 있지만 보안 정책도 필요하다는 것에 주목을 해야 할 것이다.

 

최근 인터파크 개인자료 유출 사례에서도 보듯이 해킹 기술은 APT 공격을 비롯하여 계속 발전하고 새로워져 기존의 보안 제품만으로는 막을 수 없기 때문이다. 조직이 자신에게 적합한 보안 정책을 수립하고 그에 의해 보안관련 조직을 구성하여 일련의 보안 활동을 수행하는 것을 보안 거버넌스(Security Governance)라고 한다. 보안 담당자가 보안 솔루션만을 맹신하는 것은 금물이며 각 기업의 상황을 잘 파악하여 적절한 보안 거버넌스를 구축하는 것이 중요하다.

 

1.6 정보보안의 주요 법령과 규정

 

정보보안의 주요 법령은 "정보통신망 이용촉진 및 정보보호 등 에 관한 법률", "신용정보의 이용 및 보호에 관한 법률", "공공기관의 개인정보보호에 관한 법률" 등으로 나누어 볼 수 있다.

 

 

정보보안의 정보통신망법의 개인정보보호 관련 벌칙 규정은 다음과 같다.

 

 

1.7 개인정보 암호화 대상 항목

 

개인정보를 보호하기 위한 필수 암호화 대상이 되는 항목은 다음과 같다.

 

 

 

 

 

2. BaroCRYPT

2.1 BaroCRYPT 개요

 

BaroCRYPT 솔루션은 Feistel 암호를 사용하여 크기가 작고 구현이 쉬운 블록 암호화 알고리즘인 XXTEA (Extended Extended Tiny Encryption Algorithm)를 기반으로 하는 가볍고 가장 빠른 암호화 알고리즘이다.

 

 

 

2.2 BaroCRYPT/장점

 

BaroCRYPT 솔루션은 XXTEA(일명 Corrected Block TEA) 암호화 알고리즘을 기반으로 사용 가능한 RAM의 양이 최소인 레거시 하드웨어 시스템(임베디드)과 같이 극한의 제약이 있는 상황에서도 빠르게 데이터 암복호화를 실행 가능한 최적의 솔루션으로 특장점은 다음과 같다.

 

■ 작고 구현이 쉬운 블록 암호화 알고리즘으로 페이스텔 암호를 기반으로 하여 크기가 작고 빠르면서 구현이 쉬움

■ 페이스텔 암호를 기반으로 한 작은 크기의 알고리즘으로 그 크기에 비해서 암호화 강도가 높음

■ 알고리즘의 크기는 작지만 현존하는 가장 빠르고 안전한 알고리즘

■ 다른 블록 암호화 알고리즘에 비해 구현이 용이하고 하드웨어 사양 제약 조건이 큰 환경에 적용이 용이하며 자유롭게 사용

■ 64 bit(8byte)를 암호화하는 블록 암호화 알고리즘으로 128 bit(16byte)키를 사용

■ Corrected Block TEA(XXTEA)는 원래 Block TEA의 약점을 수정하기 위해 고안된 블록 암호화 알고리즘

■ 자유로운 Customizing및 다양한 응용프로그램과 연동 개발의 편의성 제공

   (Java, C 언어로 된 API 연동)

SQL문장에서 쉽게 사용할 수 있도록 TO_ENCRYPTS(암호화), TO_DECRYPTS(복호화)함수 제공

 

Feistel 암호란?

동일한 대치와 치환을 반복하면서 암호문이 평문으로부터 암호화되는 반복 블록 암호로 데이터 암호화 표준(DES)과 유사한 암호로서,평문을 반씩 2개 블록으로 나누어 한쪽은 서브 키를 사용한 기능 F로 치환하고 그 결과를 다른 반쪽에서 배타적 논리합(XOR)한 다음 서로 교환한다.

이러한 과정을 각 치환마다 동일한 패턴으로 하되 마지막 치환에서는 서로 교환하지 않는다.

암호화시 사용된 서브키는 복호화시 역으로 사용된다

.

 

 

3. BaroCRYPT 연동 API

3.1 연동 API 사용 전 준비사항

 

BaroCRYPT 모듈은 Java(barocrypt.jar), C(libbarocrypt.so)를 기반으로 작성되었기 때문에 반드시 최신 JDK 6.x 이상이 설치 되어 있어야 하며, Java모듈을 사용하기 위한 환경설정은 다음과 같다.

 

Java환경설정(.profile)

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.131.x86_64

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes12.jar:$JAVA_HOME/lib/barocrypt.jar

 

Java version확인

> java -version

java version "1.7.0_131"

OpenJDK Runtime Environment (rhel-2.6.9.0.el5_11-x86_64 u131-b00)

OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

 

3.2 BaroCRYPT 연동 API

 

1) C 모듈(libbarocrypt.so)

 

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

 

Linux인 경우 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/baropam/crypt HP-UX인 경우 export SHLIB_PATH=$SHLIB_PATH:/home/baropam/crypt

AIX인 경우   export LIBPATH=$LIBPATH:/home/baropam/crypt

 

BaroCRYPT에 대한 header 파일인 barocrypt.h은 다음과 같다.

#ifndef BAROCRYPT_INCLUDED

#define BAROCRYPT_INCLUDED

 

#include <stdlib.h>

 

#ifdef __cplusplus

extern "C" {

#endif

 

/**

 * Function: baro_encrypt

 * @data:    Data to be encrypted

* Returns:  Encrypted data or %NULL on failure

 *

 * Caller is responsible for freeing the returned buffer.

 */

void * baro_encrypts(const void * data);

 

/**

 * Function: baro_decrypt

 * @data:    Data to be decrypted

* Returns:  Decrypted data or %NULL on failure

 *

 * Caller is responsible for freeing the returned buffer.

 */

void * baro_decrypts(const void * data);

 

#ifdef __cplusplus

}

#endif

 

#endif

 

baro_encrypts 함수

 

- NAME

  baro_encrypts

 

- SYNOPSIS

  void * baro_encrypts(const void * data)

 

- DESCRIPTION

  데이터를 암호화 하는 함수

  data : 암호화할 데이터

 

- RETURN VALUES

  암호화한 데이터를 반환

 

baro_decrypts 함수

 

- NAME

  baro_decrypts

 

- SYNOPSIS

  void * baro_decrypts(const void * data)

 

- DESCRIPTION

  데이터를 복호화 하는 함수

  data : 복호화할 데이터

 

- RETURN VALUES

  복호화한 데이터를 반환

 

③ 데이터 암복호화 사용 예

#include <errno.h>

#include <stdarg.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

#include “barocrypt.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) Java 모듈(barocrypt.jar)

 

필드 또는 데이터 암복호화에 사용되는 대칭 키(64byte)를 프로그램 내부에 고정되어 있으며, Java 모듈(barocrypt.jar) 사용하기 위해서는 반드시 barocrypt.jar file이 존재하는 디렉토리(/home/baropam/crypt)를 포함한 Java 모듈을 Class path에 설정 해야 한다.

export CLASSPATH=$CLASSPATH:/home/baropam/crypt/barocrypt.jar

 

baro_encrypts 함수

 

- NAME

  baro_encrypts

 

- SYNOPSIS

  public static String baro_encrypts(String data)

 

- DESCRIPTION

  데이터를 암호화 하는 함수

  data : 암호화할 데이터

 

- RETURN VALUES

  암호화한 데이터를 반환

 

baro_decrypts 함수

 

- NAME

  baro_decrypts

 

- SYNOPSIS

  public static String baro_decrypts(String data)

 

- DESCRIPTION

  데이터를 복호화 하는 함수

  data : 복호화할 데이터

 

- RETURN VALUES

  복호화한 데이터를 반환

 

③ 데이터 암복호화 사용 예

import barocrypt.barocrypt.*;

 

public static void main(String[] args) {

    try {

        String encrypt_data = baro_encrypts(args[0]     );

        String decrypt_data = baro_decrypts(encrypt_data);

 

        System.out.println("text         = [" + args[0]      + "]");

        System.out.println("encrypt_data = [" + encrypt_data + "]");

        System.out.println("decrypt_data = [" + decrypt_data + "]");

    } catch (Exception e) {

        e.printStackTrace();

    } finally {

    }

}

 

3) PowerBuider 모듈(barocrypt.dll)

 

필드 또는 데이터 암복호화에 사용되는 대칭 키(64byte)를 프로그램 내부에 고정되어 있다.

 

Global External Function 선언

 

FUNCTION string  baro_encrypts(string data) LIBRARY "barocrypt.dll" ALIAS FOR "baro_encrypts;ansi"

FUNCTION string  baro_decrypts(string data) LIBRARY "b.dll" ALIAS FOR "baro_decrypts;ansi"

 

② 데이터 암복호화 사용 예

 

string  ls_source_data = "

qwerqwerqwer이종일qwerqwer

";

string  ls_encrpt_data = "";

string  ls_decrpt_data = "";

 

ls_encrpt_data = baro_encrypts(ls_source_data)

MessageBox("암호화", "encrpt_data = [" + ls_encrpt_data + "]")

 

ls_decrpt_data = baro_decrypts(ls_encrpt_data)

MessageBox("복호화", "decrpt_data = [" + ls_decrpt_data + "]")

 

return

 

 

4. BaroCRYPT 연동 API(DB)

4. External Procedure 란?

 

복잡한 수식계산을 Oracle에서 제공하는 기능으로만 충분하지 않을 경우가 있는데,이럴 경우 C JAVA

같은 언어로 복잡한 기능을 작성한 후 Oracle에서는 파라미터를 넘겨서 해당 결과를 받으면 수행속도의 개선을 가져올 수 있는데, 간단히 말하자면 C 언어나 VB, JAVA 등의 언어를 사용하여 SQL에서 구현하기 어렵거나 복잡한 것을 구현한 뒤 SQL에서 호출해서 사용하는 것을 말한다.

 

4.2 장점 및 단점

 

External Procedure을 사용하여 얻는 장점으로는 Java C의 재 활용성이 우수하다. 반면 External Procedure을 사용으로 발생하는 단점은 Session이 종료되지 않으면 extProc Oracle에서 메모리를 관리하는 영역이 아니라 O/S 영역이기 때문에 한번 호출 될 때마다 해당 Session이 종료되지 않으면 끝까지 살아남게 되어 지속적인 메모리에 남아 있게 되어

O/S의 메모리 부하가 생길 수 밖에 없다.

 

그래서, O/S의 메모리를 최대한 줄일 수 있는 방법은 다음과 같다.

 

Session의 수를 제한하여 O/S의 메모리 한계치를 벗어나지 않도록 조정한다.

 

O/S에서 extProc로 생성된 것 중 오래된 Process Kill한다. Process Kill하더라도 없으면 재생성 되므로 큰 문제는 발생되지 않는다.

 

③ 어플리케이션에서 불필요하게 External Procedure를 호출하는 Function의 사용을 제거하고, 사용 완료 후 Session

를 종료하여 메모리의 부하를 최소화 하게 한다.

 

4.3 Java 모듈(barocrypts.java)

 

1) Java 모듈 Load

 

Java 모듈을 Oracle 내에 Java 공간으로 Load하는 방법은 다음과 같이 두 가지 방법이 존재한다.

 

① 컴파일된 SourceLoad

> loadjava -user baropam/baropam barocrypts.class

 

② 소스 및 컴파일 소스까지 Load

> loadjava -user baropam/baropam -resolve -v barocrypts.java

arguments: '-user' 'barocrypt/***' '-resolve' '-v' 'barocrypts.java'

creating : source barocrypts

loading  : source barocrypts

created  : CREATE$JAVA$LOB$TABLE

resolving: source barocrypts

Classes Loaded: 0

Resources Loaded: 0

Sources Loaded: 1

Published Interfaces: 0

Classes generated: 0

Classes skipped: 0

Synonyms Created: 0

Errors: 0

 

> loadjava -user baropam/baropam -force -resolve -verbose -synonym -grant public BaroClient.java

arguments: '-user' 'icam/***' '-force' '-resolve' '-verbose' '-synonym' '-grant' 'public' 'BaroClient.java'

creating : source BaroClient

loading  : source BaroClient

granting : execute on source BaroClient to public

granting : execute on class BaroClient to public

resolving: source BaroClient

synonym  : BaroClient

Classes Loaded: 0

Resources Loaded: 0

Sources Loaded: 1

Published Interfaces: 0

Classes generated: 0

Classes skipped: 0

Synonyms Created: 1

Errors: 0

 

2) 암복화 Stored Function 생성 및 확인

 

Oraclesqlplus로 접속한 뒤 TO_ENCRYPTS(암호화 함수), TO_DECRYPTS(복호화 함수)를 다음과 같이 생성 및 확인한다.

> sqlplus baropam/baropam

 

SQL*Plus: Release 11.2.0.1.0 Production on 9 26 10:56:01 2017

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> CREATE OR REPLACE FUNCTION TO_ENCRYPTS (input VARCHAR2) RETURN VARCHAR2 IS

  2        LANGUAGE JAVA

  3        NAME 'barocrypts.barocrypt_encrypts(java.lang.String) return java.lang.String';

  4  /

 

Function created.

 

SQL> CREATE OR REPLACE FUNCTION TO_DECRYPTS (input VARCHAR2) RETURN VARCHAR2 IS

  2        LANGUAGE JAVA

  3        NAME 'barocrypts.barocrypt_decrypts(java.lang.String) return java.lang.String';

  4  /

 

Function created.

 

SQL> commit;

 

Commit complete.

 

SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_TYPE LIKE 'JAVA%';

 

OBJECT_NAME

--------------------------------------------------------------------------------

OBJECT_TYPE                            STATUS

-------------------------------------- --------------

barocrypts

JAVA CLASS                             VALID

 

barocrypts

JAVA SOURCE                            VALID

 

3) 암복화 함수(TO_ENCRYPTS, TO_DECRYPTS) 테스트

> sqlplus baropam/baropam

 

SQL*Plus: Release 11.2.0.1.0 Production on 9 12 11:34:24 2017

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

 

다음에 접속됨:

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

 

SQL> SELECT TO_ENCRYPTS('qwerqwerqwer이종일qwerqwer') FROM DUAL;

 

TO_ENCRYPTS('QWERQWERQWER이종일QWERQWER')

--------------------------------------------------------------------------------

BDx8KvL4xf0dHUf7LJl/edUWGwaJGGYtzYKhc5VvcHdnBArs

 

SQL> SELECT TO_DECRYPTS('BDx8KvL4xf0dHUf7LJl/edUWGwaJGGYtzYKhc5VvcHdnBArs') FROM DUAL;

 

TO_DECRYPTS('BDX8KVL4XF0DHUF7LJL/EDUWGWAJGGYTZYKHC5VVCHDNBARS')

--------------------------------------------------------------------------------

qwerqwerqwer이종일qwerqwer

 

4.4 C 모듈(libbarocrypts.so)

 

모듈은 Java 모듈과 달리 External Procedure를 사용하는 것이 번거롭지만 External Procedure의 동작 순서는 다음과 같다.

 


① 사용자가 SQL에서 External Procedure에서 작성한 Function DB에 요청을 한다.

 

Shared SQL Area에서 해당 문장을 Parsing 하면서 External Procedure를 알고 NET8 Listener에서 사용자 SQL

External Procedure를 호출 했으니 해석해 달라고 요청한다.

 

Listener는 다시 extProc 프로세스를 생성하면서 O/S에 있는 External Procedure가 있는 DLL, Procedure Name, Parameter를 넘겨준다.

 

extProc O/S에 있는 DLL파일을 찾아서 O/S의 메모리에 Load하여 요청 받은 Function의 결과를 처리한다.

 

⑤ 처리된 결과를 SQL return해 준다.

 

Session이 종료되면 extproc도 자동으로 종료된다.

 

1) C 모듈 library 생성

 

C 모듈을 Oracle 내에 암복호화 Library(libcrypt_encrypts-암호화 Library, libcrypt_decrypts-복호화

Library)를 다음과 같이 각각 생성한다.

> sqlplus baropam/baropam

 

SQL*Plus: Release 11.2.0.1.0 Production on 9 12 14:13:40 2017

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> CREATE OR REPLACE LIBRARY libcrypt_encrypts AS '/home/baropam/crypt/libbarocrypts.so' ;

  2  /

 

Library created.

 

SQL> CREATE OR REPLACE LIBRARY libcrypt_decrypts AS '/home/baropam/crypt/libbarocrypts.so' ;

  2  /

 

Library created.

 

SQL> commit;

 

Commit complete.

 

참고)

Library 생성 중ORA-01031: insufficient privileges오류가 발생하는 경우 library를 생성하는 계정

(baropam)library 생성 권한이 없어서 발생한다.

 

이런 경우 Oracle sysdba로 접속한 다음 library를 생성하는 계정에 library 생성권한을 부여 해야 한다.

SQL> create library to baropam ;

 

2) 암복화 Stored Function 생성 및 확인

 

Oracle sqlplus로 접속한 뒤 TO_ENCRYPTS(암호화 함수), TO_DECRYPTS(복호화 함수)를 다음과 같이 생성 및 확인한다.

project:icam /usr/baropam> sqlplus baropam/baropam

 

SQL*Plus: Release 11.2.0.1.0 Production on 9 12 14:16:06 2017

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> CREATE OR REPLACE FUNCTION TO_ENCRYPTS (input VARCHAR2) return VARCHAR2

      as external

      language C

      library libcrypt_encrypts

      name "baro_encrypts"

      parameters  (input  STRING);

  2    3    4    5    6    7  /

 

Function created.

 

SQL> CREATE OR REPLACE FUNCTION TO_DECRYPTS (input VARCHAR2) return VARCHAR2

      as external

      language C

      library libcrypt_decrypts

      name "baro_decrypts"

      parameters  (input  STRING);

  2    3    4    5    6    7  /

 

Function created.

 

SQL> commit;

 

Commit complete.

 

Tibero tsql로 접속한 뒤 TO_ENCRYPTS(암호화 함수), TO_DECRYPTS(복호화 함수)를 다음과 같이 생성 및 확인한다.

SQL> CREATE OR REPLACE FUNCTION TO_ENCRYPTS (input VARCHAR2) return VARCHAR2

      as language C

      library libcrypt_encrypts

      name "baro_encrypts"

      parameters  (input  STRING);

  2    3    4    5    6    7  /

 

Function created.

 

SQL> CREATE OR REPLACE FUNCTION TO_DECRYPTS (input VARCHAR2) return VARCHAR2

      as language C

      library libcrypt_decrypts

      name "baro_decrypts"

      parameters  (input  STRING);

  2    3    4    5    6    7  /

 

Function created.

 

SQL> commit;

 

Commit complete.

 

3) listener 구성

 

C 모듈을 사용하기 전에 원하는 Shared Library에 대한 경로를 포함하도록 listener를 구성해야 한다. EXTPROC_DLLS

환경 변수를 설정하여 수행하는데, Oracle 계정에 로그인 후 다음과 같이 listener.ora 파일에 설정한다.

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0)

      (PROGRAM = extproc)

      (ENVS="EXTPROC_DLLS=ANY")

    )

    (SID_DESC =

      (SID_NAME = ODB)

      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0)

    )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = project)(PORT = 1521))

    )

  )

 

ADR_BASE_LISTENER = /oracle/app/oracle

 

4) tnsnames.ora 구성

 

C 모듈을 사용하기 전에 listener.ors 파일의 설정한 Key, SID와 동일한 값으로 Oracle 계정에 로그인 후 EXTPROC_CONNECTION_DATA을 다음과 같이 tnsnames.ora 파일에 설정한다.

ODB =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = project)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = ODB)

    )

  )

 

EXTPROC_CONNECTION_DATA =

  (DESCRIPTION =

        (ADDRESS = (PROTOCOL = IPC)(HOST = project)(KEY = EXTPROC1521))

        (CONNECT_DATA = (SID = PLSExtProc))

)

 

tnsnames.ora 파일을 설정한 후 반드시 Oracle 계정에 로그인 후 listener를 재기동 해야 한다.

> lsnrctl start | stop | status

 

5) 암복화 함수(TO_ENCRYPTS, TO_DECRYPTS) 테스트

> sqlplus baropam/baropam

 

SQL*Plus: Release 11.2.0.1.0 Production on 9 12 14:16:06 2017

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> SELECT TO_ENCRYPTS('qwerqwerqwer이종일qwerqwer') FROM DUAL;

 

TO_ENCRYPTS('QWERQWERQWER이종일QWERQWER')

--------------------------------------------------------------------------------

LkrLD7uCXBnPZreic9NgsHgsDjWQG1QQL0w9UHndzy8=

 

SQL> SELECT TO_DECRYPTS('LkrLD7uCXBnPZreic9NgsHgsDjWQG1QQL0w9UHndzy8=') FROM DUAL;

 

TO_DECRYPTS('LKRLD7UCXBNPZREIC9NGSHGSDJWQG1QQL0W9UHNDZY8=')

--------------------------------------------------------------------------------

qwerqwerqwer이종일qwerqwer

 

 

5. About BaroCRYPT

 

 

 

Version 1.0 - Official Release - 2016.12.1

Copyright Nurit corp. All rights reserved.

http://www.nurit.co.kr

 

상호 : 주식회사 누리아이티

등록번호 : 258-87-00901

대표이사 :이종일

대표전화 : 010-2771-4076(기술지원,영업문의)

이메일 : mc529@nurit.co.kr

주소 : 서울시 강서구 마곡중앙2로 15, 913호(마곡동, 마곡테크노타워2)

사업자 정보 표시
주식회사 누리아이티 | 이종일 | 서울시 강서구 공항대로 186 로뎀타워 617호 | 사업자 등록번호 : 258-87-00901 | TEL : 010-2771-4076 | Mail : mc529@nurit.co.kr | 사이버몰의 이용약관 바로가기