signiant/sneaker 提供持久性、机密性和完整性。
密钥存储在 S3 中,使用 AES-256-GCM 加密,并通过 KMS 生成的一次性数据密钥进行保护。
本项目尚未经过安全专家审核。其内部实现、数据格式和接口未来可能随时更改,恕不另行通知。
shellcd cmd/sneaker go build
sneaker 需要访问 AWS API,因此需要一组 AWS 凭证。它会依次查找 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量、默认凭证配置文件(如 ~/.aws/credentials),最后是 EC2 实例上的实例配置文件凭证。
通常,如果 aws 命令可用,sneaker 也应能正常工作。
如果您的 AWS 账户启用了多因素认证(强烈建议启用),可能需要通过 AWS_SESSION_TOKEN 环境变量提供令牌。
如果使用 IAM 实例角色,可能需要设置 AWS_REGION 环境变量指定使用的 AWS 区域(如 us-east-1)。
Sneaker 需要两个组件:一个 KMS 主密钥和一个 S3 存储桶。
您可以通过 AWS 控制台或最新版本的 aws 命令创建 KMS 密钥。创建后,将其 ID(UUID 格式)存储在 SNEAKER_MASTER_KEY 环境变量中:
shellexport SNEAKER_MASTER_KEY="9ed356fb-5f0f-4792-983d-91866faa3705"
与密钥类似,您可以通过 AWS 控制台或 aws 命令创建 S3 存储桶。您可以使用专用存储桶或公共存储桶中的目录,但建议执行以下两项操作:
使用 Private ACL。除了 sneaker 的加密控制外,访问控制对于防止安全漏洞至关重要。
启用访问日志记录,理想情况下记录到严格控制的安全存储桶中。尽管 Amazon 的 CloudTrail 为绝大多数 AWS 服务提供审计日志,但不包括 S3 访问。
完成后,设置 SNEAKER_S3_PATH 环境变量指定存储密钥的位置(如 s3://bucket1/secrets/):
shellexport SNEAKER_S3_PATH="s3://bucket1/secrets/"
(这会将加密的密钥存储在 bucket1 存储桶中,前缀为 secrets/。)
配置完成后,尝试列出密钥:
shellsneaker ls
这将打印所有已上传密钥的表格。由于尚未上传任何内容,表格将为空。
创建示例密钥文件并上传:
shellecho "This is a secret!" > secret.txt sneaker upload secret.txt example/secret.txt
此命令将使用 KMS 生成随机的 256 位数据密钥,用 AES-256-GCM 加密密钥,并将加密的密钥和 KMS 生成的加密数据密钥上传到 S3。运行 sneaker ls 应显示包含该文件的表格。
如果文件非常敏感,不应存储在磁盘上,可用 - 代替文件名,使 sneaker 从 STDIN 读取数据。
下载单个文件:
shellsneaker download example/secret.txt secret.txt
也可将多个文件下载到单个文件夹:
shellsneaker gather "example/*.txt,other/*.txt" output-dir/
删除文件:
shellsneaker rm example/secret.txt
要在机器上安装密钥,需将其打包成 tarball:
shellsneaker pack example/*,extra.txt example.tar.enc
此命令执行以下步骤:
下载并解密所有匹配模式 example/* 或 extra.txt 的密钥。
将所有解密的密钥打包到内存中的 TAR 文件。
使用 KMS 生成新数据密钥。
使用数据密钥通过 AES-GCM 加密 TAR 文件。
将加密的数据密钥和加密的 TAR 文件写入 example.tar.enc。
使用 - 作为输出路径将使 sneaker 将数据写入 STDOUT。
结果可安全存储和传输——只有有权限执行 KMS 密钥 Decrypt 操作的用户才能解密数据。
打包时可使用 --key-id 标志指定不同于 SNEAKER_MASTER_KEY 的 KMS 密钥:
shellsneaker pack example/* example.tar.enc --key-id=deb207cd-d3a7-4777-aca0-01fbceb4c927
这允许在无法访问存储密钥所用密钥的环境中解包密钥。
解包密钥运行以下命令:
shellsneaker unpack example.tar.enc example.tar
此命令执行以下步骤:
读取 example.tar.enc。
提取加密的数据密钥和加密的 TAR 文件。
使用 KMS 解密数据密钥。
解密 TAR 文件并将结果写入 example.tar。
使用 - 代替文件名将使 sneaker 从 STDIN 读取数据。同样,使用 - 作为输出路径将使 sneaker 将数据写入 STDOUT,例如可直接通过管道传输到 tar 进程。
KMS 支持加密上下文概念:用于加密的半结构化数据,解密时必须提供相同的数据。
sneaker 使用 SNEAKER_MASTER_CONTEXT 环境变量作为存储在 S3 中的密钥的默认加密上下文。此外,sneaker 还包含完整的 S3 路径(包括存储桶和前缀)。因此,S3 中的密钥不能重命名,只能删除并重新上传。
注意: 目前无法直接修改 SNEAKER_MASTER_CONTEXT 的内容。如需更改,需下载所有密钥并使用新上下文重新上传。
打包和解包密钥时,可通过命令行指定不同的加密上下文:
shellsneaker pack example/* secrets.tar.enc --context="hostname=web1.example.com,version=20"
解包时必须使用相同的上下文(hostname=web1.example.com,version=20):
shellsneaker unpack secrets.tar.enc secrets.tar --context="hostname=web1.example.com,version=20"
加密上下文中的所有数据通过 CloudTrail 记录,可跟踪特定密钥的打包和解包时间与位置。
常见的维护任务是密钥轮换。要轮换用于加密密钥的数据密钥,运行 sneaker rotate。它将下载并解密每个密钥,生成新数据密钥,并上传重新加密的副本。
要轮换用于每个密钥的 KMS 密钥,只需指定不同的 SNEAKER_MASTER_KEY 并运行 sneaker rotate。
所有数据使用随机 KMS 数据密钥和随机 nonce 通过 AES-256-GCM 加密。KMS 密钥的 ID 用作已认证数据。
最终结果由以下部分连接而成:
四字节头部:加密的 KMS 数据密钥长度(字节数),网络字节顺序。
加密的 KMS 数据密钥(原始格式,包含密钥 ID 的 Amazon 不透明格式)。
密钥的 AES-256-GCM 密文和标签。
!Sneaker 架构
威胁模型根据不同***者可能实现的目标定义。此列表旨在全面覆盖——如果某个实体能执行未列出的操作,则视为 Sneaker 存在安全漏洞。
总体而言,使用 Sneaker 存储的内容的机密性和完整性取决于 Sneaker 的完整性、KMS 的机密性和完整性,以及 S3 的完整性。
用户必须采取合理行动并维护自身利益,不得泄露密钥或允许未授权访问密钥。
用户必须运行未被篡改的 Sneaker 副本。
用户的计算机必须正常运行,未被***软件感染。
与 Amazon 的通信通过 TLS 确保机密性和完整性。
密钥管理服务 (KMS) 足够安全:其密钥不会泄露,随机数对***者不可预测,加密算法正确。
KMS 和 S3 的认证与访问控制功能安全。
AES-256 和 GCM 的安全保证有效。
泄露 KMS 的***者可:
创建伪造的密钥包。
解包打包的 tarball。
暂时或永久阻止解密密钥。
泄露 S3 的***者可:
物理夺取用户计算机(或泄露用户备份)或通过其他方式泄露计算机的***者可:
 提供持久性、机密性和完整性。
密钥存储在 S3 中,使用 AES-256-GCM 加密,并通过 KMS 生成的一次性数据密钥进行保护。
本项目尚未经过安全专家审核。其内部实现、数据格式和接口未来可能随时更改,恕不另行通知。
shellcd cmd/sneaker go build
sneaker 需要访问 AWS API,因此需要一组 AWS 凭证。它会依次查找 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量、默认凭证配置文件(如 ~/.aws/credentials),最后是 EC2 实例上的实例配置文件凭证。
通常,如果 aws 命令可用,sneaker 也应能正常工作。
如果您的 AWS 账户启用了多因素认证(强烈建议启用),可能需要通过 AWS_SESSION_TOKEN 环境变量提供令牌。
如果使用 IAM 实例角色,可能需要设置 AWS_REGION 环境变量指定使用的 AWS 区域(如 us-east-1)。
Sneaker 需要两个组件:一个 KMS 主密钥和一个 S3 存储桶。
您可以通过 AWS 控制台或最新版本的 aws 命令创建 KMS 密钥。创建后,将其 ID(UUID 格式)存储在 SNEAKER_MASTER_KEY 环境变量中:
shellexport SNEAKER_MASTER_KEY="9ed356fb-5f0f-4792-983d-91866faa3705"
与密钥类似,您可以通过 AWS 控制台或 aws 命令创建 S3 存储桶。您可以使用专用存储桶或公共存储桶中的目录,但建议执行以下两项操作:
使用 Private ACL。除了 sneaker 的加密控制外,访问控制对于防止安全漏洞至关重要。
启用访问日志记录,理想情况下记录到严格控制的安全存储桶中。尽管 Amazon 的 CloudTrail 为绝大多数 AWS 服务提供审计日志,但不包括 S3 访问。
完成后,设置 SNEAKER_S3_PATH 环境变量指定存储密钥的位置(如 s3://bucket1/secrets/):
shellexport SNEAKER_S3_PATH="s3://bucket1/secrets/"
(这会将加密的密钥存储在 bucket1 存储桶中,前缀为 secrets/。)
配置完成后,尝试列出密钥:
shellsneaker ls
这将打印所有已上传密钥的表格。由于尚未上传任何内容,表格将为空。
创建示例密钥文件并上传:
shellecho "This is a secret!" > secret.txt sneaker upload secret.txt example/secret.txt
此命令将使用 KMS 生成随机的 256 位数据密钥,用 AES-256-GCM 加密密钥,并将加密的密钥和 KMS 生成的加密数据密钥上传到 S3。运行 sneaker ls 应显示包含该文件的表格。
如果文件非常敏感,不应存储在磁盘上,可用 - 代替文件名,使 sneaker 从 STDIN 读取数据。
下载单个文件:
shellsneaker download example/secret.txt secret.txt
也可将多个文件下载到单个文件夹:
shellsneaker gather "example/*.txt,other/*.txt" output-dir/
删除文件:
shellsneaker rm example/secret.txt
要在机器上安装密钥,需将其打包成 tarball:
shellsneaker pack example/*,extra.txt example.tar.enc
此命令执行以下步骤:
下载并解密所有匹配模式 example/* 或 extra.txt 的密钥。
将所有解密的密钥打包到内存中的 TAR 文件。
使用 KMS 生成新数据密钥。
使用数据密钥通过 AES-GCM 加密 TAR 文件。
将加密的数据密钥和加密的 TAR 文件写入 example.tar.enc。
使用 - 作为输出路径将使 sneaker 将数据写入 STDOUT。
结果可安全存储和传输——只有有权限执行 KMS 密钥 Decrypt 操作的用户才能解密数据。
打包时可使用 --key-id 标志指定不同于 SNEAKER_MASTER_KEY 的 KMS 密钥:
shellsneaker pack example/* example.tar.enc --key-id=deb207cd-d3a7-4777-aca0-01fbceb4c927
这允许在无法访问存储密钥所用密钥的环境中解包密钥。
解包密钥运行以下命令:
shellsneaker unpack example
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务