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库, 容器, 密码学, 手动系统调用, 日志审计, 镜像加密