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 SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 37971
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20648
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1553
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1138
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 1009
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3269
1730 SQL Server에서 Trigger 활성 / 비활성 감시 jevida(강성욱) 2016.09.14 1695
1729 DDL Trigger를 이용한 데이터베이스 변경 사항 추적 jevida(강성욱) 2016.09.14 1442
1728 Trigger를 이용한 SQL Server 커넥션 풀링 확인 jevida(강성욱) 2016.09.14 1139
1727 SQL Server Trigger jevida(강성욱) 2016.09.14 1004
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 915
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 974
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 1129
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 2016
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1329
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1361
1720 SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2824
» SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1784
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 2070
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5938
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1426
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 4482





XE Login