티스토리 뷰

 

Azure SQL Database Always Encryption

 

Always Encryption 은 항상 암호화로 번역되어 나오는데 클라이언트부터 암호화되어 추가되며 복호화되어 클라이언트에 나타나는 SQL Server 2016의 기능인데 Azure SQL Database까지 지원하고 있습니다. 클라이언트로부터 암호화된다는 것이 글로 설명하기는 제한적이며 아래 링크를 참고할 수 있습니다. 아래 링크에서 그림을 보면 쉽게 이해가 가능합니다.

https://msdn.microsoft.com/en-us/library/mt163865(v=sql.130).aspx

Azure SQL Database 에 항상 암호화를 적용해보도록 하겠습니다.  아래 주소 내용과 유사하게 진행해보겠습니다.

http://blogs.msdn.com/b/sqlsecurity/archive/2015/11/01/ssms-encryption-wizard-enabling-always-encrypted-made-easy.aspx

 

데이터베이스를 Azure SQL Database 에 생성하고 테이블을 아래와 같이 생성합니다. 이 중에서 SSN, Birthdate 는 민감정보로 암호화를 해야 할 경우 여러 방법이 있겠지만 항상 암호화 기능을 사용할 수 있습니다.

SQL Server 2016SSMS에서 Azure SQL Database를 연결하고 데이터베이스를 오른쪽 클릭하거나 해당 암호화할 테이블을 오른쪽 클릭하여 열 암호화를 선택합니다. 테스트를 위해서는 미리 데이터를 삽입해 두는 것이 편합니다.

암호화 마법사 그림을 보면 좀 더 쉽게 이해가 가능합니다.

테이블에서 해당 암호화 열을 선택할 수 있습니다.

열을 선택하면 암호화 유형을 선택해야 하는데 결정적, 임의 암호화 유형이 있으며 장단점이 있으므로 적절한 유형을 선택할 수 있습니다.

아래 그림에서 암호화 유형에 대한 내용을 정리하고 있습니다. 위 테이블의 SSN 같은 경우 필터링, 조인 등을 사용하므로 결정적 암호화로 항상 같은 암호화 값을 제공하여 인덱싱도 가능합니다. 하지만 데이터를 유추할 가능성이 높습니다.

암호화에 사용되는 마스터 키를 구성할 수 있습니다. 인증서 저장소와 Azure Key Vault 에 저장 가능합니다.

PowerShell 스크립트를 통해 암호화를 다른 서버에도 적용할 있습니다.

최종적으로 확인하고 다음을 클릭하면 암호화를 진행하면서 암호화 열 스키마를 변경하게 됩니다.

작업이 다 완료되었습니다.

테이블을 스크립팅해보면 아래와 같은 암호화 열 스키마를 확인할 수 있습니다. AES256, CBC 모드인 것을 확인 할 수 있습니다.

새 쿼리 창을 통해 Azure SQL Database를 연결하여 테이블을 쿼리하면 암호화 된 내용을 바로 확인할 수 있습니다.

 

클라이언트에서 복호화되게 하려면 마스터 키 연결에 따라 달라지지만 연결 문자열 매개변수를 추가하여 연결하면 됩니다.

column encryption setting=enabled

테이블을 쿼리하면 복호화 된 내용을 바로 확인할 수 있습니다.

 

응용프로그램 코드를 통해서 확인해보겠습니다. 마찬가지로 연결 문자열에 열 암호화 설정이 추가되어 있습니다. 직접 INSERT 구문을 적용할 경우 제한적이며 @매개변수 또는 저장 프로시저의 매개변수를 통해 진행해야 합니다.

응용프로그램을 실행하면 아래와 같은 구문이 클라이언트(ADO.NET)로부터 생성되어 서버로 전달됩니다. 반대로 클라이언트(ADO.NET)에서 복호화되게 됩니다.

클라이언트 코드에 대한 내용은 아래 링크를 참고할 수 있습니다.

https://msdn.microsoft.com/en-us/library/mt147923.aspx

 

이상으로 항상 암호화를 살펴보았습니다. 항상 암호화는 열 암호화 대상에 제한이 있으며 SQL Server 2016 SSMSADO.NET-.NET Framework 4.6 이상을 통해서 가능한 측면이 있으며 마스터 키 위치에 따라 달라지므로 키 저장소도 사전에 고려해야 합니다.

 

항상 암호화를 통해 중요한 정보를 암호화 할 수 있는데 클라이언트는 항상 암호화를 통해서 응용 프로그램 내부에서 데이터를 암호화 할 수 있으며 SQL Server에는 암호화 키가 노출되지 않고 Azure SQL Database까지 지원하여 장점을 제공하고 있습니다.

 

댓글