GitHub为什么以及如何使用ActiveRecord::Encryption加密敏感的数据库列

   本文是关于如何使用GitHub的系列文章的第一部分,主题为ActiveRecord::加密。 你可能已经知道GitHub会对源代码进...

  

本文是关于如何使用GitHub的系列文章的第一部分,主题为ActiveRecord::加密。

你可能已经知道GitHub会对源代码进行加密,但你可能不清楚Ruby on Rails同样会对敏感的数据库字段进行加密。这一措施旨在提供额外的安全防护,以应对以下问题:

读取或篡改敏感字段,若数据库异常访问se日志,可能会意外泄露日志中的敏感信息。

动机

直到最近,GitHub使用一个名为Encrypted Attributes的内部库。开发团队建议使用API来对字段进行加密。ActiveRecord::加密:

class PersonalAccessToken encrypted_attribute:encrypted_token,:plaintext_token结束

既然已经有了实现,为什么还要列出ActiveRecord::加密呢?我们的主要动机是为了避免开发人员需要学习GitHub特定的模式来加密敏感数据。

我们相信,采用熟悉且直观的模式将有助于我们的安全工具更好地被接受,从而为用户提供更高的安全性。

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

在评估ActiveRecord::Encryption时,我们特别关注开发人员的可用性。我们希望开发人员只需编写一行代码,无论字段之前是纯文本还是使用其他解决方案,都能轻松实现加密。ActiveRecord::加密最终的API如下:

类PersonalAccessToken加密:令牌结束

这个API与遗留API中使用的API完全一致,隐藏了在GitHub规模上运作的所有复杂性。

我是如何实现的

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

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

安全的主密钥存储

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

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

从单个主键派生每列密钥

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

我们的盐由表名、下划线和属性名组成。因此,“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加密敏感的数据库字段

本文来自作者[svs]投稿,不代表立场,如若转载,请注明出处:http://nelsonebo.net/post/6411.html

(241)

文章推荐

  • 华晨宝马SUV:豪华品质与卓越性能的完美结合

      华晨宝马SUV:豪华与实用的完美结合  前言:(图片来源网络,侵删)随着汽车市场的不断发展,SUV车型在消费者中的受欢迎程度也越来越高。华晨宝马SUV作为一款结合了豪华与实用的车型,备受消费者的青睐。本文将为您介绍华晨宝马SUV的特点和优势,并通过案例分析进一步展示其卓越的性能和品质。

    2024年09月02日
    916
  • 2.4T柴油+ZF 9AT,分时四驱,拥有涉水喉和拖挂资质,18万以下,玩家必看的超值选择

      长城皮卡一直是中国销量第一的品牌,口碑在国内外都很好。他们最新推出的山海炮系列车型在2024成都车展上亮相,包括2.4T越野炮、穿越版和山海炮旅居车等多款车型。  山海炮穿越版是一款高端豪华皮卡,售价24.98万元。它的内饰豪华舒适,车身尺寸大,后排座椅支持电动调节,静音效果也很好。此外,它

    2024年09月06日
    880
  • 奥迪a6一般人养得起吗 奥迪A6的养车成本适合普通消费者吗?

    奥迪A6一般人养得起吗?  奥迪A6作为一款豪华中型轿车,其价格和养车成本是许多人关注的焦点。一般来说,奥迪A6的起售价在30万元左右,而高配车型甚至超过50万元。对于大多数人来说,购车的首付和月供是一个重要的考虑因素。除了购车费用,养车成本也不容忽视,包括保险、油费、保养和维修等。一般情况下,

    2024年11月09日
    354
  • 阿富汗边境枪战致23名激进分子和7名巴基斯坦士兵死亡

      周一,巴基斯坦军方表示,在混乱的西北部地区,巴安全部队进行了多次突袭,随后爆发枪战,导致7名士兵和23名武装分子丧生。这片地区曾是巴基斯坦塔利班的根据地。军方声明称,首次交火发生在夜间,位于白沙瓦市郊的开伯尔-普赫图赫瓦省,六名武装分子和两名军官牺牲。

    2024年11月14日
    396
  • 美国参议院拒绝国际援助以优先推动国内边境政策

    周三,参议院的共和党成员阻止了向乌克兰和以色列提供数百亿美元的援助,美国总统拜登对此表示“震惊”和“危险”。国会未能通过一项为乌克兰和以色列提供1100亿美元(约880亿英镑)战时资金的综合计划,参议院的共和党人自上周以来一直威胁采取行动。拜登警

    2024年11月25日
    260
  • 美国9月消费者信心指数回落

      最新的调查数据显示,由于对劳动力市场的担忧,美国消费者信心在9月份意外下降,而随着11月总统选举的临近,对经济的乐观情绪也有所减弱。这对民主党副总统卡玛拉·哈里斯来说可能是一个挑战,因为经济仍然是选民在选举前的首要问题,她将与共和党前总统唐纳德·特朗普竞争

    2024年11月30日
    223
  • 沙捞越总理强调全球定位系统将继续传承前任领导人的团结精神

      古晋,7月21日——首相丹斯里阿邦佐哈里今日表示,砂拉越加邦党州政府将继续致力于维护和弘扬前任领导人所奠定的团结与种族和谐的传统,以确保人民能够和谐共处,安居乐业。  他指出:“GPS政府之所以能够有效治理国家,得益于历代领导人的无私奉献与牺牲精神。”  在庆祝砂拉越独立60周年的感恩祈

    2024年11月30日
    242
  • 《地狱潜水者2》新战斗通行证揭示粉丝对枪支削弱的不满

      全新的武器、盔甲和表情将在下周通过战斗通行证加入《地狱潜水者2》,但这并不是免费的。《地狱潜水者2》迅速崛起,成为最佳新在线服务游戏之一,并助力PC玩家在Steam上创下3400万的并发玩家新纪录。然而,对于开发团队Arrowhead来说

    2024年12月09日
    212
  • 两名罹患癌症的伦敦人展示了手术后10天和10年的面部重建效果

      若不及时治疗,某些恶性口腔癌可能会扩散至颌骨。这一情况发生在53岁的罗伯特·西根和43岁的海滕·巴哈提亚身上。为治疗此病,两人均接受了3D面部重建手术。两位患者均由同一位外科医生进行手术,但时间相隔十年——阿卜杜勒·艾哈迈德医生。手术涉及切除下颌骨中不健康的

    2024年12月20日
    88
  • 三到六个月来修复印度清真寺的地陷太久了?这是合理的,英国《金融时报》部长告诉交易员

      吉隆坡,9月21日——联邦领土部长扎利哈·穆斯塔法博士为修复上个月吞噬一名印度游客的印度贾兰清真寺天坑的时间框架进行了辩护。据“今日自由马来西亚”报道,针对一个商业团体的投诉,她呼吁该地区的商人保持耐心。“三到六个月的维修时间被认为是合理的。

    2024年12月20日
    138

发表回复

本站作者后才能评论

评论列表(4条)

  • svs
    svs 2024年12月06日

    我是的签约作者“svs”!

  • svs
    svs 2024年12月06日

    希望本篇文章《GitHub为什么以及如何使用ActiveRecord::Encryption加密敏感的数据库列》能对你有所帮助!

  • svs
    svs 2024年12月06日

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

  • svs
    svs 2024年12月06日

    本文概览:   本文是关于如何使用GitHub的系列文章的第一部分,主题为ActiveRecord::加密。 你可能已经知道GitHub会对源代码进...

    联系我们

    邮件:@sina.com

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

    关注我们