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/

 



강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 568
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 875
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 934
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 1023
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 1947
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1285
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1297
1720 SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2780
» SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1723
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 1910
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5802
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1386
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 4118
1714 DMV를 이용한 SQL Server 성능 카운터 확인 jevida(강성욱) 2016.09.13 1839
1713 DMV를 이용한 SQL Server IO 성능 모니터 스냅샷 만들기 jevida(강성욱) 2016.09.13 1266
1712 DMV를 활용한 SQL Server 모니터링 jevida(강성욱) 2016.09.13 1297
1711 세션에 따른 캐시된 쿼리 플랜 설정 확인 jevida(강성욱) 2016.09.13 891
1710 SQL Server 특정 세션에 대한 마지막 실행 문장 확인 jevida(강성욱) 2016.09.13 748
1709 DMV - 데이터베이스 버퍼 메모리 사용량 확인 jevida(강성욱) 2016.09.13 3060
1708 Sys.dm_fts_parser을 이용한 문자열 구문 분석 jevida(강성욱) 2016.09.13 1350
1707 DMV에서 SQL Server 리소스 데이터베이스 값 jevida(강성욱) 2016.09.13 1091





XE Login