암호화 스키마
이 페이지의 내용
개요
이 페이지에서는 자동 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
키워드를 사용하여 정규 표현식과 일치하는 이름을 가진 모든 필드에 대한 암호화 규칙을 정의할 수 있습니다. 이를 통해 단일 정규 표현식을 기반으로 암호화할 필드를 여러 개 지정하거나 필드 이름의 일부만 사용하여 지정할 수 있습니다. 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 유형 |
---|---|---|
| 결정론적 | Int |
| 랜덤 | 문자열 |
| 랜덤 | 배열 |
| 결정론적 | Int |
다음과 같은 이유로 결정론적 암호화를 사용하여 ssn
및 insurance.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 암호화 스키마를 참조하세요.
자동 암호화에 대해 자세히 알아보려면 자동 암호화를 참조하세요 .
빠른 시작을 보려면 빠른 시작을 참조하세요.