SQL Server 대칭키 vs 비대칭키 암호화
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server 암호화는 데이터를 보호하기 위해 관리자가 사용할 수 있는 여러 가지 방어 중 하나이다. 암호화 알고리즘은 사용자가 무단으로 쉽게 바꿀 수 없는 데이터 변환을 정의 한다.
SQL Server에서는 DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, 128bit RC4, DESX, 128bit AES, 192bit AES, 256bit AES 등을 지원한다.(SQL Server 버전에 따라 지원되는 알고리즘이 다르다.)
알고리즘의 일반 적인 특징으로는
- 강력한 암호화는 일반적으로 약한 암호화 보다 더 많은 CPU 리소스를 사용한다.
- 짧은 키보다 긴 키가 강력한 암호화를 생성한다.
- 동일한 키 길이를 사용할 때 대칭키 보다 비대칭키 암호화가 강력하지만 상대적으로 느리다.
- 스트림 암호화 보다 긴 키를 사용하는 블록 암호화가 강력하다.
- 많은 양의 데이터를 암호화 하는 경우 대칭키를 사용하여 암호화 한다음 비대칭키를 사용하여 해당 대칭키를 암호화 하는 것이 좋다.
- 암호화된 데이터는 압축할 수 없지만 압축된 데이터는 암호화 할 수 있다.
여기서는 대칭키와 비대칭키의 개념과 속도를 알아 보자.
[대칭키]
대칭키는 암호화, 복호화 키가 동일하다. 키를 소유한 사람은 누구든지 복호화 할 수 있다.
[비대칭키]
공개키, 개인키라 불리는 2개의 키가 사용되는 알로리즘이다. 공개키는 글자 그대로 공개되어 있는 키로 다른 사용자가 암호화를 하여 나에게 전달 하고자 할 때 공개키를 이용해서 암호화 한다. 개인키는 공개키로 암호화된 데이터를 복호화 하는데 사용되는 키이다. 개인키는 안전하게 보관해야 하며 공유되어서는 안된다.
[대칭키 vs 배대칭키]
대칭키와 비대칭키의 속도를 비교하기 위해 각 두 키를 생성 한다.
CREATE SYMMETRIC KEY TestSymKey WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD = 'TestPassw0rd' GO
CREATE ASYMMETRIC KEY TestASymKey WITH ALGORITHM = RSA_512 ENCRYPTION BY PASSWORD = 'TestPassw0rd' GO
SELECT * FROM SYS.SYMMETRIC_KEYS SELECT * FROM SYS.ASYMMETRIC_KEYS |
암호화를 저장할 테이블을 생성한다.
CREATE TABLE SymKeyTest (Col_1 VARBINARY (256)) GO
CREATE TABLE ASymKeyTest (Col_1 VARBINARY (256)) GO |
대칭키 알고리즘을 사용한 암호화 속도 테스트를 진행 한다.
/* Symmetric Key Test */ DECLARE @StartTime DATETIME ; DECLARE @EndTime DATETIME ; DECLARE @KeyGUID UNIQUEIDENTIFIER ;
SET @KeyGUID = KEY_GUID ('TestSymKey'); SET @StartTime = GETDATE();
OPEN SYMMETRIC KEY TestSymKey DECRYPTION BY PASSWORD = 'TestPassw0rd' ;
INSERT INTO dbo.SymKeyTest (Col_1) SELECT TOP 5000 ENCRYPTBYKEY (@KeyGUID , 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') FROM master.sys.columns c1 CROSS JOIN master.sys.columns c2 ;
SELECT TOP 5000 CONVERT (VARCHAR (52), DECRYPTBYKEY (Col_1)) FROM dbo.SymKeyTest ;
SET @EndTime = GETDATE();
PRINT 'Symmetric Key Time Difference (ms): ' + CONVERT (CHAR , DATEDIFF (ms , @StartTime , @EndTime)); GO |
비대칭키 알고리즘을 사용한 암호화 속도 테스트를 진행 한다.
/* Asymmetric Key Test */ DECLARE @StartTime DATETIME ; DECLARE @EndTime DATETIME ; DECLARE @AsymID INT ;
SET @AsymID = ASYMKEY_ID ('TestASymKey'); SET @StartTime = GETDATE ();
INSERT INTO dbo.ASymKeyTest (Col_1) SELECT TOP 5000 ENCRYPTBYASYMKEY (@AsymID , 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') FROM master.sys.columns c1 CROSS JOIN master.sys.columns c2 ;
SELECT TOP 5000 CONVERT(CHAR(52), DECRYPTBYASYMKEY (@AsymID, Col_1, N'TestPassw0rd')) FROM dbo.ASymKeyTest ;
SET @EndTime = GETDATE ();
PRINT 'Asymmetric Key Time Difference (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime)); GO |
비교적 간단한 테스트이지만 속도차이는 눈에 띄게 나타나는 것을 알 수 있다. 단지 속도가 느리다고 비효율적인 알고리즘 이라는 뜻은 아니다.
모든 상황에 맞는 이상적인 단일 알고리즘은 없으며 각 알고리즘의 장점을 잘 파악하여 여러 가지 알고리즘을 복합해서 사용해야 한다.
[참고링크]
http://msdn.microsoft.com/ko-kr/library/ms345262.aspx
http://msdn.microsoft.com/ko-kr/library/bb895327.aspx
http://www.mssqltips.com/sqlservertip/1886/sql-server-encryption-symmetric-vs-asymmetric-keys/
2013-01-29 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server로 데이터 가져오기 (0) | 2015.07.20 |
---|---|
SQL Server Stored Procedure 암호화 (0) | 2015.07.20 |
SQL Server 마스터 키 관리 (0) | 2015.07.20 |
대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 (0) | 2015.07.20 |
DMV를 사용하여 누락된 인덱스 확인 (0) | 2015.07.20 |