检测椭圆曲线私钥为平凡小整数的 X.509 证书(公钥点 Q = d*G,其中 d 很小)——即 eMudhra 误签发类别。 曲线:P-256、P-384、P-521。
p4mon/ — 生产监控器:内存中的 Rust 检查器、CT 日志跟踪器、systemd 单元common/ — targets.tsv、answers.tsv(已知答案向量)benchmarks/ — rust c cpp go 检测器实现reference/ — Python 检测器以及 CCADB / BSGS 扫描器| 指标 | 数值 |
|---|---|
| 扫描证书数 | 约 2.2 亿次观测/天 → 约 1100 万个不同密钥(90% 跨日志去重) |
| 发现的弱密钥 | 0 |
| CPU | 单核约 5%(硬性限制为 1 核,SCHED_IDLE) |
| 内存 | 约 580 MB(峰值 642 MB,上限 1 GB) |
| 网络 | 入站约 30–40 Mbit/s(约 300–430 GB/天);出站可忽略不计 |
| 磁盘 I/O | 几乎无(表从页缓存一次性加载;仅在命中时写入发现结果) |
随 CT 签发量扩展。在 AWS m7g.large(aarch64)、16 个日志上测得。
cargo build --release --manifest-path p4mon/Cargo.toml
cd p4mon
curl -fsSo loglist.json https://www.gstatic.com/ct/log_list/v3/log_list.json
./target/release/p4mon build table.bin # 预计算 d*G,d=1..1_000_000(约 80 秒,仅一次)
./target/release/p4mon selftest # 已知答案校验
./target/release/p4mon cert <file> # -> WEAK d=<n> | clean
python3 ct_tail_live.py | ./target/release/p4mon stream table.bin # 实时跟踪
这些单元假定代码检出位于 /home/ec2-user/p4-inventory/p4mon;否则请调整路径。
cd p4mon
python3 -m pip install --user apprise # 投递库(告警)
mkdir -p ~/.config/p4mon && cp apprise.txt.example ~/.config/p4mon/apprise.txt
chmod 600 ~/.config/p4mon/apprise.txt # 然后编辑:添加你的目标 URL
sudo cp systemd/p4mon-*.service systemd/p4mon-*.path systemd/p4mon-*.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now p4mon-ct.service p4mon-find.path p4mon-report.timer
p4mon-ct 在 loglist.json 缺失时会自动获取(ExecStartPre)。告警(发现告警 + 每日告警)通过 Apprise 投递到你在 ~/.config/p4mon/apprise.txt 中列出的任意目标——电子邮件、ntfy、Pushover、Telegram、Slack、webhook 等(参见 apprise.txt.example)。不涉及 LLM。若未配置任何目标,报告将记录到 journal 而非发送。