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

암호화 스키마

이 페이지의 내용

  • 개요
  • 암호화 스키마
  • 암호화 키워드
  • 암호화 메타데이터 키워드
  • patternProperties 키워드
  • 예시
  • 네임스페이스 지정
  • 데이터 암호화 키 지정
  • 암호화 규칙 선택
  • 암호화 규칙 지정
  • 전체 스키마 보기
  • 자세히 알아보기

이 페이지에서는 자동 클라이언트 측 필드 레벨 암호화 (CSFLE)를 위한 암호화 스키마 를 만드는 방법과 CSFLE 빠른 시작에서 사용되는 암호화 스키마 를 만드는 방법에 대한 학습 예시 를 확인할 수 있습니다.

JSON schema 4 암호화 스키마는 JSON 초안 표준 구문 의 엄격한 하위 집합을 사용하는 encrypt encryptMetadata 객체입니다. 및 키워드와 함께 CSFLE 지원 클라이언트가 문서를 암호화하는 방법을 지정하는 암호화 규칙 을 정의합니다.

암호화 규칙은 클라이언트 애플리케이션이 필드를 암호화하는 방법을 정의하는 JSON 키-값 쌍입니다. 암호화 규칙에서 다음 정보를 지정하거나 상속해야 합니다.

  • 필드를 암호화하는 데 사용되는 알고리즘

  • 클라이언트가 필드를 암호화하는 데 사용하는 DEK(데이터 암호화 키)

  • 필드의 BSON 유형

암호화 규칙에는 encrypt 또는 encryptMetadata 키워드가 포함되어야 합니다.

암호화 스키마에서 정의할 수 있는 암호화 알고리즘에 대해 자세히 알아보려면 필드 및 암호화 유형을 참조하세요.

데이터 암호화 키에 학습 보려면 암호화 키 및 키 볼트를 참조하세요.

encrypt 키워드는 BSON 문서의 단일 필드에 대한 암호화 규칙을 정의합니다. encrypt 키워드가 포함된 암호화 규칙의 구조는 다음과 같습니다.

"<field-name-to-encrypt>": {
"encrypt": {
"algorithm": "<encryption algorithm to use>",
"bsonType": "<bson type of field>",
"keyId": [UUID("<_id of your Data Encryption Key>" )]
}
}

encryptMetadata 키워드는 형제 properties 태그의 하위 요소가 상속하는 암호화 규칙을 정의합니다. encryptMetadata 를 포함하는 암호화 규칙의 구조는 다음과 같습니다.

"bsonType": "object",
"encryptMetadata": {
"algorithm": "<encryption algorithm inherited by children of properties field>",
"keyId": [UUID("<_id of your Data Encryption Key>" )]
},
"properties": { <object to inherit encryptMetadata values> }

암호화 스키마에서 patternProperties 키워드를 사용하여 정규 표현식과 일치하는 이름을 가진 모든 필드에 대한 암호화 규칙을 정의할 수 있습니다. 이를 통해 단일 정규 표현식을 기반으로 암호화할 필드를 여러 개 지정하거나 필드 이름의 일부만 사용하여 지정할 수 있습니다. patternProperties 키워드는 암호화 스키마에서 properties 을(를) 대체합니다.

다음 구조를 사용하여 patternProperties 로 암호화 규칙을 지정합니다.

"bsonType": "object",
"patternProperties": {
"<regular expression to match>": {
"encrypt": {
"algorithm": "<encryption algorithm to use>",
"bsonType": "<bson type of field>",
"keyId": [UUID("<_id of your Data Encryption Key>" )]
}
}

patternProperties 사용 방법의 예는 암호화 스키마 - 패턴 속성을 사용한 암호화를참조하세요.

이 예에서는 CSFLE 빠른 시작 의 문서에 대한 암호화 스키마 생성 단계에서 사용되는 암호화 스키마를 생성하는 방법을 설명합니다.

빠른 시작에서는 다음 구조의 문서를 medicalRecords 데이터베이스의 patients collection에 삽입합니다.

{
"_id": { "$oid": "<_id of your document>" },
"name": "<name of patient>",
"ssn": <integer>,
"bloodType": "<blood type>",
"medicalRecords": [
{ "weight": <integer>, "bloodPressure": "<blood pressure>" }
],
"insurance": {
"provider": "<provider name>",
"policyNumber": <integer>
}
}

암호화 스키마의 루트에서 암호화 스키마가 적용되는 네임스페이스를 지정합니다. medicalRecords 데이터베이스의 patients collection에 있는 문서를 암호화하고 해독하려면 다음을 지정합니다.

{
"medicalRecords.patients": {
<the schema created in the following steps of this example>
}
}

이 빠른 시작에서는 단일 DEK(데이터 암호화 키)로 문서의 모든 필드를 암호화합니다. 암호화 및 암호 해독에 단일 DEK를 사용하도록 문서의 모든 필드를 구성하려면 다음과 같이 암호화 스키마의 루트에서 encryptMetadata 키워드와 함께 DEK의 _id 를 지정합니다.

{
"medicalRecords.patients": {
"bsonType": "object",
"encryptMetadata": {
"keyId": [UUID("<_id of your Data Encryption Key>" )]
},
"properties": {
<the schema created in the following steps of this example>
}
}
}

다음 암호화 알고리즘을 사용하여 다음 필드를 암호화하기로 결정합니다.

필드 이름
암호화 알고리즘
BSON 유형
ssn
결정론적
Int
bloodType
랜덤
문자열
medicalRecords
랜덤
배열
insurance.policyNumber
결정론적
Int

다음과 같은 이유로 결정론적 암호화를 사용하여 ssninsurance.policyNumber 필드를 암호화하기로 선택합니다.

  • 이러한 필드에 대해 쿼리할 수 있기를 원합니다.

  • 이러한 필드의 값은 카디널리티가 높으므로 이 데이터는 빈도 분석 공격에 취약하지 않습니다.

다음과 같은 이유로 무작위 암호화를 사용하여 bloodType 필드를 암호화하기로 선택합니다.

  • 이 필드에 대해 쿼리할 계획이 없습니다.

  • 이 필드의 값은 카디널리티가 낮기 때문에 결정론적으로 암호화한 경우 빈도 분석 공격에 취약합니다.

CSFLE는 array 유형의 필드에 대한 결정론적 암호화를 지원하지 않으므로 무작위 암호화를 사용하여 medicalRecords 필드를 암호화해야 합니다.

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

결정론적 암호화를 사용하여 ssn 필드를 암호화하려면 암호화 스키마에 다음을 지정합니다.

"ssn": {
"encrypt": {
"bsonType": "int",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}

무작위 암호화를 사용하여 bloodType 필드를 암호화하려면 암호화 스키마에서 다음을 지정합니다.

"bloodType": {
"encrypt": {
"bsonType": "string",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
}

무작위 암호화를 사용하여 medicalRecords 필드를 암호화하려면 암호화 스키마에서 다음을 지정합니다.

"medicalRecords": {
"encrypt": {
"bsonType": "array",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
}

결정론적 암호화를 사용하여 insurance.policyNumber 필드를 암호화하려면 암호화 스키마에 다음을 지정합니다.

"insurance": {
"bsonType": "object",
"properties": {
"policyNumber": {
"encrypt": {
"bsonType": "int",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}
}
}

이 Quick Start의 전체 암호화 스키마는 다음과 같습니다:

{
"medicalRecords.patients": {
"bsonType": "object",
"encryptMetadata": {
"keyId": [UUID("<_id of your Data Encryption Key>" )]
},
"properties": {
"insurance": {
"bsonType": "object",
"properties": {
"policyNumber": {
"encrypt": {
"bsonType": "int",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}
}
},
"medicalRecords": {
"encrypt": {
"bsonType": "array",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
},
"bloodType": {
"encrypt": {
"bsonType": "string",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
}
},
"ssn": {
"encrypt": {
"bsonType": "int",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}
}
}
}

암호화 스키마에 대해 자세히 알아보려면 CSFLE 암호화 스키마를 참조하세요.

자동 암호화에 대해 자세히 알아보려면 자동 암호화를 참조하세요 .

빠른 시작을 보려면 빠른 시작을 참조하세요.

돌아가기

명시적 암호화