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://buscaroomie.com/post/6411.html

(234)

文章推荐

  • 砸了明火是什么意思?详细解释及示例说明

      砸了明火是什么意思?这个问题可能让很多人感到困惑,因为这个词组并不是很常见。实际上,砸了明火是一个俚语,通常用来形容某个人或事情被揭露或暴露出真相,让人无法再隐瞒或掩饰。在这篇文章中,我们将深入探讨砸了明火的含义,并且解释这个俚语在日常生活中的应用。  砸了明火的意思(图片来源网络,侵删)

    2024年09月14日
    850
  • 筒袜配什么鞋最时尚?

      筒袜配什么鞋  在时尚潮流中,筒袜作为一种常见的配饰,早已成为了时尚达人们的必备单品。然而,很多人在搭配筒袜时常常感到困惑,不知道应该选择什么样的鞋子来搭配。本文将为大家详细介绍筒袜配什么鞋的潮流潮流趋势,帮助大家更好地搭配出时尚感十足的造型。(图片来源网络,侵删)  筒袜潮流潮流趋势

    2024年09月20日
    731
  • 安得拉邦北部沿海地区因暴雨发布红色警报

    9月9日,维萨卡帕特南(IANS):孟加拉湾低气压区引发的暴雨肆虐安得拉邦北部沿海和戈达瓦里地区,导致低洼地带被淹,交通瘫痪。周一,维萨卡帕特南、维齐亚纳加拉姆、斯里卡库拉姆、东哥达瓦里和西哥达瓦里地区连续第二日遭遇大雨,道路和农田被淹没。溪流、湖泊和灌溉水箱泛滥,淹没了低洼地区,数十个

    2024年11月12日
    332
  • 社会保障金领取者将在6月份少领一笔——原因如下"(真的有挂)-知乎

      本月,一些美国人的社会保障金将减少,这是由于社会保障制度的一个特殊安排。通常,社会保障局每周发放一次款项,分别在每月的第二、第三和第四个星期三支付社会保障金。而补充社会保障收入(SSI)则在每月第一天发放,支持残疾人和低收入老年人,除非这一天是周末或假期。由于6月1日是星期六,

    2024年11月24日
    268
  • 冲浪者遭遇鲨鱼袭击后,决心保护海滩上的同伴

      在鲨鱼袭击中,这几秒钟至关重要。尽快控制出血对挽救生命至关重要。让这些工具尽可能靠近并方便使用,可能会产生巨大的影响。麦肯齐本人完全支持这项倡议,当地社区也团结起来支持这项事业。第一批装备抵达当地海滩在麦肯齐的好朋友杰·凯利和拉克兰·凯利的支持下,舒滕筹到了首批10套

    2024年11月24日
    255
  • 银行可能面临更严厉的负摊销抵押贷款监管

      随着利率持续上升,一些浮动利率抵押贷款借款人的分期偿还期限延长至60年、70年甚至90年。加拿大联邦监管机构目前正在采取行动,降低这种“永久抵押贷款”带来的风险。7月11日,美国金融机构监管局(OSFI)提出改革建议,要求银行持有更多资金,以应对“与余额不断增长的

    2024年11月27日
    243
  • 揭秘查尔斯·曼森被捕的经过

      如果你对查尔斯·曼森的刑事案件了解不多,或许会对一些细节感到熟悉:他那疯狂的眼神、身上的纳粹标志、以及与凶残公社和邪教相关的种种,甚至可能联想到同名的哥特摇滚歌手玛丽莲·曼森。然而,在所有关于查尔斯·曼森的报道、揭露、纪录片和证词中,有一个重要的问题始终引人关注:这个人

    2024年11月28日
    250
  • 安道尔队长利马创下历史记录,宣布退役结束26年职业生涯

      马德里,9月13日——安道尔国家队的传奇球员利马宣布退役,结束了他长达26年的国家队生涯,成为出场次数和进球数最多的球员。  在周二的2024年欧洲杯预选赛中,安道尔以0-3不敌瑞士,43岁的利马作为队长首发出场,比赛进行到23分钟时,双方仍然战成平局。  “最后一天终于来临,26年的旅

    2024年12月02日
    225
  • 乐天和SK集团旗下子公司合作开展碳捕获项目

      乐天化学、SK创新、SKIE技术(SKIET)3家公司23日表示,为进军碳捕捉市场,3家公司签署了谅解备忘录(MOU)。根据谅解备忘录,双方将合作开发和投资用于高性能分离膜开发的碳捕集技术,同时探索这些技术的新应用领域。SKInnov

    2024年12月02日
    201
  • 一名消防员表示,随着要求监管的呼声越来越高,电动自行车电池起火的情况可能会“严重得多”

      一位消防员描述了他抵达一处因电动自行车电池爆炸而被火焰吞噬的房屋时的情景,呼吁政府加强对这类设备的监管的声音愈发高涨。国家消防队长委员会(NFCC)支持“电气安全第一”慈善机构的提案,要求对电池进行监管,类似于烟花和重型机械,销售前需获得第三方的批准。

    2024年12月19日
    129

发表回复

本站作者后才能评论

评论列表(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,节假日休息

    关注我们