암호화를 사용하여 데이터 보호

완료됨

데이터 암호화는 데이터베이스 보안의 기초를 형성합니다. 공격자가 기본 스토리지에 액세스하는 경우에도 암호화는 중요한 정보를 읽을 수 없도록 유지합니다. Microsoft의 SQL 플랫폼은 미사용 데이터를 보호하는 것부터 처리되는 동안 데이터 보호에 이르기까지 여러 암호화 옵션을 제공합니다.

각 방법을 사용하는 시기를 이해하면 보호와 성능의 균형을 맞추는 데 도움이 됩니다. Microsoft Fabric의 SQL Server, Azure SQL 및 SQL 데이터베이스에서 사용할 수 있는 암호화 기술을 살펴보겠습니다.

암호화 계층 이해

데이터베이스 암호화는 각각 특정 문제를 해결하는 여러 계층에서 작동합니다. TDE(투명한 데이터 암호화) 는 미사용 데이터를 암호화합니다. 디스크의 데이터베이스 파일을 보호하는 것으로 간주합니다. 열 수준 암호화 는 특정 중요한 열을 대상으로 하며, Always Encrypted는 쿼리 처리 중에도 수명 주기 내내 데이터를 보호하여 추가적으로 진행됩니다.

데이터베이스 파일 수준의 TDE, 특정 열의 열 수준 암호화 및 클라이언트 애플리케이션 수준에서 데이터베이스 외부에 보관된 암호화 키를 사용한 Always Encrypted의 세 가지 암호화 계층을 비교하는 다이어그램

TDE를 사용하도록 설정하면 SQL Server는 데이터베이스 파일, 트랜잭션 로그 및 백업을 자동으로 암호화합니다. 애플리케이션에는 코드 변경이 필요하지 않습니다. 암호화는 백그라운드에서 투명하게 수행됩니다. TDE는 데이터베이스에 저장된 master 인증서로 보호되는 데이터베이스 암호화 키를 사용합니다.

열 수준 암호화는 다르게 작동합니다. T-SQL 코드 또는 애플리케이션에서 데이터를 명시적으로 암호화 및 암호 해독하여 중요한 데이터가 포함된 열과 암호를 해독할 수 있는 열을 세부적으로 제어할 수 있습니다.

Always Encrypted는 데이터베이스 엔진 외부에 암호화 키를 완전히 유지하여 또 다른 방법을 사용합니다. 데이터베이스는 일반 텍스트 데이터를 볼 수 없으므로 높은 수준의 액세스 권한이 있는 데이터베이스 관리자도 보호된 정보를 볼 수 없습니다.

Always Encrypted 구성

Always Encrypted는 데이터베이스 엔진이 일반 텍스트 값을 처리하지 않도록 합니다. 클라이언트 애플리케이션은 암호화 키를 보유하고 모든 암호화 및 암호 해독을 처리합니다. 이 분리는 데이터베이스에 대한 관리자 액세스 권한이 있는 사람도 보호된 데이터를 볼 수 없다는 것을 의미합니다.

데이터베이스 엔진이 암호 텍스트만 처리하는 동안 클라이언트 애플리케이션이 데이터를 암호화하고 암호를 해독하는 Always Encrypted의 데이터 흐름을 보여 주는 다이어그램.

Always Encrypted를 시작하려면 먼저 열 암호화 키를 보호하는 CMK(열 마스터 키)를 만듭니다. CMK를 Azure Key Vault, Windows 인증서 저장소 또는 하드웨어 보안 모듈과 같은 보안 키 저장소 에 저장합니다.

다음 T-SQL 문은 Azure Key Vault에서 키를 가리키는 메타데이터 항목을 만듭니다. 실제 키 자료는 금고에 남아 있으며 데이터베이스에 저장되지 않습니다.

CREATE COLUMN MASTER KEY MyCMK
WITH (
    KEY_STORE_PROVIDER_NAME = 'AZURE_KEY_VAULT',
    KEY_PATH = 'https://mykeyvault.vault.azure.net/keys/MyCMK/abc123'
);

다음으로, 열 마스터 키로 보호되는 CEK(열 암호화 키)를 만듭니다.

CREATE COLUMN ENCRYPTION KEY MyCEK
WITH VALUES (
    COLUMN_MASTER_KEY = MyCMK,
    ALGORITHM = 'RSA_OAEP',
    ENCRYPTED_VALUE = 0x01700000016C006F00...
);

CEK 자체는 암호화된 형식으로 저장됩니다. 애플리케이션이 암호화된 데이터로 작업해야 하는 경우 이 값을 검색하고 CMK를 사용하여 로컬로 암호를 해독합니다.

테이블을 만들거나 변경할 때 중요한 열에 대한 암호화 유형을 지정합니다.

CREATE TABLE Employees (
    EmployeeID int PRIMARY KEY,
    SSN char(11) COLLATE Latin1_General_BIN2
        ENCRYPTED WITH (
            ENCRYPTION_TYPE = DETERMINISTIC,
            ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
            COLUMN_ENCRYPTION_KEY = MyCEK
        ),
    Salary money
        ENCRYPTED WITH (
            ENCRYPTION_TYPE = RANDOMIZED,
            ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
            COLUMN_ENCRYPTION_KEY = MyCEK
        )
);

선택할 수 있는 두 가지 암호화 유형이 있습니다. 결정적 암호화는 동일한 평문이 항상 동일한 암호문을 생성하므로, 동등 비교나 조인, WHERE 절을 통한 필터링 작업에 활용하기에 적합합니다. 이러한 쿼리 작업이 필요하지 않은 경우 더 강력한 보안을 위해 임의로 사용합니다.

열 수준 암호화 구현

T-SQL 함수를 사용하는 열 수준 암호화는 암호화 프로세스에 대한 더 많은 제어가 필요하거나 Always Encrypted가 적합하지 않은 경우 대안을 제공합니다. 이 방법을 사용하면 데이터베이스 내에 저장된 대칭 또는 비대칭 키를 관리합니다.

먼저 데이터베이스 마스터 키 및 인증서를 만듭니다.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';

CREATE CERTIFICATE SensitiveDataCert
WITH SUBJECT = 'Certificate for sensitive data encryption';

인증서로 보호되는 대칭 키를 만듭니다.

CREATE SYMMETRIC KEY SensitiveDataKey
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE SensitiveDataCert;

데이터를 암호화하려면 대칭 키를 열고 함수를 ENCRYPTBYKEY 사용합니다.

OPEN SYMMETRIC KEY SensitiveDataKey
DECRYPTION BY CERTIFICATE SensitiveDataCert;

INSERT INTO CustomerData (CustomerID, CreditCardNumber)
VALUES (1, ENCRYPTBYKEY(KEY_GUID('SensitiveDataKey'), '4111-1111-1111-1111'));

CLOSE SYMMETRIC KEY SensitiveDataKey;

암호 해독은 다음을 사용하여 DECRYPTBYKEY유사한 패턴을 따릅니다.

OPEN SYMMETRIC KEY SensitiveDataKey
DECRYPTION BY CERTIFICATE SensitiveDataCert;

SELECT CustomerID, 
       CONVERT(varchar(20), DECRYPTBYKEY(CreditCardNumber)) AS CardNumber
FROM CustomerData;

CLOSE SYMMETRIC KEY SensitiveDataKey;

예, 이 방법을 사용하려면 더 많은 작업이 필요합니다. 코드에서 키를 명시적으로 관리합니다. 그러나 이러한 복잡성은 유연성과 함께 제공됩니다. 대칭 키에 대한 권한을 부여하거나 거부할 수 있으므로 데이터 암호를 해독할 수 있는 사용자를 정확하게 제어할 수 있습니다.

올바른 암호화 방법 선택

어떤 암호화 방법을 사용해야 하나요? 보안 요구 사항 및 애플리케이션 제약 조건에 따라 달라집니다.

TDE 는 애플리케이션 코드를 건드리지 않고 미사용 데이터를 보호해야 하는 경우에 가장 적합한 선택입니다. 데이터베이스 파일 및 백업의 암호화를 의무화하는 규정 준수 요구 사항에 적합합니다. 하지만 TDE는 올바른 권한으로 데이터베이스에 연결할 수 있는 사용자로부터 데이터를 보호하지 않습니다.

Always Encrypted는 데이터베이스 관리자로부터 데이터를 보호해야 하거나 쿼리를 처리하는 동안에도 중요한 데이터를 암호화된 상태로 유지해야 하는 경우에 적용됩니다. 트레이드오프는 무엇입니까? 클라이언트 드라이버 지원이 필요하며 암호화된 열에서 수행할 수 있는 작업이 제한됩니다.

열 수준 암호화는 암호화 및 암호 해독에 대한 세부적인 제어가 필요하거나 Always Encrypted의 인프라 오버헤드 없이 특정 열을 암호화하려는 경우에 적합합니다. 더 많은 개발 노력이 필요하지만 키 관리에서 최대한의 유연성을 얻을 수 있습니다.

팁 (조언)

암호화 방법을 결합할 수 있습니다. 예를 들어 미사용 데이터의 기준 보호를 위해 TDE를 사용하도록 설정한 다음 가장 중요한 열에 대해 Always Encrypted를 추가합니다.

Microsoft Fabric의 SQL 데이터베이스의 경우 TDE는 기본적으로 사용하도록 설정되고 자동으로 관리됩니다. 애플리케이션 요구 사항에 따라 Always Encrypted 또는 대칭 키 암호화를 사용하여 열 수준 보호에 암호화 디자인 결정을 집중합니다.