Oracle DBMS_CRYPTO.hash(단방향 암호화)

 

 

출처 :  http://hoonsik69.tistory.com/entry/Oracle-DBMSCRYPTOhash%EB%8B%A8%EB%B0%A9%ED%96%A5-%EC%95%94%ED%98%B8%ED%99%94

 

 

== DBMS_CRYPTO ==

OWNER : SYS
* grant package access to existing users and roles as needed
* 이 패키지를 사용하기 위해서는 사용자에 EXCUTE ON DBMS_CRYPTO 를 GRANT한다.
AS SYS
GRANT EXECUTE ON DBMS_CRYPTO TO 사용자;


 

DBMS_CRYPTO DataType
================================================================================================
BLOB : A source or destination binary LOB
CLOB : A source or destination character LOB (excluding NCLOB)
PLS_INTEGER : Specifies a cryptographic algorithm type (used with BLOB, CLOB, and RAW datatypes)
RAW : A source or destination RAW buffer
================================================================================================

 

 

Algorithms
================================================================================================

 

DBMS_CRYPTO Cryptographic Hash Functions
=========================================================================
HASH_MD4 : Produces a 128-bit hash, or message digest of the input message
HASH_MD5 : Also produces a 128-bit hash, but is more complex than MD4
HASH_SH1 : Secure Hash Algorithm (SHA). Produces a 160-bit hash.
=========================================================================

 

 

DBMS_CRYPTO MAC (Message Authentication Code) Functions
================================================================================================
HMAC_MD5 : Same as MD5 hash function, except it requires a secret key to verify the hash value.
HMAC_SH1 : Same as SHA hash function, except it requires a secret key to verify the hash value.
================================================================================================

 

 

DBMS_CRYPTO Encryption Algorithms
================================================================================================
ENCRYPT_DES : Data Encryption Standard.
Block cipher.
Uses key length of 56 bits.
ENCRYPT_3DES_2KEY : Data Encryption Standard.
Block cipher.
Operates on a block 3 times with 2 keys.
Effective key length of 112 bits.
ENCRYPT_3DES : Data Encryption Standard.
Block cipher.
Operates on a block 3 times.
ENCRYPT_AES128 : Advanced Encryption Standard.
Block cipher.
Uses 128-bit key size.
ENCRYPT_AES192 : Advanced Encryption Standard.
Block cipher.
Uses 192-bit key size.
ENCRYPT_AES256 : Advanced Encryption Standard.
Block cipher.
Uses 256-bit key size.
ENCRYPT_RC4 : Stream cipher.
Uses a secret, randomly generated key unique to each session.
================================================================================================

 

DBMS_CRYPTO Block Cipher Suites
================================================================================================
DES_CBC_PKCS5 : ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5
DES3_CBC_PKCS5 : ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5
================================================================================================

 

 

DBMS_CRYPTO Block Cipher Chaining Modifiers

================================================================================================
CHAIN_ECB : Electronic Codebook.
Encrypts each plaintext block independently.
CHAIN_CBC : Cipher Block Chaining.
Plaintext is XORed with the previous ciphertext block before it is encrypted.
CHAIN_CFB : Cipher-Feedback. Enables encrypting units of data smaller than the block size.
CHAIN_OFB : Output-Feedback.
Enables running a block cipher as a synchronous stream cipher.
Similar to CFB, except that n bits of the previous output block are moved into
the right-most positions of the data queue waiting to be encrypted.
================================================================================================

 

 

DBMS_CRYPTO Block Cipher Padding Modifiers
================================================================================================
PAD_PKCS5 : Provides padding which complies with the PKCS #5: Password-Based Cryptography Standard
PAD_NONE : Provides option to specify no padding.
: Caller must ensure that blocksize is correct, else the package returns an error.
PAD_ZERO : Provides padding consisting of zeroes.
================================================================================================

 

 

*제한 사항*
VARCHAR2 데이터타입은 바로 DBMS_CRYPTO 를 사용할 수 없다. VARCHAR2 타입의 데이터를 AL32UTF8
데이터베이스 캐릭터셋으로 바꾸고 이를 다시 RAW 데이터타입으로 변경하여 사용해야 한다.

 

 

Exceptions
DBMS_CRYPTO Exceptions

================================================================================================
CipherSuiteInvalid : 28827 : The specified cipher suite is not defined.
CipherSuiteNull : 28829 : No value has been specified for the cipher suite to be used.
KeyNull : 28239 : The encryption key has not been specified or contains a NULL value.
KeyBadSize : 28234 : DES keys: Specified key size is too short.
DES keys must be at least 8 bytes (64 bits).
AES keys: Specified key size is not supported.
AES keys must be 128, 192, or 256 bits in length.

DoubleEncryption : 28233 : Source data was previously encrypted.
================================================================================================

 

 

언제 ENCRYPT&DECRYPT 프로시저와 ENCRYPT&DECRYPT 함수를 사용하는가?
프로시저 : LOB 데이터타입 ENCRYPT&DECRYPT 이용시
함수 : RAW 데이터타입 ENCRYPT&DECRYPT 이용시( VARCHAR2데이터타입은 RAW 데이터타입으로 변경이후 사용 )

 

 

언제 HASH 또는 MAC(Message Authentication Code) 함수를 사용하는가?
DBMS_CRYPTO 패키지는 두가지의 일방향 해시함수 HASH & MAC 함수가 있다. 이 함수들은 임의 길이 입력메시지를
고정길의 해시값으로 반환한다. 일방향 해시 함수는 오직 한방향이다. 입력메시지를 해시값으로 만들기는 쉬우나
해시값을 입력된 값으로 생성하기는 쉽지 않다. 해시값들은 보안상 적어도 128비트가 되어야 한다.

 

이것으로 데이터가 변경되었는지를 확인하는데 사용할 수 있다. 예로, 데이터를 저장하기 전에 사용자가 저장할
데이터에 대한 해시값을 생성하기 위해 DBMS.CRYPTO.HASH 함수를 실행하여 저장하고, 나중에 데이터를 다시 보
기 위해 해시함수를 다시 실행하여 처음 실행한 해시값과 이후에 실행한 해시값이 같은지를 비교하여 데이터가
변경되었는지 확인할 수 있다.

 

DBMS.CRYPTO의 HASH함수는 RAW나 LOB 데이터의 해시값을 생성하는 일방향 해시함수다. DBMS.CRYPTO의 MAC 함수
역시 같지만 비밀키가 추가된다. 즉, 키를 가지고 있는 사람만이 데이터에 대한 해시값을 맞출 수 있는 것 이
외는 HASH함수와 동일하다.

 

MAC은 유저들사이의 파일들을 인증하기 위해 사용된다. 또한 단일사용자의 파일변경유무를 확인하기 위해 사용
될 수 있다. 바이러스의 의한 파일변경등을 확인하기 위해서..
사용자가 MAC을 사용하지 않았다면 바이러스에 의해 테이블 엔트리를 교체입력하여 해시값을 바꿀 수 있지만
MAC을 사용한다면 바이러스는 키값을 알지 못하므로 할 수 없다.

 

 

변환 규칙
VARCHAR2를 RAW로 변환하기 위해서는 다음단계를 수행하는 UTL_I18N.STRING_TO_RAW함수를 사용
- 현 데이터베이스 캐릭터셋 VARCHAR2를 AL32UTF8 데이터베이스 캐릭터셋 VARCHAR2로 변환
- AL32UTF8 데이터베이스 캐릭터셋 VARCHAR2를 RAW로 변환

예) UTL_I18N.STRING_TO_RAW('문자열','AL32UTF8')

RAW를 VARCHAR2로 변환하기 위해서는 다음단계를 수행하는 UTL_I18N.RAW_TO_CHAR 함수를 사용
- RAW를 AL32UTF8 데이터베이스 캐릭터셋 VARCHAR2로 변환
- AL32UTF8 데이터베이스 캐릭터셋 VARCHAR2를 현 데이터베이스 캐릭터셋 VARCHAR2로 변환


예) UTL_I18N.RAW_TO_CHAR (data, 'AL32UTF8');

 


 

* VARCHAR2 컬럼에 암호화된 RAW 데이터타입의 데이터를 저정하려면, VARCHAR2에 맞도록 RAWTOHEX 또는
UTL_ENCODE.BASE64_ENCODE 를 사용한다. 이 함수들은 각각 2, 4/3로 데이터를 확장한다.


-출처 : http://blog.naver.com/querydb?Redirect=Log&logNo=40052108797

 

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

**** oracle md5
ex :
select rawtohex(DBMS_CRYPTO.Hash(to_clob(to_char('mcpicdtl.blogspot.com')),2))
from dual;

함수 DBMS_CRYPTO.Hash 의 2번자 인자에 2가 들어가 있다.
이 파라미터가 1 : md4, 2 : md5, 4 : sh1 암호화 방식을 지징한다

위 함수를 실행 시키기 위해서는 sysdba 으로 로그인 해야 하거나 .
sysdba로 부터 DBMS_CRYPTO 에 대한 EXECUTE 권한을 위임 받으면 된다.

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

 

 

 

 

+ Recent posts