사용 중 암호화
개요
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)는 MongoDB Server 버전 4.2에 도입되었으며, 암호화된 필드에 대한 동일성 검색을 지원합니다. 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 를 참조하세요.