본문 바로가기

오라클 DBMS_OBFUSCATION_TOOLKIT의 암호화/복호화

by 애덤더미 2014. 7. 21.
반응형

데이터 보안의 중요성

데이터 보안은 현대 IT 환경에서 빼놓을 수 없는 요소입니다. 특히, 민감한 정보를 다루는 데이터베이스에서는 암호화가 필수인데요. 이번 글에서는 Oracle 8i Release 2 (8.1.6) 버전부터 제공된 DBMS_OBFUSCATION_TOOLKIT을 활용해 데이터 암호화 및 복호화를 구현하는 방법에 대해 알아보겠습니다. 더 이상 3rd party 솔루션에 의존할 필요 없이, 오라클 자체 기능을 이용해 간단하게 보안을 강화할 수 있습니다.

DBMS_OBFUSCATION_TOOLKIT이란?

Oracle 8.1.6부터 도입된 DBMS_OBFUSCATION_TOOLKIT은 데이터베이스에 저장된 민감한 정보를 암호화하여 보호할 수 있게 도와주는 도구입니다. 예를 들어, 신용카드 번호나 패스워드 같은 데이터를 암호화하여 안전하게 저장할 수 있습니다. 예전에는 이런 기능을 위해 외부 솔루션을 사용해야 했지만, 이제는 Oracle에서 자체 제공하는 이 기능으로 데이터 보안을 보다 쉽게 구현할 수 있습니다.

설치 방법

설치 방법도 아주 간단합니다. 다음과 같이 두 가지 파일을 실행하고, 패키지 사용 권한만 부여하면 준비가 완료됩니다.

  1. SYS 계정으로 접속한 후 dbmsobtk.sql과 prvtobtk.plb를 순서대로 실행.
  2. GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO PUBLIC; 명령어로 권한 부여.

이후 간단한 설정을 통해 원하는 데이터를 암호화하거나 복호화할 수 있습니다.

DES(Data Encryption Standard) 알고리즘

이 패키지는 DES(Data Encryption Standard) 알고리즘을 사용하여 데이터를 암호화합니다. DES는 64비트 데이터를 8바이트 블록 단위로 암호화하며, 복호화 시에도 동일한 패스워드를 사용합니다. 즉, 입력된 데이터를 암호화한 후, 나중에 동일한 키로 복호화할 수 있다는 것이죠. 이 알고리즘은 현재 DBMS_OBFUSCATION_TOOLKIT에서 기본적으로 지원됩니다.

DBMS_OBFUSCATION_TOOLKIT 사용 시 제약사항

DBMS_OBFUSCATION_TOOLKIT은 매우 유용하지만, 몇 가지 제약사항이 있습니다.

  • DES 알고리즘만을 사용하며, 56비트 키로 암호화합니다.
  • Double encryption은 지원하지 않으며, 암호화된 데이터를 다시 암호화하려고 하면 ORA-28233 오류가 발생합니다.
  • 암호화하려는 데이터는 반드시 8바이트 배수여야 합니다. 그렇지 않으면 ORA-28232 오류가 발생합니다.

이러한 제약사항은 Oracle의 버전 업그레이드에 따라 점차 개선될 예정이지만, 현재 사용 시에는 CPU 자원을 많이 사용하므로 계획을 잘 세워야 합니다.

자주 발생하는 ORACLE 오류

DBMS_OBFUSCATION_TOOLKIT을 사용할 때 자주 마주할 수 있는 오류 메시지 몇 가지를 정리해보았습니다.

  1. ORA-28231: 입력 데이터나 키값이 NULL일 때 발생.
  2. ORA-28232: 입력 데이터가 8바이트 배수가 아닐 때 발생.
  3. ORA-28233: 암호화된 데이터를 다시 암호화하려고 할 때 발생.

예제: 실제 사용 예시

실제 데이터를 암호화하고 복호화하는 방법을 예제로 보여드리겠습니다. 이 예제를 통해 DBMS_OBFUSCATION_TOOLKIT의 기본적인 사용 방법을 쉽게 이해할 수 있습니다.

 

1. 암호화/복호화 함수 생성:

CREATE OR REPLACE PACKAGE CryptString AS 

FUNCTION encrypt(Str VARCHAR2, hash VARCHAR2) 
RETURN VARCHAR2;

FUNCTION decrypt(xCrypt VARCHAR2, hash VARCHAR2) 
RETURN VARCHAR2; 

END CryptString;
 
2. 암호화된 데이터 저장:
DROP TABLE encrypt_table; 

CREATE TABLE encrypt_table(id NUMBER, passwd VARCHAR2(50));

INSERT INTO encrypt_table VALUES(1, CryptString.encrypt('tigerofkorea', 'encrypt1'));

INSERT INTO encrypt_table VALUES(2, CryptString.encrypt('tigerofkorea', 'encrypt2'));
 
3. 복호화된 데이터 조회:
SELECT 
	  id
	, CryptString.decrypt(passwd, 'encrypt1') passwd 
FROM encrypt_table 
WHERE CryptString.decrypt(passwd, 'encrypt1') = 'tigerofkorea';
 

위 예제처럼, 데이터를 암호화하여 안전하게 저장하고 필요할 때 복호화하여 사용할 수 있습니다. 간단하지만 강력한 보안 방법이죠.

반응형