containers/ocicrypt

GitHub: containers/ocicrypt

ocicrypt 是 OCI 容器镜像加密规范的 Go 语言实现库,为容器运行时和构建工具提供一致的镜像层加解密能力。

Stars: 190 | Forks: 40

# OCIcrypt 库 `ocicrypt` 库是容器镜像加密的 OCI 镜像规范实现。有关该规范的更多细节可以在 [OCI 仓库](https://github.com/opencontainers/image-spec/pull/775)中查看。该库的目的是在代码中编码规范结构和常量,并为跨容器运行时和构建工具的镜像加密提供一致的实现。 OCIcrypt 的使用者: - [containerd/imgcrypt](https://github.com/containerd/imgcrypt) - [cri-o](https://github.com/cri-o/cri-o) - [skopeo](https://github.com/containers/skopeo) ## 用法 该库有不同级别的用法。主要使用者将是运行时/构建工具,而更具体的用途是扩展加密功能的能力。 ### 运行时/构建工具用法 运行时/构建工具将使用的通用公开接口是执行层的加密或解密: ``` package "github.com/containers/ocicrypt" func EncryptLayer(ec *config.EncryptConfig, encOrPlainLayerReader io.Reader, desc ocispec.Descriptor) (io.Reader, EncryptLayerFinalizer, error) func DecryptLayer(dc *config.DecryptConfig, encLayerReader io.Reader, desc ocispec.Descriptor, unwrapOnly bool) (io.Reader, digest.Digest, error) ``` 这些函数的设置/参数可以通过使用 `github.com/containers/ocicrypt/config` 包创建加密配置来指定。我们注意到,由于在不同运行时/构建工具中,层描述符的 annotations 和其他字段的设置是通过各种方式完成的,因此调用者有责任确保层描述符仍然遵循 OCI 规范(即编码、设置 annotations 等)。 ### 加密敏捷性与可扩展性 本库中使用的对称和非对称加密实现位于 2 个主要接口之后,用户可以根据需要对其进行扩展。它们位于以下包中: - github.com/containers/ocicrypt/blockcipher - 用于块密码的 LayerBlockCipher 接口 - github.com/containers/ocicrypt/keywrap - 用于密钥包装的 KeyWrapper 接口 我们注意到,除非是针对非常特殊且受限的使用场景,否则在 OCI 规范之外添加接口是有风险的,不推荐这样做。如果有可以添加到 OCI 规范中的通用使用场景,请提交 issue 或 PR。 #### Keyprovider 接口 作为 keywrap 接口的一部分,有一个 [keyprovider](https://github.com/containers/ocicrypt/blob/main/docs/keyprovider.md) 实现,允许调用外部的二进制程序或服务。 ## 安全问题 我们认为与本库相关的安全问题至关重要。请通过向 [MAINTAINERS](MAINTAINERS) 文件中列出的维护者发送电子邮件来报告任何与安全相关的问题。 ## Ocicrypt Pkcs11 支持 Ocicrypt Pkcs11 支持目前处于实验阶段。有关更多详细信息,请参阅[此文档](docs/pkcs11.md)。
标签:EVTX分析, Go库, 容器, 密码学, 手动系统调用, 日志审计, 镜像加密