Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / / /

加密模式

在此页面上

  • Overview
  • 加密模式
  • encrypt 关键字
  • encryptMetadata 关键字
  • patternProperties 关键字
  • 例子
  • 指定命名空间
  • 指定数据加密密钥
  • 选择加密规则
  • 指定加密规则
  • 查看完整模式
  • 了解详情

在此页面上,您可以学习;了解如何为自动客户端字段级加密(CSFLE) 创建加密模式,并查看详细说明如何创建 CSFLE 快速入门中使用的加密模式的示例。

加密模式是一个JSON 对象,它使用JSON schema 4草案 标准语法 的严格子集 以及关键字encryptencryptMetadata 来定义 加密规则 ,这些规则指定启用了 CSFLE 的客户端应如何加密您的文档。

加密规则是 JSON 键值对,用于定义客户端应用程序如何加密字段。您必须在加密规则中指定或继承以下信息:

  • 用于加密字段的算法

  • 客户端使用哪个数据加密密钥 (DEK) 来加密您的字段

  • 字段的 BSON 类型

加密规则必须包含encryptencryptMetadata关键字。

要了解有关可在加密模式中定义的加密算法的更多信息,请参阅字段和加密类型。

要学习;了解有关数据加密密钥的更多信息,请参阅加密密钥和密钥保管库。

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数据库的patientscollection中:

{
"_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

随机

字符串

medicalRecords

随机

阵列

insurance.policyNumber

确定性

Int

选择使用确定性加密来加密ssninsurance.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 加密模式

要了解有关自动加密的更多信息,请参阅自动加密。

要查看快速入门,请参阅快速入门。

后退

显式加密