Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / / /

필드 및 암호화 유형

이 페이지의 내용

  • 결정론적 암호화
  • 결정론적으로 암호화된 필드의 문서 쿼리
  • 무작위 암호화
  • 객체 및 배열 암호화 지원
  • 무작위로 암호화된 필드에서 문서 쿼리하기

이 페이지에서는 MongoDB가 클라이언트 사이드 필드 레벨 암호화(CSFLE)를 수행하는 데 사용하는 암호화 유형을 설명합니다. CSFLE를 수행하기 위해 MongoDB는 다음 유형의 암호화 알고리즘을 사용합니다.

  • 결정론적 암호화

  • 무작위 암호화

결정론적 암호화 알고리즘은 알고리즘이 실행될 때마다 주어진 입력값이 항상 동일한 출력값으로 암호화되도록 보장합니다. 결정론적 암호화는 읽기 작업을 더 잘 지원하지만, 카디널리티가 낮은 암호화된 데이터는 빈도 분석 복구에 취약합니다.

읽기 작업에 사용되지 않는 민감한 필드의 경우 애플리케이션은 빈도 분석 복구로부터 향상된 보호를 위해 무작위 암호화를 사용할 수 있습니다.

중요

객체 및 배열의 결정론적 암호화가 지원되지 않음

결정론적 암호화에서는 전체 객체 및 배열을 암호화하는 것이 지원되지 않습니다. 자세한 내용을 알아보고 예시를 살펴보려면 객체 및 배열 암호화 지원을 참조하세요.

표준 MongoDB 드라이버와 mongosh 메서드를 사용하여 결정론적으로 암호화된 필드를 쿼리할 수 있습니다.

결정론적으로 암호화된 필드에 대해 지원되는 모든 쿼리 연산자의 전체 목록을 보려면 자동 암호화에 지원되는 작업을 참조하세요.

암호화된 데이터 읽기에 대해 자세히 알아보려면 암호화된 읽기를 참조하세요.

참고

CSFLE가 구성되지 않은 클라이언트에서 쿼리하기

CSFLE(클라이언트 측 필드 수준 암호화)를 사용하도록 구성되지 않은 클라이언트를 사용하여 암호화된 필드에 대해 쿼리하는 경우 쿼리는 null 값을 반환합니다. CSFLE가 구성되지 않은 클라이언트는 암호화된 필드를 쿼리할 수 없습니다.

무작위 암호화 알고리즘은 알고리즘이 실행될 때마다 주어진 입력값이 항상 다른 출력값으로 암호화되도록 합니다. 무작위 암호화는 데이터 기밀성을 가장 강력하게 보장하지만, 쿼리를 평가하기 위해 암호화된 필드에서 작동해야 하는 모든 읽기 작업에 대한 지원을 방지하기도 합니다.

읽기 작업에 사용되는 민감한 필드의 경우 애플리케이션은 암호화된 필드에 대한 읽기 지원을 개선하기 위해 결정론적 암호화를 사용해야 합니다.

전체 객체 또는 배열을 암호화하는 것은 임의 암호화에서만 지원됩니다.

예를 들어 다음 문서를 살펴보세요.

{
"personal_information" : {
"ssn" : "123-45-6789",
"credit_score" : 750,
"credit_cards" : [ "1234-5678-9012-3456", "9876-5432-1098-7654"]
},
"phone_numbers" : [ "(212) 555-0153" ]
}

무작위 암호화 알고리즘을 사용하여 personal_informationphone_numbers 필드를 암호화하면 전체 객체가 암호화됩니다. 이렇게 하면 해당 필드 아래에 중첩된 모든 필드가 보호되지만, 중첩된 필드에 대한 쿼리도 방지됩니다.

암호화에 지원되는 작업에 대해 자세히 알아보려면 자동 암호화에 지원되는 작업을 참조하세요.

무작위로 암호화된 필드에 있는 문서를 직접 쿼리할 수 없습니다. 그러나 다른 필드를 사용하여 무작위로 암호화된 필드 데이터의 근사값이 포함된 문서를 찾을 수 있습니다.

예를 들어, ssn 필드가 무작위로 암호화되는 다음 문서를 고려해 봅니다.

{
"_id": "5d6ecdce70401f03b27448fc",
"name": "Jon Doe",
"ssn": 241014209,
"bloodType": "AB+",
"medicalRecords": [
{
"weight": 180,
"bloodPressure": "120/80"
}
],
"insurance": {
"provider": "MaestCare",
"policyNumber": 123142
}
}

ssn 필드를 쿼리하는 대신 ssn 필드의 마지막 4자리 숫자를 포함하는 last4ssn이라는 다른 일반 텍스트 필드를 추가할 수 있습니다. 그런 다음 ssn의 프록시로 last4ssn 필드를 쿼리할 수 있습니다.

{
"_id": "5d6ecdce70401f03b27448fc",
"name": "Jon Doe",
"ssn": 241014209,
"last4ssn": 4209,
"bloodType": "AB+",
"medicalRecords": [
{
"weight": 180,
"bloodPressure": "120/80"
}
],
"insurance": {
"provider": "MaestCare",
"policyNumber": 123142
}
}

돌아가기

키 관리