빨간 글씨는 수정한 부분임.
/*
MS-SQL 2005 부터 지원되는 자체 암호화 기능 중 대칭키를 사용해 보도록 하자.
다른 말론 컬럼(COLUMN) 암호화...
먼저 마스터(데이터베이스 마스터) 키를 생성하고, 그 다음 대칭키를 사용하기 위해 인증서를 생성하고 다음은 대칭키를 생성한다. 자세한 설명은 그림봐라..
*/
암호화 하는 방법은 4가지야... 개콘 네가지..
1) 비대칭키를 사용하여 암호화 : EncryptByAsmKey()
2) 인증서를 사용하여 암호화 : EncryptByCert()
3) 대칭키를 사용하여 암호화 : EncryptByKey()
4) 패스워드를 사용하여 암호화 : EncryptByPassPharse()
※ 패스워드를 사용한 암호화는 소스에 하드코딩 됨으로 보안이 쥐약이겠지 그래서 패스워드 방식 빼고 사용하면 되겠지?
근데 왜 대칭키를 쓰냐고 물으신다면 비대칭키, 인증서, 대칭키 방법중 가장 암호화/복호화가 빠르니깐 쓴다.. 데이터가 졸라 많은데 암호화 해봐라...속 터지지...
당근 빠르면 암호화 강도는 대칭키나 인증서에 비해 약하겠지?
그리하야... 데이터는 대칭키로.. 대칭키는 인증서로 암호화를 한다고 한다.
자~~ 이정도면 대칭키를 만들어보자.
백문불여일행...
순서를 이래.. 마스터키 생성/백업 > 인증서 생성/백업 > 대칭키 생성/백업
자~~ 따라오너라~
1. 마스터키 생성 / 백업
-- 마스터 키 생성
-- 만약 마스터 키가 기존 것이 있다면 지워야한다 */
-- 지우는건 아래 쿼리로 지운다.
USE [DB_NAME]
go
DROP MASTER KEY
-- 여기까지가 지우는 마스터키 지우는 쿼리
USE [DB_NAME]
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = '[MASTER_KEY_PASSWORD]' -- 마스터키 생성 패스워드
/* 마스터 키 백업 */
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MASTER_KEY_PASSWORD'; -- 마스터키 생성시 사용한 패스워드
BACKUP MASTER KEY TO FILE = 'D:\CERTKEYS\MASTER_BACKUP_KEY' --마스터 키를 백업 할 경로 (미리 디렉토리를 생성해 놔야 한다)
ENCRYPTION BY PASSWORD = 'MASTER_BACKUP_KEY_PASSWORD' -- 마스터키 백업 패스워드
/* 마스터 키 조회 */
SELECT * FROM [DB_NAME].sys.symmetric_keys
2. 인증서 생성 / 백업
/* 인증서 생성 */
/* 만료일자(expiry_date) 지정하지 않으면 기본 값 (1년)으로 지정된다... 그래서 그냥 듬뿍 인심 써서 2050년 으로...
*/
CREATE CERTIFICATE [CERTIFICATE_NAME] -- 인증서 이름
ENCRYPTION BY PASSWORD = '[PASSWORD]' -- 인증서를 생성하는 패스워드
WITH SUBJECT = '[SUBJECT]' --이게 무슨인증서요~ 하는 약간 디테일한 이름 지어줌
, EXPIRY_DATE = '12/31/2050' -- 만료일자 지정
/* 인증서 백업 */
BACKUP CERTIFICATE [CERTIFICATE_NAME] TO FILE = 'D:\CERTKEYS\CERTKEYBACKUP' --인증서 백업 경로 (미리 디렉토리를 생성해놔야 한다.)
WITH PRIVATE KEY (
FILE = 'D:\CERTKEYS\PRIVATEKEY' -- 개인키
, ENCRYPTION BY PASSWORD = '[PRIVATE_BACKUP_KEY_PASSWORD]' --개인키 암호화 패스워드
, DECRYPTION BY PASSWORD = '[PRIVATE_RESTORE_KEY_PASSWORD]' -- 개인키 암호 해독용 패스워드
)
/* 인증서 조회 */
SELECT * FROM [DB_NAME].sys.certificates
3. 대칭키 생성 / 백업
/* 대칭키 생성 */
CREATE SYMMETRIC KEY [SYMMETRIC_KEY_NAME] -- 대칭키 이름
WITH ALGORITHM = AES_256 -- 암호 알고리즘이다. 강하면 강할수록 조타~
, IDENTITY_VALUE = 'DATA ENCRYPTION KEY 2013/02/12' -- 대칭키 다시 만들때 사용하는 데이터
, KEY_SOURCE = 'ACCOUNT DATABASE SYMMETRIC KEY' -- 대칭키 다시 만들때 사용하는 데이터
ENCRYPTION BY CERTIFICATE [CERTIFICATE_NAME]
/* 대칭키 조회 */
SELECT * FROM [DB_NAME].sys.symmetric_keys
/*
대칭키는 백업과 복원이 없어..그래서 query문장을 보관해야해... 안그럼 다른 DBMS에 복사한다거나 복구 할 때 복호화를 할 수 없을 수가 있어.
그래서 query문을 그대로 보관해야해 잘... 특히 IDENTITY_VALUE 나 KEY_SOURCE 항목이 중요해 이게 대칭키를 구분해주는 열할을 하는가봐 난 자세히는 몰라
직접 해보고 내용을 추가할 께
*/
----- 2편
관련링크
http://blog.taks.pe.kr/20
http://blog.naver.com/lovebabyyh/80061399950
http://purumae.tistory.com/94
MS SQL 대칭키 암호화 복호화 - http://social.technet.microsoft.com/Forums/ko-KR/sqlserverko/thread/b1cdf310-bd20-4a7f-a666-8336b50d0fe7/
댓글 없음:
댓글 쓰기