openssl/openssl at cdcb6ad · static read-only analysis · why-not-rust method 2.0openssl/openssl @ cdcb6ad · 只读静态分析 · why-not-rust 方法 2.0
Repository: github.com/openssl/openssl at commit cdcb6ad, shallow clone, 6,152 tracked files. Scope: the whole repository, with crypto/asn1 and crypto/x509 as the candidate extraction components. Sampling: 808,625 lines of C across 1,695 files; and, on a .c-and-.h basis, crypto/ 350,280, ssl/ 115,280, providers/ 87,318 and test/ 214,064. The bases differ. The per-directory figures count .c and .h together, the 808,625 total is .c only, and crypto/asn1 (16,350) and crypto/x509 (33,494) are quoted .c-only so the 6.2% share compares like with like. Exported-symbol manifests were read as one symbol per line: util/libcrypto.num (5,729) and util/libssl.num (628). No build, test, benchmark or network call was run against the project, and no advisory database was ingested; that absence is the gap this report reports. Objective: eliminate the memory-unsafety class where OpenSSL decodes attacker-controlled input without breaking the exported ABI or FIPS validation. User-supplied facts: none. No Amdahl calculation appears; the objective is safety, and substituting a line share for a time share would be a method error. Confidence is LOW and robustness INDETERMINATE by the method's own definitions, because two of the four gates are UNKNOWN and the candidate scopes span two orders of magnitude. This is a structured decision protocol, not a statistical predictor. DEFER–MEASURE here means the evidence to choose does not exist yet. It does not mean Rust cannot help.仓库:github.com/openssl/openssl,commit cdcb6ad,浅克隆,6,152 个受版本控制的文件。范围:整个仓库,候选抽取组件是 crypto/asn1 与 crypto/x509。采样:1,695 个文件、808,625 行 C;按 .c 与 .h 合计的口径,crypto/ 350,280 行,ssl/ 115,280 行,providers/ 87,318 行,test/ 214,064 行。口径不一样。目录级数字是 .c 与 .h 合计,808,625 这个总数只算 .c,crypto/asn1(16,350)与 crypto/x509(33,494)也只算 .c,这样 6.2% 才是同口径比较。导出符号清单按每行一个符号读取:util/libcrypto.num 5,729 个,util/libssl.num 628 个。没有对项目做过任何构建、测试、基准或网络调用,也没有导入任何 advisory 数据库;这份缺失正是本报告要报告的缺口。目标:在 OpenSSL 解析攻击者可控输入的地方消除内存不安全这一缺陷类,同时不破坏导出 ABI 与 FIPS 验证。用户提供的事实:无。本报告不做 Amdahl 计算;目标是安全,用行数占比顶替时间占比属于方法错误。按方法自身的定义,confidence 为 LOW,robustness 为 INDETERMINATE:四道门里有两道停在 UNKNOWN,候选范围跨了两个数量级。这是一套结构化决策协议,不是统计预测器。这里的 DEFER–MEASURE 是说,用来做选择的证据还不存在。它不是说 Rust 帮不上忙。
| What we don't know证据缺口 | What it would change会改变什么 |
| Advisory history split by component and root cause按组件与根因拆分的 advisory 历史 | The gap that decides the rest. While it is missing, G2 and G3 stay UNKNOWN and no Rust scope gets authorized — including the small one this report thinks is most likely right.决定其余一切的那个缺口。只要它还缺着,G2 和 G3 就停在 UNKNOWN,任何 Rust 范围都拿不到授权,包括报告认为最可能正确的那个小范围。 |
| FIPS boundary impact for the candidate component候选组件对 FIPS 边界的影响 | If the component sits inside the validated module, re-validation cost may make even the small extraction unfundable, and the answer stays STAY.如果这个组件落在已验证模块之内,重新验证的成本可能连那次小规模抽取都撑不住,结论就仍然是 STAY。 |
| Ownership and dual-run plan for any Rust scope任何 Rust 范围的负责人与双跑方案 | Without named owners and a rollback path, G4 stays FAIL for every migration option, whatever the attribution turns out to show.没有指名的负责人和回滚路径,G4 对每个迁移方案都停在 FAIL,归因最后查出什么都一样。 |