加密模式
本页内容
概述
在本页中,您可以了解如何创建用于自动客户端字段级加密(CSFLE)的加密模式,以及如何创建用于CSFLE的加密模式的示例快速入门.
加密模式
加密模式是一个JSON对象,它使用严格的子集JSON Schema Draft 4标准语法以及关键词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 关键字
关键字 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
集合中
{ "_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
集合中的文档
{ "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 | 随机 | String |
medicalRecords | 随机 | Array |
insurance.policyNumber | 确定性 | Int |
您选择对以下原因使用确定性加密来加密ssn
和insurance.policyNumber
字段
您希望能够对这些字段进行查询。
这些字段中的值具有高基数,因此这些数据不易受到频率分析攻击。
您选择对bloodType
字段使用随机加密,以下是一些原因
您不打算对这个字段进行查询。
这个字段中的值具有低基数,如果您使用确定性加密,则它们容易受到频率分析攻击。
您必须对medicalRecords
字段使用随机加密,因为CSFLE不支持对类型为array
的字段进行确定性加密。
提示
有关支持的和不支持的自动加密操作的更多信息,请参阅自动加密支持的操作。
指定加密规则
要使用确定性加密对 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" } } } }
查看完整模式
快速入门的完整加密模式如下
{ "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 加密模式
要了解更多关于自动加密的信息,请参阅 自动加密。
要查看快速入门,请参阅 快速入门。