云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_企业网站的设计_是什么

小七 141 0

使用Vault Enterprise Transform Secrets引擎加密数据同时保留格式

Vault 1.4 Enterprise引入了一个名为Transform的新机密引擎。Transform是一个秘密引擎,允许Vault对驻留在外部系统(如数据库或文件系统)中的敏感值进行编码和解码。转换引擎允许您确保当一个系统遭到破坏,其数据被泄露时,即使被对手持有,编码的秘密也不会被篡改。与Transit secrets引擎不同,通过Transform,您可以在保留原始格式的同时加密数据。这篇文章向您展示了如何将转换秘密实现为一个简单的API;源代码是为Java和Go编程语言提供的。有关转换引擎背后的技术细节的信息,请参阅Andy Manoske介绍此功能的博客文章。»源代码和示例应用程序为了跟随这篇文章,可以在下面的存储库中找到一个演示和所有示例代码。https://github.com/nicholasjackson/demo-vault/tree/master/transform要简单地运行演示应用程序,请确保Docker正在您的计算机上运行,并在终端中运行以下命令:卷曲https://shipyard.run/apply|巴什-sgithub.com/nicholasjackson/demo-保险库/转换//蓝图»视频演示这篇博客文章也可以在HashiCorp YouTube频道上以录制的视频形式提供:»API结构示例应用程序是一个简单的RESTful支付服务,它接收和存储支付数据以供以后处理。API有一个接受httppost请求的路由,它使用PostgreSQL存储数据。»安全要求API的安全要求是:信用卡详细信息必须以加密格式存储在数据库中必须能够在不解密的情况下推断出卡号的银行和类型使用保险库和运输机密引擎解决第一个需求相对来说很简单。传输机密可以用作加密即服务,在信用卡详细信息写入数据库之前对其进行加密。为了满足第二个要求,您需要能够查询卡的类型和发卡银行。您可以从卡号中获取此数据,因为并非信用卡号中的所有数据都是唯一的。信用卡号由三部分组成:发卡行编号、账号和校验和。发卡机构编号与卡的类型(第一位)相关,发卡机构代码是您要查询以满足第二个要求的信息。帐号是分配给持卡人的唯一标识符。校验和不是卡号的秘密部分;相反,它是为快速错误检查而设计的。校验和是根据卡号生成的;在处理校验和之前,使用Luhn算法重新生成校验和,如果给定校验和与计算的校验和不同,则卡号输入错误。为了能够查询发卡机构,您实际上有两个选择:对数据库中的卡号进行部分加密存储卡的元数据以及加密值为了在代码中实现这一要求,开发人员有责任管理部分加密信用卡数据的复杂性,而信息安全需要担心正确的实现。»转换机密引擎Vault的Transform Secrets引擎可用于简化过程,同时仍满足第二个要求。Transform允许您在保留格式的同时加密数据,或者根据用户可配置的公式对数据进行部分加密。这样做的好处是信息安全团队可以集中管理加密过程的定义,开发人员不必担心实现,他们可以使用Transform API对卡号进行加密。在我们的用例中,需要对信用卡号进行部分加密,将发卡机构作为可查询的数据,可以定义一个转换。此转换接受一个卡号并加密敏感部分,同时保留格式和推断有关卡类型和发卡行的信息的能力。转换被定义为正则表达式;表达式中的捕获组被替换为密文,而匹配组之外的任何内容都保留为原始格式。要仅加密信用卡号的帐号和校验和,可以使用以下正则表达式。\d{4}-\d{2}(\d{2})-(\d{4})-(\d{4})给定输入的信用卡号:1234-5611-1111-1111Vault将返回类似于以下示例的密文:1234-5672-6649-0472注意,前6位数字没有被密文替换,因为此文本的正则表达式中没有捕获组,数据的格式也会保留,因为它在捕获组之外。»部分加密数据的现实影响你可能会想,只加密账号和cv2数据,是不是降低了加密卡号的安全性?简短的回答是肯定的,但从实际情况来看,这可能没有什么不同。一个包含16位数的数字有16^16个组合的可能性,包括CV2数字。这大致相当于10万亿不同的排列。如果你只存储10位数的卡号加上CV2,这是10^13,或大约10万亿的组合。实际上,由于卡号的前6位数字是发卡机构和卡类型,因此没有100万个不同的发卡机构。假设有10000个,存储16个完整的数字将得到大约100个万亿的组合。在这两种情况下,我们都需要删除校验和,所以如果你加密了账号,我们会得到10万亿的组合,如果你不加密,我们会得到1万亿。是的,不加密发行人意味着人们可以少做一些猜测来确定数字,但他们仍然需要进行1万亿次的猜测。假设有人设法获得了包含部分加密卡号的数据库。如果你的平均API请求时间为100毫秒来接受或拒绝付款,那么某人暴力强制付款大约需要190258年。即使攻击者同时进行攻击,他们的几率也很高。有趣的一方面,因为我们已经确定加密这些信用卡号码是安全的,让我们看看如何做到。»配置转换机密Transform secrets引擎仅适用于Vault Enterprise 1.4及更高版本。对于所有版本的Vault,默认情况下仅启用密钥/值引擎和杂物箱机密引擎。要使用Transform secrets引擎,首先需要启用它;可以使用以下命令执行此操作。保险库机密启用转换启用引擎后,几个资源封装了转换过程的不同方面,这些方面需要在加密数据之前进行配置。这些是:Roles-Roles是底层的高级构造,它保存了一组允许它执行的转换。在执行编码和解码操作时提供角色名称。转换-转换保存有关特定转换的信息。它包含有关我们要执行的转换类型的信息、用于值检测的模板以及其他特定于转换的值,例如要使用的调整源或遮罩字符。模板-模板允许您确定要转换的值的内容和方式。字母表-字母表在FPE转换的输入值和转换值中提供一组有效的UTF-8字符。让我们走过每一步。»角色首先,我们需要创建一个名为payments的角色,在创建角色时,使用transformations参数提供可以从该角色使用的转换列表。下面示例角色中的转换ccn fpe尚不存在。transformations参数是一个"软"约束,而角色需要转换来编码和解码数据,但在创建角色时不需要存在这些转换。保险存储写入转换/角色/付款转换=ccn fpe»转换接下来,我们创建一个名为ccn fpe的转换;这与在上一步中创建角色时使用的名称相同。参数类型定义要执行的转换操作;它有两个可能的值:fpe-使用FF3-1算法的格式保持加密掩蔽-此过程替换敏感字符,但不可逆。tweak_source是一个非机密值,与执行加密和解密操作时使用的密文一起存储。此参数采用三个允许值之一:提供的、生成的、内部的。此示例使用内部值,该值将位置参数值的创建和存储委派给Vault。有关调整源的详细信息,请参见Vault文档,https://www.vaultproject.io/docs/secrets/transform\tweak-来源。template参数与转换使用的模板相关;您可以定义模板并在多个转换中重用它们。Vault有两个内置模板,可以使用builtin/creditcardnumber和builtin/socialsecuritynumber。最后,指定允许的角色,指定允许的角色可以确保角色的创建者可以使用此转换。保险存储写入转换/转换/ccn fpe\类型=fpe\tweak_source=内部\模板=ccn\允许的角色=付款»模板模板定义了转换加密的数据。模板被指定为正则表达式;表达式中的捕获组定义输入元素,并用密文替换。下面的示例创建一个名为ccn的模板。type参数设置为regex,这是当前后端支持的唯一选项。然后将模式指定为有效的正则表达式。对于fpe转换,您需要指定字母表,字母表是生成的ciphe中使用的自定义字符集