데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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
1730 SQL Server에서 Trigger 활성 / 비활성 감시 jevida(강성욱) 2016.09.14 1458
1729 DDL Trigger를 이용한 데이터베이스 변경 사항 추적 jevida(강성욱) 2016.09.14 1227
1728 Trigger를 이용한 SQL Server 커넥션 풀링 확인 jevida(강성욱) 2016.09.14 1087
1727 SQL Server Trigger jevida(강성욱) 2016.09.14 930
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 846
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 911
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 940
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 1854
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1250
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1222
1720 SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2649
» SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1682
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 1702
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5583
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1336
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 3653
1714 DMV를 이용한 SQL Server 성능 카운터 확인 jevida(강성욱) 2016.09.13 1745
1713 DMV를 이용한 SQL Server IO 성능 모니터 스냅샷 만들기 jevida(강성욱) 2016.09.13 1239
1712 DMV를 활용한 SQL Server 모니터링 jevida(강성욱) 2016.09.13 1254
1711 세션에 따른 캐시된 쿼리 플랜 설정 확인 jevida(강성욱) 2016.09.13 862





XE Login