반응형

무료 DB인 MariaDB를 사용함에 있어서

 

암복호화를 하는 것이 필요했습니다.

 

다음 예제는 임의의 Table 생성 후

 

SHA2 512 방식으로 암복호화 하는 예제를 첨부하였습니다.

 

다만,

 

- Function에서 길이나 별도의 예외 상황에 대한 추가 처리는 더 필요해 보입니다.

- key_value는 사이트 특성에 맞춰 수행이 필요합니다.

 

function 에서 암호화 키 값이 보일수 있기 때문에 보안 목적과 잘 고려하여 설정이 필요합니다.


-- 암호화 할 컬럼은 Byte 값을 반환하기 때문에 blob 사용

CREATE TABLE private_data ( 
NAME VARCHAR(21), 
phone BLOB, 
address BLOB 
); 

 

-- 데이터 입력

insert into private_data values( 
'김대식', 
AES_ENCRYPT('010-1234-1234',SHA2('key_value',512)), 
AES_ENCRYPT('서울시 송파구',SHA2('key_value',512))  
); 

 

-- 암호화 컬럼 데이터 조회

select name,  
CONVERT(AES_DECRYPT(phone,SHA2('key_value',512)) using utf8) phone,  
CONVERT(AES_DECRYPT(address,SHA2('key_value',512)) using utf8) address  
from private_data;


 

-- 함수 사용 데이터 조회

SELECT test.decfn(test.encfn('010-1234-1234')) FROM dual; 

SELECT NAME 
     , test.decfn(phone) AS phone 
     , test.decfn(address) AS address 
 FROM private_data;

 

encfn 함수

DELIMITER $$
DROP FUNCTION IF EXISTS test.encfn;
CREATE FUNCTION test.encfn(encvalue VARCHAR(1000)) RETURNS blob
BEGIN
DECLARE result BLOB DEFAULT '';
select AES_ENCRYPT(encvalue,SHA2('key_value',512)) INTO result FROM dual;
RETURN result;
END $$
DELIMITER ;

 

decfn 함수

DELIMITER $$
DROP FUNCTION IF EXISTS test.decfn;
CREATE FUNCTION test.decfn(decvalue blob) RETURNS VARCHAR(1000)
BEGIN
DECLARE result VARCHAR(1000) DEFAULT '';
select CONVERT(AES_DECRYPT(decvalue,SHA2('key_value',512)) using UTF8) INTO result FROM dual;
RETURN result;
END $$
DELIMITER ;

 

계정 생성 및 실행 권한 부여

(해당 쉘로 접속하여 수행)

 

CREATE USER 'testuser'@'%' IDENTIFIED BY 'testuser';

GRANT SELECT ON test.* TO 'testuser'@'%';

GRANT EXECUTE ON FUNCTION test.encfn TO testuser@'%';

GRANT EXECUTE ON FUNCTION test.decfn TO testuser@'%';

 

(만약 HediSQL에서 아래 에러가 발생하면)

 

원격 root에 대한(%) 권한 부족으로

해당 mariaDB에 접속하여 with grant option을 설정해 주면 됩니다.

 

SQL> grant all on *.* to 'root'@'%' identified by 'password' with grant option;

 

 

참고 사이트

https://m.blog.naver.com/jjjhyeok/220006204633

 

[mysql] MYSQL Function 함수 생성, 조회, 실행

아래 샘플코드는 코드조회용 FUNCTION생성 스크립트 샘플 DELIMITER $$ DROP...

blog.naver.com

https://hsunryou.blog.me/221543591162

 

MariaDB(10.1.23)의 AES 암호화 Key 길이는 ?

우선 암호화 테스트를 위한 테이블을 아래와 같이 구성해 보았습니다.# AES 암호화 키가 128Bit보다 작...

blog.naver.com

 

https://mariadb.com/kb/en/library/sha2/

 

SHA2

Calculates an SHA-2 checksum.

mariadb.com

 

https://eotlr0806.blog.me/221338753828

 

Mariadb 암호화 복호화

어플리케이션을 서비스 하다보면 개인정보를 다뤄야 하는 민감한 상황들이 옵니다... 이때 대부분 많이 사...

blog.naver.com

 

 

반응형

'Database > MYSQL' 카테고리의 다른 글

MariaDB 테이블 백업 및 복구  (0) 2019.11.01
MariaDB 우편번호 Import 하기  (0) 2019.11.01
Mysql & MariaDB 튜닝 쉘  (0) 2019.08.14
MySQL 백업용 쉘스크립트입니다.  (0) 2010.01.18
무료 접속 툴 (Free Tool)  (0) 2009.03.06
반응형

자바 ARIA 사용하는 암호화 소스...


뭐 이젠 없어질 꺼지만... 


나중이라도..


크크...


SSO 가격도 비싸고 -_-...


그걸 굳이 쓸 필요가 있을까 싶다...




20120515_cipher.zip


반응형
반응형

10 G부터 생긴 DBMS_CRYPTO 패키지가 있습니다.
DBMS_CRYPTO.HASH를 사용해서 단방향 암호화가 가능 합니다.
아래 내용 참고 하세요.

oracle dbms_crypto (오라클 암호화)
1. 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 권한을 위임 받으면 된다.


== 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로 데이터를 확장한다.

  

[출처] DBMS_CRYPTO|작성자 새내기


반응형

'Database > ORACLE' 카테고리의 다른 글

PL/SQL Exception  (0) 2010.07.06
RMAN 사용법  (0) 2010.07.06
오라클 pump 관련 자료  (0) 2010.06.30
오라클 기본 유저 정보  (0) 2010.06.30
오라클 일괄 컴파일  (0) 2010.06.30

+ Recent posts