标签 Linux 下的文章

Go安全版图再添利器:OpenPubkey SSH开源,用SSO彻底改变SSH认证

本文永久链接 – https://tonybai.com/2025/03/31/openpubkey-ssh-open-source

对于许多开发者和运维工程师而言,管理SSH密钥是一项繁琐且易出错的任务。正如SSH发明者、芬兰计算机科学家Tatu Ylonen所指出的,许多组织中过时授权密钥的数量甚至远超员工人数,这带来了巨大的安全隐患。现在,一个基于Go语言生态的创新项目——OpenPubkey SSH (OPKSSH),旨在彻底改变这一现状。近日,随着Cloudflare将OPKSSH代码捐赠给Linux基金会下的OpenPubkey项目并将其开源,开发者们终于可以拥抱一种更便捷、更安全的SSH认证方式:使用熟悉的单点登录(SSO)系统。本文将简要介绍OPKSSH项目及其技术基石OpenPubkey技术。

1. 核心看点:OPKSSH 开源与价值解读

OPKSSH (OpenPubkey SSH) 是一个巧妙的工具,它将OpenID Connect (OIDC) 等现代SSO技术与SSH协议集成起来,其核心目标是消除手动管理和配置SSH公私钥的需求,同时不引入除身份提供商(IdP)之外的任何新的可信第三方

此前,虽然底层的OpenPubkey协议已于2023年成为Linux基金会的开源项目,但OPKSSH作为BastionZero(现已被Cloudflare收购)的产品,一直是闭源的。Cloudflare的此次捐赠,使得整个OpenPubkey技术栈的关键应用层实现也完全开放,这对于Go社区和整个基础设施安全领域都是一个重要进展。

2. OPKSSH解决了什么痛点?

通常,我们在进行远程服务器管理和运维操作时会使用SSH免密登录,即通过生成SSH密钥对并将公钥复制到远程服务器来实现。但这种传统方式的SSH密钥管理存在诸多问题:

  • 密钥分发与轮换困难:需要手动将公钥部署到目标服务器,密钥泄露或员工离职后的吊销流程复杂。
  • 长期密钥风险:长期存在的私钥增加了泄露风险,一旦泄露,影响范围广。
  • 可见性差:难以清晰追踪谁拥有对哪些服务器的访问权限,公钥本身缺乏身份信息。

这些问题常常困扰企业的IT运维团队和安全管理人员,他们需要确保访问控制的安全性和可管理性,同时降低操作复杂性和人力成本。

那如何解决这些问题呢?OPKSSH带来了新的解决方案。

3. OPKSSH如何解决这些问题?

OPKSSH基于OpenPubkey协议,带来了革命性的改进:

  • 使用临时性密钥(Ephemeral Keys)提升安全性

OPKSSH使用按需生成的临时SSH密钥对取代长期密钥。用户通过SSO登录后,OPKSSH自动生成有效期较短(默认为24小时,可配置)的密钥。这大大缩短了密钥泄露的风险窗口。

  • 通过单点登录(SSO Login)增强易用性

用户只需运行opkssh login,通过熟悉的IdP (如Google, Azure AD等) 进行SSO认证,即可自动获取所需的SSH密钥。无需手动生成、复制或管理私钥文件,即可在任何安装了opkssh的机器上进行SSH连接。

  • 通过Identity-based Auth提升可见性与简化管理

授权不再基于难以管理的公钥列表(比如~/.ssh/known_hosts),而是基于易于理解和审计的用户身份(如Email地址)。管理员只需在服务器配置中指定允许访问的电子邮件地址列表即可。

到这里你可能会问:这么好用的OPKSSH是如何工作的呢?别急,我们下面就来介绍一下OPKSSH的工作原理。

4. OPKSSH的工作原理

Cloudflare的文章中有一个很好的介绍Opkssh工作原理的例子和示意图,这里也借用过来:

如图所示,当用户alice@example.com使用OPKSSH登录服务器,这个过程大致如下:

  • 用户本地执行命令opkssh login触发OIDC流程,用户向IdP认证。
  • OpenPubkey协议介入,在OIDC流程中巧妙地将用户临时生成的公钥与用户的身份信息绑定,生成一个PK Token(本质上是一个增强的ID Token,包含了公钥信息并由IdP签名)。
  • OPKSSH将此PK Token打包进一个临时的SSH 公钥文件(利用SSH证书的扩展字段)。
  • 当用户发起SSH连接时,这个特殊的公钥文件被发送到服务器。
  • 服务器配置了AuthorizedKeysCommand指令,调用opkssh verify(OpenPubkey验证器)。
  • 验证器检查PK Token的有效性(签名、有效期、颁发者),提取公钥和用户身份(Email),并根据服务器配置判断该用户是否有权访问。

关键在于,这一切无需修改现有的SSH客户端或服务器软件本身,仅需在服务器端sshd_config中添加两行配置即可启用,这个我们在本文后面会详细说明。

OPKSSH的魔力源于其底层的OpenPubkey协议。OpenPubkey本身是一个基于Go语言实现的Linux基金会项目 (github.com/openpubkey/openpubkey)。

OpenPubkey的核心创新在于,它通过一种客户端修改的方式,将用户持有的公钥(PKu)与OIDC的ID Token进行了加密绑定,而无需 OIDC 提供商(OP)作任何修改。这是通过巧妙利用OIDC流程中的nonce参数实现的。客户端不再生成完全随机的nonce,而是生成一个包含其公钥等信息的客户端实例声明(cic),并将cic的哈希值作为nonce发送给OP。OP在签发ID Token时会包含这个nonce。这样,最终得到的PK Token就同时承载了OP 对用户身份的认证以及用户对其公钥的所有权声明(通过客户端的额外签名防止身份误绑定攻击)。

这一机制将OIDC的认证模型从持有者认证(Bearer Authentication) 升级到了持有证明(Proof-of-Possession, PoP)。在Bearer模型下,任何窃取到ID Token的人都可以冒充用户;而在PoP模型下,用户需要证明自己持有与PK Token中公钥对应的私钥,从而有效抵御令牌重放(Token Replay)令牌泄露(Token Export) 攻击,安全性显著提高。

OpenPubkey的设计还考虑了可扩展性,例如引入MFA-Cosigner概念,可以进一步增强安全性,甚至在OP本身被攻陷的情况下也能提供保护。关于OpenPubkey协议设计的详细内容,可以参见参考资料中OpenPubkey的论文,这里就不赘述了。

了解了原理之后,下面我们来实际验证一下opkssh通过IdP实现SSO一键登录服务器的效果。

5. 使用opkssh实现免密登录服务器

这次验证的环境是这样的:

  • 客户端:macOS
  • 服务端:Ubuntu 22.04.1 LTS
  • IdP:microsoft (注:国内访问microsoft的服务器成功率高)

我们先来看看客户端的操作步骤:

5.1 opkssh在客户端的操作

首先在客户端安装opkssh,你可以选择直接下载编译好的opkssh二进制文件:

$curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-osx-amd64 -o opkssh; chmod +x opkssh

由于opkssh是纯Go实现的,如果你本地有Go工具链,也可以选择通过源码安装(在国内,可能选择源码安装的速度更快):

$go install github.com/openpubkey/opkssh@latest

安装完成后,我们就来进行客户端的IdP认证。输入下面命令:

$opkssh login
INFO[0000] Opening browser to http://127.0.0.1:59638/chooser

该命令会打开本地浏览器,并展示下面页面:

截止到目前,opkssh支持选择Google、Microsoft或Gitlab作为IdP,这里我们选择Sign in with Microsoft

之后浏览器将跳转到下面页面:

这里使用我的Microsoft账号进行身份认证,点击“接受”,即完成认证,之后你可以关闭页面!

而命令行也会提示下面信息:

INFO[0002] listening on http://127.0.0.1:3000/
INFO[0002] press ctrl+c to stop
Writing opk ssh public key to /Users/tonybai/.ssh/id_ed25519.pub and corresponding secret key to /Users/tonybai/.ssh/id_ed25519Keys generated for identity
Email, sub, issuer, audience:
bigwhite.cn@hotmail.com AAAAAAAAAAAAAAAAAAAAAP5YMhbf2Ufl_eI1PdK12VE https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0 096ce0a3-5e72-4da8-9c86-12924b294a01

接下来,我们再来看看服务端要进行的操作与配置。

5.2 opkssh在服务端的操作

在要登录的服务器端安装opkssh,由于安装后还要进行一些设置,我建议直接采用opkssh项目提供的安装脚本进行安装:

$ wget -qO- "https://raw.githubusercontent.com/openpubkey/opkssh/main/scripts/install-linux.sh" | sudo bash
Detected OS is debian
Created group: opksshuser
Created user: opksshuser with group: opksshuser
Downloading version latest of opkssh from https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-linux-amd64...
opkssh                           100%[========================================================>]  16.01M  83.4MB/s    in 0.2s
Installed opkssh to /usr/local/bin/opkssh
Configuring opkssh:
  Creating sudoers file at /etc/sudoers.d/opkssh...
  Adding sudoers rule for opksshuser...
Installation successful! Run 'opkssh' to use it.

之后我们需要修改一下服务端的sshd server的配置。SSH服务器支持一个名为AuthorizedKeysCommand的配置参数,该参数允许我们使用自定义程序来确定SSH公钥是否被授权。因此,我们通过对/etc/ssh/sshd_config文件进行以下两行更改,将SSH服务器的配置文件更改为使用OpenPubkey验证程序而不是SSH默认的验证程序:

AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t
AuthorizedKeysCommandUser opksshuser

然后通过opkssh添加授权的用户,这些用户登录后将具备root用户权限:

$opkssh add root bigwhite.cn@hotmail.com microsoft
Successfully added new policy to /etc/opk/auth_id

最后重启一下sshd服务:

$systemctl daemon-reload
$systemctl status sshd

5.3 ssh登录验证

注:为了避免使用之前的ssh免密登录,可以在服务端将.ssh/authorized_keys中的公钥删除!

服务端的opkssh命令行被sshd服务调用进行客户端验证时,会在/var/log/opkssh.log中打印相关日志,这也是opkssh起到作用的一个间接证明。

我在客户端依然以原先的ssh登录命令尝试登录服务器:

$ssh root@<your_server_ip>

我们在服务端opkssh.log中可以看到下面一些输出:

2025/03/29 02:57:43 /usr/local/bin/opkssh verify root AAAAKGVjZHNhLXNoYTItbDUQAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAaAAAABNlY2RzYS1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQSXO9YZhMPnGkYfnwpFu/HeX29s7q0l4lK5qCgvaeaWh3zBSidDh49Nirsu5Iwh7YVRkKMa5q+hhnJEFAh7FL5LAAAAZAAAABNlY2RzYS1zaGEyLW5pc3RwMjU2AAAASQAAACEAqD5msj3BsQhlpszOJHBoIcmK3Ex/BwyNWKHgp6labScAAAAgULO5naYi9xOmzrShcGiVIprRbdSvdWltioSVKu63h6Y= ecdsa-sha2-nistp256-cert-v01@openssh.com
2025/03/29 02:57:43 Providers loaded:  https://accounts.google.com 206584157355-7cbe4s640tvm7naoludob4ut1emii7sf.apps.googleusercontent.com 24h
https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0 096ce0a3-5e72-4da8-9c86-12924b294a01 24h
https://gitlab.com 8d8b7024572c7fd501f64374dec6bba37096783dfcd792b3988104be08cb6923 24h

2025/03/29 02:57:44 warning: failed to load user policy: failed to read user policy file /root/.opk/auth_id: error reading root home policy using command /usr/bin/sudo -n /usr/local/bin/opkssh readhome root got output Failed to read user's home policy file: failed to open /root/.opk/auth_id, open /root/.opk/auth_id: no such file or directory
 and err exit status 1
2025/03/29 02:57:44 successfully verified

之后,我就成功登录到服务器上了!

6.小结

OPKSSH 的开源是 OpenPubkey 项目和 Go 安全生态的重要里程碑。它不仅提供了一个解决 SSH 密钥管理难题的实用方案,也展示了 Go 语言在构建安全、可靠的基础设施工具方面的强大能力。

我们鼓励对安全、身份认证和 Go 开发感兴趣的开发者们:

  • 试用 OPKSSH: 在你的开发或测试环境中体验 SSO 登录 SSH 的便捷。
  • 关注 OpenPubkey 项目: Star GitHub 仓库,了解最新动态。
  • 参与社区贡献: 通过 Pull Request、Issue 反馈、参与讨论等方式为项目贡献力量。可以在 OpenSSF Slack 的 #openpubkey 频道找到社区成员,或参加每月一次的社区会议。

随着 OPKSSH 的加入和持续发展,我们期待 OpenPubkey 能够在更多场景下发挥价值,例如代码签名 (Sigstore 集成)、端到端加密通信等,进一步丰富和巩固 Go 语言在云原生和安全领域的基础设施地位。

7. 参考资料


Gopher部落知识星球在2025年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。并且,2025年将在星球首发“Gopher的AI原生应用开发第一课”、“Go陷阱与缺陷”和“Go原理课”专栏!此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格6$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily
  • Gopher Daily Feed订阅 – https://gopherdaily.tonybai.com/feed

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

走向合规:Go加密库对FIPS 140的支持

本文永久链接 – https://tonybai.com/2024/11/16/go-crypto-and-fips-140

在今年3月份,Microsoft Azure团队宣布开设Go开发人员博客,旨在向开发者通报Microsoft在Go领域的最新动态,包括如何在Azure上部署Go工作负载以及与Go编程相关的文章。

然而,经过一段时间的关注,我发现该博客上的大多数文章都呈现出类似下图中的标题格式:

似乎微软在紧跟Go的发布节奏,发布自己维护的fork版本。那么,这些fork版本与上游Go究竟有何不同呢?通过查阅其fork版的README文件,我们可以找到答案:

原来微软的Go分支主要是为了向开发者提供符合FIPS 140-2标准Go加密库

近期,Russ Cox也发起了一个新提案,旨在使Go的加密库符合FIPS 140标准,以便能够去除Boring Crypto库。

对于许多对加密领域不太熟悉的读者来说,这可能会引发一系列疑问:什么是FIPS 140标准?Go目前对FIPS 140标准的支持状态如何?新提案将如何影响Go未来对FIPS 140标准的支持?

在这篇文章中,我们就一起了解一下FIPS 140标准、Go对其支持的现状以及未来的支持策略。

1. 什么是FIPS 140标准认证

FIPS 140(联邦信息处理标准第140号)是美国政府制定的一套计算机安全标准,主要用于规定加密模块的要求。该标准由美国国家标准与技术研究院(NIST)发布,旨在确保用于加密的硬件和软件模块满足一定的安全标准。

FIPS 140标准经历了多个版本的演进:

  • FIPS 140-1

于1994年发布,2002年撤回。它首次定义了四个安全级别和十一项要求领域。

  • FIPS 140-2

于2001年发布,考虑了技术的发展和用户反馈,是国际标准ISO/IEC 19790:2006的基础文件。FIPS 140-2仍然在使用,直到2022年4月某些应用程序的测试可以继续进行。FIPS 140-2定义了四个安全级别:

级别1:最低要求,所有组件必须是“生产级”的,且不允许有明显的安全漏洞。
级别2:增加了物理防篡改的要求,要求有角色基础的身份验证。
级别3:要求更高的物理防篡改能力和基于身份的认证,同时要求对模块的关键安全参数接口进行物理或逻辑隔离。
级别4:对物理安全要求更严格,要求能够抵御环境攻击。
  • FIPS 140-3

在2019年发布,作为FIPS 140-2的继任者,FIPS 140-3对标准进行了更新,使其与国际标准更为一致,并引入了新的安全要求。

FIPS 140认证由加密模块验证计划(CMVP)负责,该计划是NIST与加拿大通信安全局(CSE)共同运营的。认证过程涉及对加密模块的详细测试,确保其符合相应的标准要求。所有使用加密的美国联邦政府部门都必须使用经过FIPS 140认证的模块。

FIPS 140并不保证使用该标准的模块一定是安全的,但它确立了一系列文档和测试要求,确保加密模块在设计和实现上的可靠性。对于希望使用加密模块的用户和开发者来说,确认所使用的模块是否有现有的验证证书是非常重要的。

FIPS 140是美国政府对加密模块的要求,许多公司需要遵守这些标准以满足合规性需求,尤其是一些企业在与美国政府及其他受监管行业的合作中,FIPS合规性变得至关重要,这也是微软为何要建立Go Fork分支满足FIPS合规性,以及Go团队发起尽快让Go加密库满足FIPS合规性的提案的根本原因。随着Go在受监管环境中的采用增加,FIPS合规性将影响Go的吸引力和开发者体验。

那么当前Go密码学包对FIPS的支持是怎样的呢?我们继续往下看。

2. Go密码学包对FIPS标准支持的现状

到目前为止(Go 1.23.x版本),Go原生的crypto包并不具备FIPS认证。并且,在2017年的一个名为”crypto: FIPS 140-2 Certification“的issue中,Go密码学领域的首任技术负责人Adam Langley给出了这样的答复:

从Adam Langley的表述中可以看出,他似乎对FIPS 140这样的官方标准持有一种不屑的态度。同时他也指出对于FIPS 140认证感兴趣的开发者,可以尝试使用dev.boringcrypto分支

dev.boringcrypto分支是什么呢?它又是如何实现FPIS 140合规的呢?其实思路很简单,那就是:既然我暂时是不合规的,那我就找一个合规的,然后包装一下提供给开发者使用

那么什么库是合规的呢?BoringSSL,也就是Google fork的OpenSSL库的自维护版本,更精确地一点是BoringSSL库的一部分内容通过了FIPS 140-2认证


截图来自Google Cloud blog

而通过认证的这部分模块被称为BoringCrypto


截图来自NIST官网

Go dev.boringcrypto分支就是通过BoringSSL的binding来实现FIPS 140合规的,通过导入crypto/tls/fipsonly包,可以将所有TLS配置限制为FIPS合规设置,确保使用合规的加密算法。下面是Go 1.23.0中crypto/tls/fipsonly下fipsonly.go的源码,我们可以看到它实际上使用的是crypto/internal/boring下面的合规包:

// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build boringcrypto

// Package fipsonly restricts all TLS configuration to FIPS-approved settings.
//
// The effect is triggered by importing the package anywhere in a program, as in:
//
//  import _ "crypto/tls/fipsonly"
//
// This package only exists when using Go compiled with GOEXPERIMENT=boringcrypto.
package fipsonly

// This functionality is provided as a side effect of an import to make
// it trivial to add to an existing program. It requires only a single line
// added to an existing source file, or it can be done by adding a whole
// new source file and not modifying any existing source files.

import (
    "crypto/internal/boring/fipstls"
    "crypto/internal/boring/sig"
)

func init() {
    fipstls.Force()
    sig.FIPSOnly()
}

Go 1.8开始,Go都会在发布大版本时建立对应该大版本的dev.boriingcrypto分支,如下图:

但Go官方在Go 1.18版本之后似乎就不维护这个分支了。微软也恰是从那时(2022年初)开始fork了Go repo并维护自己的fips合规版本,在Linux上,该Fork使用OpenSSL的Go binding进行加密,而在Windows上使用CNG(Cryptography Next Generation)。

注:尽管使用微软的Go工具链构建的应用程序可以在FIPS兼容模式下运行,但这并不意味着自动符合FIPS认证。开发团队需确保使用FIPS合规的加密原语及工作流程。如果无法提供FIPS合规的实现,修改后的加密运行时将回退到Go标准库的加密方法,如使用crypto/md5或非标准nonce大小的AES-GCM等。

由于BoringSSL是C语言的,Go dev.boringcrypto分支势必要依赖cgo,将部分加密包的内部实现替换为通过FIPS 140认证的模块。但这种方案存在许多问题,如内存不安全代码、影响Go版本更新、性能问题和开发体验等。于是就有了文前提到的旨在移除BoringCrypto的Go团队的新提案。

新提案的内容是什么呢?下面我们就来细致看看。

3. Go加密库原生支持FIPS 140认证的提案

根据Go加密库上一任Tech leader Filippo Valsorda在proposal: crypto: mechanism to enable FIPS mode中的描述,Go团队希望为Go加密库实现FIPS 140-3认证,并允许开发者启用或禁用FIPS模式,以满足合规性要求。

该proposal建议在运行时通过设置GODEBUG标志来启用FIPS模式,新增GODEBUG=fips140选项。并且通过GODEBUG=fips140的值可以控制FIPS模式:

  • on为启用FIPS模式。
  • only:仅允许使用经过批准的加密算法,其他非批准算法将返回错误。
  • enforce(该值依然在讨论中):它会强制执行使用FIPS合规算法,非批准算法将返回错误或导致程序崩溃。

在代码层面,新增crypto/fips140包或放在crypto/internal/fips下,其中包含Enabled() bool函数,用于运行时检查当前是否启用了FIPS模式。

Russ Cox之后在”proposal: cmd/go: add fips140 module selection mechanism“的issue中着重阐述了在Go module层面对fips 140的支持策略,目前仍在更新中,根据Russ Cox 2024.11.11的最新comment,当前设计的策略大致如下:

  • 引入新的目标配置环境变量GOFIPS140用于构建工具链(替代之前在propsal中考虑新增的-fips140命令行标志)

该环境变量可取值为off、latest、inprocess、certified或v1.X.Y-fips.N,默认值为off。使用go version -m或获取debug.BuildInfo时,可显示新的构建设置GOFIPS140,其值为off、devel或具体的版本号。

- off(默认):使用最新源代码,GODEBUG设置为fips140=off。
- latest:使用最新源代码,GODEBUG设置为fips140=on。
- v1.X.Y-fips.N:使用指定的快照。
- inprocess:使用正在进行FIPS标准认证的版本。
- certified:使用经过NIST的FIPS认证的版本。
  • 不将FIPS代码视为module

用户不可见的API或工具将不会将crypto/internal/fips代码视为module。在运行go list时,crypto/internal/fips/…的包可以来自\$GOROOT/src/crypto/internal/fips/…或module cache中的目录,Module字段将为nil,与标准库其他部分一致。

  • 版本管理与模块系统的分离

尽管crypto/internal/fips有语义版本控制的版本集合,但它们与Go模块系统完全分离。存在于lib/fips140中的文件将采用实现定义(implementation-defined)的格式,尽管其格式很可能采用module zip和checksum的形式。

以上策略的实施将增强Go在FIPS 140支持方面的灵活性和可控性,为开发者提供了更清晰的配置选项。通过将FIPS 支持的配置独立于模块系统,开发者可以更方便地管理构建环境,避免潜在的配置冲突。

并且按照Russ Cox的说法,Go团队计划每年进行一次Go加密库的重新验证,以保持模块的合规性和及时更新。

4. 小结

本文探讨了Go语言加密库在FIPS 140标准支持方面的现状及未来发展。FIPS 140是美国政府制定的一套加密模块安全标准,目前的版本为FIPS 140-3,涵盖了最新的安全要求。

我们详细分析了Go加密库的现状,包括通过BoringSSL实现FIPS 140合规的dev.boringcrypto分支,以及微软维护的FIPS 140合规Go Fork版本。此外,Go团队还提出了针对FIPS 140-3认证的新提案,旨在允许开发者在运行时灵活启用或禁用FIPS模式。这一新提案的实施将为Go提供更大的合规灵活性,并为开发者提供清晰的配置选项,从而增强Go在受监管环境中的吸引力和实用性。

目前,关于Go加密库对FIPS 140支持的相关事项仍处于提案阶段,具体思路和实现细节可能会随着进一步的发展而变化。然而,本文通过对FIPS认证的介绍以及Go加密库未来计划的阐述,相信读者已经初步掌握了选择Go加密模块和满足合规性需求的有用信息。

如果你有什么疑问,欢迎在评论区留言,通过讨论碰撞,我们一起进步和成长!

5. 参考资料


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily
  • Gopher Daily Feed订阅 – https://gopherdaily.tonybai.com/feed

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats