探索GitHub中ActiveRecord::Encryption的应用:保护敏感数据库字段的必要性与方法

本文是关于如何使用GitHub的两部分系列文章的第1部分。ActiveRecord::加密。 你可能知道GitHub会加密你的源代码,但是,...


本文是关于如何使用GitHub的两部分系列文章的第1部分。ActiveRecord::加密。

你可能知道GitHub会加密你的源代码,但是,你可能不知道Ruby on Rails也会加密敏感的数据库列。这样做是为了提供额外的深度防御,以减轻以下问题:

读取或篡改敏感字段,如果数据库 异常访问se日志,不小心泄露了日志中的敏感数据

动机

直到最近,它还使用一个名为Encrypted Attributes的内部库。GitHub开发人员声明应该使用API对列进行加密。ActiveRecord::加密:

class PersonalAccessToken encrypted_attribute:encrypted_token,:plaintext_token结束

既然已经有了实现,为什么要列ActiveRecord:: encryption我们的主要动机是防止开发人员不得不学习github特定的模式来加密敏感数据。

我们相信,使用熟悉和直观的模式将使我们的安全工具得到更好的采用,从而为我们的用户提供更好的安全性。

除了公开一些底层加密实现细节外,该API并没有为开发人员提供一种加密现有列的简单方法。内部库要求每个新的数据库列生成一个单独的加密密钥,并将其存储在一个安全的环境变量配置中。这造成了一个瓶颈,因为大多数开发人员并不是每天都进行加密,需要安全团队的支持才能进行任何更改。

在评估ActiveRecord::Encryption时,对开发人员的可用性特别感兴趣。我们希望开发人员能够编写一行代码。无论它们之前是纯文本还是使用之前的解决方案,它们的列都神奇地起飞了。ActiveRecord:: encryption最终的API是这样的:

类PersonalAccessToken加密:令牌结束

这个API与遗留API中使用的API完全相同。它隐藏了使其在GitHub规模上工作的所有复杂性。

我是怎么实现的

在构建Monolith的过程中,我们与架构和基础设施团队合作,确保解决方案满足GitHub的可扩展性和安全性要求。下面是我们为使实现适应基础设施而进行的一些自定义的快速列表。

与往常一样,在修改现有加密实现时需要考虑某些细微差别,并且始终建议与安全团队一起检查新的加密代码。

安全的主密钥存储

默认情况下,Rails使用内置的credential .yml.enc File来安全地存储用于派生列加密密钥的主密钥和静态盐。

GitHub的密钥管理策略ActiveRecord::Encryption它与Rails的默认值在两个主要方面有所不同。为每一列导出一个单独的密钥,并将密钥存储在一个集中的秘密管理系统中。

从单个主键派生每列键

如上所述,此迁移的目标之一是通过手动管理密钥来消除团队瓶颈。但是,我希望保留单个密钥的安全属性。值得庆幸的是,密码学专家为此创建了一个称为密钥派生函数(KDF)的原语。这些函数(大致)接受三个重要参数:主键、唯一的salt和规范中称为“info”的字符串。

我们的salt只是表名、下划线和属性名。所以“PersonalAccessTokens#token”的盐是“personal_access_token_token”。这确保了每个列的键是不同的。

根据ActiveRecord::Encryption的规范,该算法(AES256-GCM)必须注意不要用同一个密钥加密太多的值(避免Nonce重用)。使用"info"字符串参数至少每年一次自动更改每个列的键。因此,信息输入当前年份作为Nonce派生键。

配置GitHub的应用程序存储秘密Hashicorp Vault。为了遵循这个现有的模式,我们需要从Vault而不是从credentials.yml.enc文件中获取主键。为了适应这一点,我创建了一个自定义键提供程序,其行为与默认值类似。从Vault检索密钥并使用KDF检索密钥(参见图1)。

将新行为设置为默认值

我们团队的关键原则之一是,我们开发的解决方案应该是直观的,不需要产品开发人员的实现知识。ActiveRecord::Encryption包括自定义用于加密特定列中的数据的Encryptor的功能。此特性允许开发人员选择性地使用上述策略,但要使其成为monoliths的默认策略,加密模型助手会自动为用户选择适当的github特定密钥提供程序。

{自定义}加密(*attributes, key_provider: nil, previous: nil, **options) # snip:确保只传递一个属性#…#拉出唯一属性attribute = attributes。确保如果一个密钥提供程序被传递,它是一个GitHubKeyProvider #…#如果没有设置密钥提供程序,实例化一个kp = key_provider || GitHub::Encryption::GitHubKeyProvider新(表:table_name。To_sym, attribute: attribute) # snip:逻辑,以确保支持以前的加密格式和明文,以实现平滑转换(参见第2部分)#调用rails加密super(attribute, key_provider: kp, previous: github_previous, **options) end}

我们目前只向内部开发人员提供此API。Github.com代码库。在使用库时,我正在尝试将此策略向上传输。ActiveRecord::Encryption通过将逐类加密方案替换为逐列加密方案。

默认禁用压缩

在加密前对值进行压缩可以揭示值的内容信息。例如,具有更多重复字节的值,如'abcabcabc ',比相同长度的字符串,如'abcdefghi '压缩得更好。除了密文通常暴露长度的一般加密属性外,这还暴露了关于底层明文的熵(随机性)的附加信息。

ActiveRecord::Encryption在默认情况下压缩数据以提高存储效率,但是由于要加密的值相对较小,我们认为这种权衡对于我们的用例来说是不值得的。这就是为什么我们用一个使压缩可选的标志替换了加密前的默认压缩值。

转向新的加密标准:困难的部分

这篇文章介绍了我在选择ActiveRecord::加密时遇到的一些设计决策和权衡,但我不确定如何指导现有应用程序的开发人员开始加密列。信息是不够的。在本系列的下一篇文章中,我将向您展示我们如何处理困难的部分:从明文或其他加密标准升级应用程序中的现有列。

https://github.blog/2022-10-26-why-and-how-github-encrypts-sensitive-database-columns-using-activerecordencryption/ GitHub为什么以及如何使用ActiveRecord::Encryption加密敏感的数据库列

本文来自作者[美淑]投稿,不代表有爱婚恋立场,如若转载,请注明出处:https://www.youai1314.com/jyfx/202507-1219.html

(18)

文章推荐

  • 必看教程“打麻将买挂怎么买”爆光开挂猫腻详情

    打麻将买挂怎么买是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。手机打牌可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义手机打牌系统规律,只需要输入自己想要的开挂功能,一键便可以生成出手机

    2025年08月13日
    11
  • Anant宁静公园:Panvel奢华社区呈现独特生活享受

    SMPLRaigad(Maharashtra)[印度],8月30日:AnantSerenePark,一个在Wardoli-Panvel备受期待的住宅项目,已经正式启动,承诺重新定义该地区的现代生活。这个独特的开发项目提供了城市便利和自然宁静的独特融合,为豪华和平

    2025年08月13日
    11
  • 终于找到“微信游戏微乐麻将有挂吗”分享装挂技巧步骤

    微信游戏微乐麻将有挂吗是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。微乐麻将可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义微乐麻将系统规律,只需要输入自己想要的开挂功能,一键便可以生成

    2025年08月13日
    8
  • 1993年,艾伯塔省宣布私人白酒模式将提供更多选择与价格稳定性

    “阿尔伯塔酒类控制委员会不再是我们的精神领袖,”卡尔加里先驱报专栏作家唐·马丁在1993年9月3日的专栏中宣称。马丁是对艾伯塔省政府将放弃对酒类的独家控制的消息做出反应的。自1924年该省禁酒令结束以来,艾伯塔省政府一直通过艾伯塔省酒类控制委员会对酒类销售进行监管。

    2025年08月13日
    10
  • 科普一下“星悦陕西麻将咋样开挂”了解开挂过程

    您好:星悦陕西麻将咋样开挂这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的,添加客服微信

    2025年08月13日
    9
  • 给大家科普一下“手机麻将有挂是真的吗 社区论坛”太坑人了,真的有挂

    手机麻将有挂是真的吗社区论坛是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。手机打牌可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义手机打牌系统规律,只需要输入自己想要的开挂功能,一键便

    2025年08月13日
    9
  • 终于找到“荔枝竞技麻将别人开挂了还能玩吗”原来真实可以装挂

    荔枝竞技麻将别人开挂了还能玩吗是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。手机打牌可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义手机打牌系统规律,只需要输入自己想要的开挂功能,一键便

    2025年08月13日
    9
  • 玩家攻略宝典“有没有卖麻将挂的网站”(其实真的能开挂)

    您好:有没有卖麻将挂的网站“这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的,添加客服微

    2025年08月13日
    11
  • 今日盘点“新上游斗牛大厅有挂吗”附开挂脚本详细步骤

    家好,今天小编来为大家解答新上游斗牛大厅有挂吗有没有挂这个问题咨询软件客服可以免费测试,新上游斗牛大厅有挂吗的挂在哪里买很多人还不知道,现在让我们一起来看看吧!一、新上游斗牛大厅有挂吗记牌器怎么全显示你需要获得记牌器才能全部显示,否则只显示前面几张牌的数

    2025年08月13日
    9
  • 教程指点“汤圆微乐麻将怎么开挂的”的确有挂

    汤圆微乐麻将怎么开挂的是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。微乐麻将可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义微乐麻将系统规律,只需要输入自己想要的开挂功能,一键便可以生成

    2025年08月13日
    10

发表回复

本站作者后才能评论

评论列表(4条)

  • 美淑
    美淑 2025年07月22日

    我是有爱婚恋的签约作者“美淑”!

  • 美淑
    美淑 2025年07月22日

    希望本篇文章《探索GitHub中ActiveRecord::Encryption的应用:保护敏感数据库字段的必要性与方法》能对你有所帮助!

  • 美淑
    美淑 2025年07月22日

    本站[有爱婚恋]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • 美淑
    美淑 2025年07月22日

    本文概览:本文是关于如何使用GitHub的两部分系列文章的第1部分。ActiveRecord::加密。 你可能知道GitHub会加密你的源代码,但是,...

    联系我们

    邮件:有爱婚恋@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们