Oracle Transparent Data Encryption
2010. 3. 30. 15:33ㆍDevelopments
Oracle 10g release 2 이후 부터 Encryption/Decryption 함수에서 Advanced Encryption Standard(AES) 알고리즘을 제공함으로써 128bit, 192bit, 256bit 암호화가 가능하여 DES의 단점을 해결한 강력한 정보 암호화를 지원합니다.
1. 암호화 Package 와 Package 별 암호화 지원범위.
참고 URL: http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/apdvncrp.htm
1) DBMS_OBFUSCATION_TOOLKIT
: Oracle 8i 에서 부터 지원한 암호화 Package로 Algorithms은 DES 를 기본으로 사용하며, 암호화 가능 데이터 형태는 Varchar 만을 지원함.
2) DBMS_CRYPTO
: Orcle 10g 부터 지원하는 암호화 Package로 Algorithms을 AES (128,192,256 bit) 까지 지원하며, 암호화 가능 데이터 형태는 Column 과 더불어 Table, Tablespace 암호화 까지 지원함.
2. DBMS_CRYPTO 사용방법.
1) 암호화
: encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
DBMS_CRYPTO.ENCRYPT (
src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),
typ => encryption_type,
key => key_bytes_raw
);
2) 복호화
: decrypted_raw := DBMS_CRYPTO.DECRYPT (
src => encrypted_raw,
typ => encryption_type,
key => key_bytes_raw
);
output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');
3. DBMS_CRYPTO 설정.
1) 권한 설정
sys계정> grant execute on DBMS_CRYPTO to 계정명;
2) 암호화 시 사용 할 Package SPEC 선언.
CREATE OR REPLACE PACKAGE cust_crypto IS
FUNCTION encrypt (
in_val IN VARCHAR,
key_val IN VARCHAR
) RETURN RAW;
FUNCTION decrypt (
in_val IN VARCHAR,
key_val IN VARCHAR
) RETURN VARCHAR;
END cust_crypto;
/
3) 암호화 시 사용 할 Package BODY 선언.
CREATE OR REPLACE PACKAGE BODY cust_crypto IS
FUNCTION encrypt (in_val IN VARCHAR , key_val IN VARCHAR) RETURN RAW IS
input_raw RAW(1024);
key_raw RAW(16) := UTL_RAW.CAST_TO_RAW(key_val);
v_out_raw RAW(1024);
AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
input_raw := UTL_I18N.STRING_TO_RAW(in_val, 'AL32UTF8');
v_out_raw := DBMS_CRYPTO.ENCRYPT(
src => input_raw,
typ => AES_CBC_PKCS5,
key => key_raw
);
RETURN v_out_raw;
END encrypt;
FUNCTION decrypt (in_val IN VARCHAR , key_val IN VARCHAR) RETURN VARCHAR IS
key_raw RAW(16) := UTL_RAW.CAST_TO_RAW(key_val);
output_raw RAW(1024);
v_out_string VARCHAR2(1024);
AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
output_raw := DBMS_CRYPTO.DECRYPT(
src => in_val,
typ => AES_CBC_PKCS5,
key => key_raw
);
v_out_string := UTL_I18N.RAW_TO_CHAR(output_raw, 'AL32UTF8');
RETURN v_out_string;
END decrypt ;
END cust_crypto;
/
compile.
4) TEST
- SELECT cust_crypto.encrypt('12345678', '1234567890abcdef') from dual;
: 결과가 정상 표시되는 경우에 생성이 완료된 것 입니다.
1. 암호화 Package 와 Package 별 암호화 지원범위.
| Package Feature | DBMS_CRYPTO | DBMS_OBFUSCATION_TOOLKIT |
|---|---|---|
|
Cryptographic algorithms |
DES, 3DES, AES, RC4, 3DES_2KEY |
DES, 3DES |
|
Padding forms |
PKCS5, zeroes |
None supported |
|
Block cipher chaining modes |
CBC, CFB, ECB, OFB |
CBC |
|
Cryptographic hash algorithms |
SHA-1 |
MD5 |
|
Keyed hash (MAC) algorithms |
HMAC_MD5, HMAC_SH1 |
None supported |
|
Cryptographic pseudo-random number generator |
|
|
|
Database types |
|
|
1) DBMS_OBFUSCATION_TOOLKIT
: Oracle 8i 에서 부터 지원한 암호화 Package로 Algorithms은 DES 를 기본으로 사용하며, 암호화 가능 데이터 형태는 Varchar 만을 지원함.
2) DBMS_CRYPTO
: Orcle 10g 부터 지원하는 암호화 Package로 Algorithms을 AES (128,192,256 bit) 까지 지원하며, 암호화 가능 데이터 형태는 Column 과 더불어 Table, Tablespace 암호화 까지 지원함.
2. DBMS_CRYPTO 사용방법.
1) 암호화
: encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
DBMS_CRYPTO.ENCRYPT (
src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),
typ => encryption_type,
key => key_bytes_raw
);
2) 복호화
: decrypted_raw := DBMS_CRYPTO.DECRYPT (
src => encrypted_raw,
typ => encryption_type,
key => key_bytes_raw
);
output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');
3. DBMS_CRYPTO 설정.
1) 권한 설정
sys계정> grant execute on DBMS_CRYPTO to 계정명;
2) 암호화 시 사용 할 Package SPEC 선언.
CREATE OR REPLACE PACKAGE cust_crypto IS
FUNCTION encrypt (
in_val IN VARCHAR,
key_val IN VARCHAR
) RETURN RAW;
FUNCTION decrypt (
in_val IN VARCHAR,
key_val IN VARCHAR
) RETURN VARCHAR;
END cust_crypto;
/
3) 암호화 시 사용 할 Package BODY 선언.
CREATE OR REPLACE PACKAGE BODY cust_crypto IS
FUNCTION encrypt (in_val IN VARCHAR , key_val IN VARCHAR) RETURN RAW IS
input_raw RAW(1024);
key_raw RAW(16) := UTL_RAW.CAST_TO_RAW(key_val);
v_out_raw RAW(1024);
AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
input_raw := UTL_I18N.STRING_TO_RAW(in_val, 'AL32UTF8');
v_out_raw := DBMS_CRYPTO.ENCRYPT(
src => input_raw,
typ => AES_CBC_PKCS5,
key => key_raw
);
RETURN v_out_raw;
END encrypt;
FUNCTION decrypt (in_val IN VARCHAR , key_val IN VARCHAR) RETURN VARCHAR IS
key_raw RAW(16) := UTL_RAW.CAST_TO_RAW(key_val);
output_raw RAW(1024);
v_out_string VARCHAR2(1024);
AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
output_raw := DBMS_CRYPTO.DECRYPT(
src => in_val,
typ => AES_CBC_PKCS5,
key => key_raw
);
v_out_string := UTL_I18N.RAW_TO_CHAR(output_raw, 'AL32UTF8');
RETURN v_out_string;
END decrypt ;
END cust_crypto;
/
compile.
4) TEST
- SELECT cust_crypto.encrypt('12345678', '1234567890abcdef') from dual;
: 결과가 정상 표시되는 경우에 생성이 완료된 것 입니다.
'Developments' 카테고리의 다른 글
| IDE (eclipse or STS)에서 JQuery 개발환경 구성하기 (0) | 2014.06.25 |
|---|---|
| FCKEditor 설정 (0) | 2011.09.26 |
| Interstage 7 에서 ServletContextListener 내에서의 DataSource 사용 (0) | 2010.06.09 |
| org.apache.jasper.JasperException: Cannot read file: ze file (0) | 2010.06.09 |