사용 중 암호화
개요
C++ 운전자 를 통해 사용 중 암호화 라는 기능 설정하다 를 통해 특정 문서 필드를 암호화할 수 있습니다. 사용 중 암호화 를 사용하면 애플리케이션 에서 데이터를 MongoDB 로 보내기 전에 암호화하고 암호화됨 필드가 있는 문서를 쿼리 할 수 있습니다.
사용 중 암호화 는 권한이 없는 사용자가 일반 텍스트 데이터가 MongoDB 로 전송되거나 암호화됨 데이터베이스 에 있는 동안 볼 수 없도록 합니다. 애플리케이션 에서 사용 중 암호화 를 활성화 하고 데이터 암호 해독 권한을 부여하려면 애플리케이션 만 액세스 할 수 있는 암호화 키를 생성해야 합니다. 암호화 키에 액세스 할 수 있는 애플리케이션만 해독된 일반 텍스트 데이터에 액세스 할 수 있습니다. 공격자가 데이터베이스 에 액세스 하는 경우 암호화 키에 액세스 이 없기 때문에 암호화됨 암호 텍스트 데이터만 볼 수 있습니다.
사용 중 암호화 를 사용하여 다음 유형의 민감한 데이터가 포함된 MongoDB 문서의 필드를 암호화할 수 있습니다.
신용 카드 번호
주소
건강 정보
재무 정보
기타 민감한 정보 또는 개인 식별 정보(PII)
MongoDB는 사용 중 암호화를 활성화하기 위해 다음과 같은 기능을 제공합니다.
Queryable Encryption
Queryable Encryption은 차세대 사용 중 암호화 기능으로, MongoDB Server 버전 6.0에서 미리보기 기능으로 처음 도입되었으며, MongoDB 7.0에서는 정식 버전(GA) 기능으로 출시되었습니다. Queryable Encryption은 암호화된 필드에 대한 동일성 검색을 지원하고 각 값을 고유하게 암호화합니다.
중요
MongoDB 7.0과 호환되지 않는 미리보기 기능
MongoDB 6.0의 Queryable Encryption 구현은 MongoDB 7.0에 도입된 GA 버전과 호환되지 않습니다. Queryable Encryption 미리보기 기능은 더 이상 지원되지 않습니다.
Queryable Encryption 에 학습 보려면 MongoDB Server 매뉴얼의 Queryable Encryption 을 참조하세요.
클라이언트 사이드 필드 레벨 암호화
클라이언트 사이드 필드 레벨 암호화 (CSFLE)는 암호화됨 필드의 동일성 검색을 지원합니다. CSFLE는 필드를 암호화하기 위해 결정론적 또는 무작위 암호화 알고리즘 선택할 수 있다는 점에서 Queryable Encryption 과 다릅니다. CSFLE를 사용할 때 결정론적 암호화 알고리즘 사용하는 암호화됨 필드만 쿼리 할 수 있습니다. 무작위 암호화 알고리즘 사용하여 CSFLE의 필드를 암호화하는 경우 해독할 수는 있지만 해당 필드에 대해 동일성 쿼리를 수행할 수는 없습니다. Queryable Encryption 사용하면 암호화 알고리즘 지정할 수 없지만 암호화됨 모든 필드를 쿼리 할 수 있습니다.
값을 결정론적으로 암호화하면 동일한 입력 값이 동일한 출력 값을 생성합니다. 결정론적 암호화를 사용하면 암호화된 필드에 대해 쿼리를 수행할 수 있지만 카디널리티가 낮은 암호화된 데이터는 빈도 분석으로 인한 코드 손상에 취약합니다.
이 섹션에서는 다음 메커니즘을 사용하여 CSFLE를 구성하는 방법을 보여줍니다.
자동 암호화 구성
자동 암호화 사용하면 필드 암호화 방법을 지정하지 않고도 암호화됨 읽기 및 쓰기 (write) 작업을 수행할 수 있습니다. 자동 암호화 활성화 하려면 다음 중 하나를 사용합니다.
crypt_shared
(권장): 암호화 스키마 읽고 암호화하고 해독할 필드를 결정하는 동적 라이브러리입니다. 이 라이브러리를 사용하면 자동 암호화 수행하기 위해 별도의 프로세스 생성할 필요가 없습니다.mongocryptd
: 지정된 자동 암호화 규칙을 사용하여 필드를 암호화 할 수 있도록 표시하는 MongoDB 엔터프라이즈 Server와 함께 사전 패키징된 바이너리입니다. CSFLE 지원 클라이언트 만들면mongocryptd
가 자동으로 생성되지만options::auto_encryption
인스턴스 에서 바이너리를 명시적으로 시작할 수 있습니다.
중요
mongocryptd
에는 MongoDB 엔터프라이즈 Server v4.2 이상이 필요합니다.
자동 암호화 구성에 대해 자세히 학습 MongoDB Server 매뉴얼의 CSFLE 라이브러리 설치 및 구성을 참조하세요.
암호화 스키마 설정
schema_map
옵션을 사용하여 자동 암호화 스키마 지정할 수 있습니다. 암호화 스키마에는 암호화됨 해야 하는 필드와 해당 필드를 암호화하는 방법을 식별하는 사용자 지정 규칙이 포함되어 있습니다.
schema_map
옵션을 JSON schema 초안 4 표준 구문에 맞는 JSON 문서로 설정합니다. 이 문서 에는 암호화할 필드 이름과 각 필드 이름 아래에 사용할 암호화 옵션을 설정하는 중첩된 encrypt
객체 포함되어야 합니다.
팁
암호화 스키마에 대해 자세히 학습 MongoDB Server 매뉴얼의 CSFLE 암호화 스키마를 참조하세요.
다음 코드는 JSON schema 문서 지정하는 구문을 보여줍니다.
auto data_key_id = client_encryption.create_data_key("local"); auto json_schema = document{} << "properties" << open_document << "encryptedFieldName" << open_document << "encrypt" << open_document << "keyId" << open_array << data_key_id << close_array << "bsonType" << "string" << "algorithm" << "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" << close_document << close_document << close_document << "bsonType" << "object" << finalize;
앞의 json_schema
문서 사용하여 자동 암호화 스키마 구성하는 전체 예시 를 보려면 운전자 소스 코드 의 자동 CSFLE 예시 참조하세요.
팁
서버 측 필드 수준 암호화 위한 자동 암호화 스키마 지정할 수도 있습니다. 전체 예시 를 보려면 운전자 소스 코드 에서 서버 측 필드 레벨 암호화 시행 예시 참조하세요.
명시적 암호화 구성
명시적 암호화 사용하면 드라이버의 암호화 라이브러리를 사용하여 암호화됨 작업을 수행할 수 있습니다. 명시적 암호화 사용하려면 애플리케이션 전체에 암호화 로직을 지정해야 합니다.
다음 예시 암호화됨 메시지를 데이터베이스 에 삽입하는 삽입 작업에 대해 명시적 암호화 구성합니다.
// Configure your MongoDB client's encryption options here class client_encryption client_encryption(std::move(client_encryption_opts)); auto data_key_id = client_encryption.create_data_key("local"); options::encrypt encrypt_opts{}; encrypt_opts.key_id(data_key_id.view()); encrypt_opts.algorithm(options::encrypt::encryption_algorithm::k_deterministic); // Explicitly encrypts a BSON value auto to_encrypt = bsoncxx::types::bson_value::make_value("secret message"); auto encrypted_message = client_encryption.encrypt(to_encrypt, encrypt_opts); // Explicitly decrypts a BSON value auto decrypted_message = client_encryption.decrypt(encrypted_message); // Inserts the encrypted value into the database coll.insert_one(make_document(kvp("encryptedField", encrypted_message)));
명시적 암호화 구성하는 전체 예시 보려면 운전자 소스 코드 에 있는 명시적 암호화 예시 참조하세요.
자동 암호 해독을 통한 명시적 암호화
모든 사용자가 지원하는 명시 명시적 암호화 및 자동 암호 해독을 구성할 수 있습니다. 자동 암호화 없이 자동 암호 해독을 구성하려면 options::auto_encryption
인스턴스 만들고 해당 bypass_auto_encryption
필드 true
로 설정하다 . 그런 다음 이 옵션을 클라이언트 에 적용 .
다음 예시 options::auto_encryption
인스턴스 만들어 자동 암호 해독을 통한 명시적 암호화 구성한 다음 이 옵션 인스턴스 options::client
의 auto_encryption_opts
필드 에 전달합니다. 이렇게 하면 자동 암호 해독을 사용하도록 구성된 클라이언트 생성됩니다.
options::auto_encryption auto_encrypt_opts{}; auto_encrypt_opts.bypass_auto_encryption(true); options::client client_opts{}; client_opts.auto_encryption_opts(std::move(auto_encrypt_opts)); class client client_encrypted {uri{}, std::move(client_opts)};
자동 암호 해독과 함께 명시적 암호화 구성하는 전체 예시 를 보려면 운전자 소스 코드 에서 명시적 암호화 자동 암호 해독 예시 참조하세요.
추가 정보
CSFLE에 학습 보려면 MongoDB Server 매뉴얼에서 CSFLE 를 참조하세요.