SQL Server/SQL Server Tip

SQL Server 대칭키 vs 비대칭키 암호화

SungWookKang 2015. 7. 20. 11:16
반응형

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

 

반응형