XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

独立内核 BC 熵接口移植

原始 BC 2.7.0 net6.0 DLL 保持在 NuGet 缓存中,SHA256 为 ef92fc661e8d7ba8ec4d39a7cdfcdba41f14cb327f0d24fe79d0b5bb428899b5。 包归档、MIT 与来源提交仍见 Source/XFESystem.Tls/DependencyManifest.json。

实际固定 Linux .NET 10 的 RandomNumberGenerator.Fill 调用 OpenSSL 的 CryptoNative_GetRandomBytes,并触发 Interop.Crypto 的 OpenSSL 静态初始化。 它不会使用已经实现的 SystemNative_GetCryptographicallySecureRandomBytes。 BC 的静态 SecureRandom.AutoSeed 在解析公钥时也会进入此路径,因此只给 TLS 显式传入随机委托不够。此移植不伪造 OpenSSL 初始化或关闭证书检查。

仅 NativeApplication.csproj 导入该 target;普通宿主 TLS 使用原包。Cecil 在本仓库私有应用输出中精确替换原包的 12 个 RNG 调用:4 个 Fill、2 个 Create、 5 个 GetBytes 和 1 个 Dispose。调用栈参数与返回值保持一致,全部方法的其余 IL、 变量、分支及 EH 区间在写出后复核。证书、PKIX、TLS 与密码算法主体不改。

独立适配库只依赖 BCL 类型,唯一 PInvoke 是 xfe_pal::xfe_runtime_random_fill(byte*, uint)。返回必须为 1;其余结果清空整段 调用方缓冲区并抛 CryptographicException,不使用宿主 RNG 或时间回退。请求 上限为 1 MiB;数组范围由 Span 检查。Create 产生受控的硬件 RNG 子类;显式注入 其他 RNG 会被拒绝,不静默忽略调用者策略。生命周期由该受控实例检查。

工具只接受锁定的原 DLL 或与回执完全相符的派生 DLL,拒绝全局缓存与 junction 路径;先写临时文件并审计,再替换私有输出。回执保存原/派生 DLL、适配库、工具、 源码和锁文件 SHA256 及每个调用的原/新方法。原包签名不被冒充为派生文件的签名。 回执的 GuestAcceptancePassed=false 不代表原生 TLS 已验收。

NativeApplication 的 ProjectReference 和显式 AdditionalFiles 同时把适配库、工具 源码、锁和 target 纳入真实构建来源链;ILC 从同一应用目录引用派生 BC 与适配库。 构建仍需真实熵 C 对象和 direct PInvoke xfe_pal,不能单独拿派生 DLL 在普通宿主 调用然后期待宿主随机源自动替代。