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, 后量子密码学, 国密算法, 安全测试工具, 密码学, 手动系统调用, 日志审计, 程序破解