frandustry/CryptoWrapper
GitHub: frandustry/CryptoWrapper
CryptoWrapper 是一个更安全、更简洁的 OpenSSL Go CLI 封装器,为现代密码学、中国商用密码和后量子算法提供密钥生成、签名、加密和密钥协商等操作命令。
Stars: 1 | Forks: 0
# CryptoWrapper
[中文说明](README.zh-CN.md)
CryptoWrapper (`cw`) 是一个更安全、更简单的 OpenSSL 的 Go CLI 包装器。它为现代经典密码学、中国商用密码以及后量子密钥生成、签名、密钥协商和标准 CMS 文件加密提供了简短的命令。
## 环境要求
- Go 1.25 或更新版本。
- OpenSSL 3.6.3+ 或 4.0.1+。
- 用于默认 CGO 构建的 OpenSSL 头文件、库和 `pkg-config`。
- macOS 或 Linux。
OpenSSL 3.6.0 到 3.6.2 版本会被拒绝,因为 3.6.3 包含与 CMS 处理相关的安全修复。`openssl` 可执行文件和链接的 `libcrypto` 必须使用相同的主/次版本系列。
带有 Homebrew 的 macOS:
```
brew install go openssl@3 pkg-config
export PATH="$(brew --prefix openssl@3)/bin:$PATH"
export PKG_CONFIG_PATH="$(brew --prefix openssl@3)/lib/pkgconfig"
```
Linux 发行版必须提供 OpenSSL 3.6.3+ 开发文件。如果发行版软件包较旧,请构建受支持的 OpenSSL 版本,并将 `PATH`、`PKG_CONFIG_PATH` 和平台库路径指向该安装路径。
## 构建和安装
```
git clone https://github.com/frandustry/CryptoWrapper.git
cd CryptoWrapper
make check
make build
./bin/cw doctor
```
安装到你的 Go 二进制文件目录:
```
make install
```
生成 shell 补全脚本:
```
make completions
```
支持 `CGO_ENABLED=0 go build ./cmd/cw` 构建。该构建可以执行密钥、证书、签名、接收者 CMS、哈希和兼容性操作,但有意拒绝密码和原始对称密钥 CMS 命令。
## 预编译版本
推送诸如 `v0.1.0` 之类的语义版本标签会自动为 AMD64 和 ARM64 架构的 Linux 和 macOS 构建并发布归档文件。
每个版本都包含独立的 SHA-256 校验和文件以及一个汇总的 `SHA256SUMS` 文件。
这些二进制文件仍然需要如上所述的兼容 OpenSSL 安装环境。发布资产由 GitHub Releases 保留,而不是作为长期的 GitHub Actions 制品。
## 快速开始
生成加密的 RSA 密钥对:
```
cw keygen rsa \
--out alice.key.pem \
--public-out alice.pub.pem
```
对于脚本,请将密码存储在权限为 `0600` 的文件中:
```
cw keygen ed25519 \
--passphrase-file private-passphrase.txt \
--out signing.key.pem \
--public-out signing.pub.pem
```
生成自签名证书:
```
cw certgen \
--key alice.key.pem \
--subject /CN=Alice \
--days 365 \
--out alice.crt.pem
```
为一个或多个证书接收者加密文件:
```
cw encrypt \
--in document.pdf \
--recipient alice.crt.pem \
--recipient bob.crt.pem \
--out document.pdf.cms
cw decrypt \
--in document.pdf.cms \
--cert alice.crt.pem \
--key alice.key.pem \
--out document.pdf
```
生成对称密钥并使用经过认证的 CMS 加密:
```
cw symkey aes-256 --out vault.key
cw sym-encrypt --key vault.key --in archive.tar --out archive.tar.cms
cw sym-decrypt --key vault.key --in archive.tar.cms --out archive.tar
```
基于密码的认证 CMS:
```
cw pass-encrypt \
--passphrase-file vault-passphrase.txt \
--in notes.txt \
--out notes.txt.cms
cw pass-decrypt \
--passphrase-file vault-passphrase.txt \
--in notes.txt.cms \
--out notes.txt
```
签名和验证:
```
cw sign --key signing.key.pem --in release.tar.gz --out release.tar.gz.sig
cw verify --key signing.pub.pem --in release.tar.gz --signature release.tar.gz.sig
```
哈希和派生:
```
cw hash sha3-256 --in release.tar.gz
cw derive --key alice-x25519.key.pem --peer-key bob-x25519.pub.pem --out shared.secret
```
## 后量子 CMS 接收者
ML-KEM 接收者证书需要一个具有签名能力的签发密钥。以下命令创建一个 ML-DSA CA 并签发一个 ML-DSA 证书:
```
cw keygen ml-dsa-65 --out pq-ca.key.pem --public-out pq-ca.pub.pem
cw certgen --key pq-ca.key.pem --subject /CN=PQ-CA --out pq-ca.crt.pem
cw keygen ml-kem-768 --out recipient.key.pem --public-out recipient.pub.pem
cw certissue \
--ca-cert pq-ca.crt.pem \
--ca-key pq-ca.key.pem \
--public-key recipient.pub.pem \
--subject /CN=PQ-Recipient \
--out recipient.crt.pem
```
生成的证书可以传递给 `cw encrypt --recipient`。
## 算法和策略
`cw algorithms keys|ciphers|digests|signatures` 报告当前活动的 OpenSSL provider 实际暴露的内容。`--json` 会生成稳定的 schema-v1 机器接口。
精选的密钥支持包括:
- RSA、RSA-PSS、P-256/P-384/P-521/secp256k1 EC。
- Ed25519、Ed448、X25519、X448。
- SM2、SM3 和 SM4。
- ML-KEM-512/768/1024 和 ML-DSA-44/65/87。
- Provider 暴露的 SLH-DSA 变体。
- AES、ChaCha20、Camellia、ARIA 和 SM4 对称密钥大小。
DES、3DES、RC2、RC4、Blowfish、CAST、IDEA、DSA、MD5 和 SHA-1 需要 `--allow-legacy`。未经认证的 OpenSSL `enc` 文件还需要显式指定 `cw compat ... --allow-unauthenticated`。
## 密钥处理
- 默认会对私钥进行加密。`--no-passphrase` 是显式指定的。
- 密码从隐藏的终端、`--passphrase-file` 或 `--passphrase-env` 读取;没有字面意义上的密码 flag。
- 密码和原始密钥 CMS 操作直接使用 `libcrypto`,确保密钥不会出现在进程参数中。
- 私钥和对称密钥的权限模式为 `0600`。
- 输出会写入同目录的临时文件,然后原子性地安装到位。除非使用 `--force` 显式替换常规文件,否则现有的文件和符号链接将被拒绝。
- 认证失败不会安装不完整的明文输出。
## 稳定的退出代码
| 代码 | 含义 |
| ---: | --- |
| 0 | 成功 |
| 1 | 一般操作或 I/O 失败 |
| 2 | 无效的使用或不安全的策略请求 |
| 3 | 缺失/不支持的依赖或算法 |
| 4 | 签名验证或解密认证失败 |
## 许可证
CryptoWrapper 采用 `GPL-3.0-only` 许可。请参阅 [LICENSE](LICENSE) 和 [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md)。
标签:EVTX分析, Go语言, OpenSSL, 后量子密码学, 国密算法, 安全测试工具, 密码学, 手动系统调用, 日志审计, 程序破解