Skip to content

About

Windows minifilter transparent encryption driver (AES-256-XTS, length-preserving, NTFS EA marking) - private preview

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FileEncrypt — Windows Minifilter 透明加密驱动

按目录范围(Vault,默认 C:\EncryptVault)的透明加解密:写入自动加密、读取自动解密, 对上层应用完全透明。文件大小不变、无文件头、兼容内存映射(MMF)。

English: README.en.md

特性

  • 无头保长格式:AES-256-XTS,密文与明文等长(512B 数据单元,tweak=单元序号); 文件身份标记写在 NTFS EA(FILEENCRYPT=1/2),不需要大小虚拟化。
  • 只变换 Paging/Non-cached 路径:缓存管理器(Cc)里始终是明文, cached I/O、MMF、Prefetch 天然一致——这是架构的核心选择,见 docs/ARCHITECTURE.md。
  • 按文件派生密钥:FEK = HMAC-SHA256(MasterKey, "FEK1"/"FEK2" ‖ FileId); 主密钥只在内存与密钥服务(DPAPI 封装)中出现,不随文件落盘。
  • CTS 尾块(IEEE P1619 §5.2 密文窃取):任意长度文件的末块可完整往返,见 docs/FORMAT.md。
  • 故障方向明确:写拒绝、读放行("响动"优于"静默损坏");密钥缺失/服务故障时 Vault 进入只读语义而不是产出坏数据。
  • 已通过:Driver Verifier 全开、100MB 流式、2h soak、断电一致性(硬复位 ×6)、 兼容矩阵(notepad/PowerShell/robocopy/certutil/.NET Copy/硬链接/7-Zip/MMF)、 宿主独立 XTS 仲裁(tools/xts_arbiter.py)。

组件

路径 说明
driver/ FileEncrypt.sys — Minifilter(Altitude 370040 为测试占位,生产需向微软申请)
app/fekctl.c fekctl.exe — 控制台:info / setkey / selftest / upgrade / move / flush / evacuate
app/keysvc.c FileEncryptKeySvc.exe — 主密钥生命周期服务(DPAPI 持久副本 + 开机注入 + 巡检重注入)
shared/ 内核/用户态共享协议头(fe_protocol.h)
tools/ 宿主侧测试:XTS 向量(xtstest)、桥表单测(fcbmaptest)、独立仲裁器(xts_arbiter.py)
build/ 构建 / 签名 / VM 部署脚本(vm_*.bat)
tests/ guest 内验证套件与探针(PowerShell)
docs/ ARCHITECTURE.md / FORMAT.md / PLAN.md
plans/、docs/evidence/ 开发过程完整留档(验收判据、每轮实证、失败与更正)

构建

前提(版本可按需调整):

  • Visual Studio(含 C++ 工具集;本仓库钉的是 v145 与平台版本 10.0.28000.0)
  • Windows Driver Kit(WDK,提供 WindowsKernelModeDriver10.0 工具集与 signtool)
  • 运行库静态链接(产物可直接拷到无 VC++ 运行时的机器)
build\build_debug.bat      rem 驱动 + fekctl + keysvc + 宿主单测(产物统一到 x64\Debug\)
build\sign.cmd Debug       rem 自签测试签名(证书名取 FE_TEST_CERT,默认 FileEncrypt-test)

build/build_debug.bat 里写死了本机的 VS 安装路径与 vcvars 位置——换机器请先改这两行。 driver/FileEncrypt.vcxproj 的平台版本 / 工具集同理。

测试(需要一个 Windows 测试虚拟机)

开发循环通过 VMware Workstation 的 vmrun 驱动一台测试 VM(部署/触发/取证)。 真实的主机路径与 VM 凭据不随仓库分发:复制 build\vmenv.example.bat 为 build\vmenv.local.bat(已被 gitignore)并填入你自己的值。

build\vm_deploy.bat            rem 卸载→推送→注册→加载→状态
build\vm_ctl.bat info          rem 远端跑 fekctl info 并回传
tests\fe_verify_m3.ps1         rem (guest 内)端到端透明加解密套件
tests\fe_m53.ps1               rem (guest 内)M5-3 安全收口套件
tests\fe_verify_d14.ps1        rem (guest 内)工具兼容矩阵

guest 侧脚本里的 C:\Users\wwa\Desktop\driverTest\FileEncrypt-test 是本项目测试 VM 的固定工作目录(由部署脚本创建)。用你自己的 VM 时,在建好同名账号/目录后可用, 或按需批量替换该路径。

宿主侧单测随构建自跑:

x64\Debug\xtstest.exe        rem NIST XTS-AES 向量 + 往返
x64\Debug\fcbmaptest.exe     rem FsContext 桥表逻辑回归
python tools\xts_arbiter.py --key <MK> --fid <FileId> --slices <dir>   rem 盘面独立仲裁

密钥管理与安全

  • 测试密钥警告:tests/ 与 build/ 中的 00112233…3210 是公开的测试密钥 (为了测试可复现而固定),任何生产/试用环境都必须换成随机钥: FileEncryptKeySvc.exe --init(推荐,DPAPI 保存)或 fekctl setkey --random。
  • 命令行传钥可见性(2026-09-30):fekctl setkey --hex <chars> 与 FileEncryptKeySvc --init --hex <chars> 的密钥会整串出现在进程命令行(进程列表/ 事件日志可见)。敏感环境用 stdin 形式:fekctl setkey --hex-stdin、 FileEncryptKeySvc --init --hex-stdin(管道或交互输入,不落 argv,本地副本用后即擦)。
  • 主密钥丢失 = 已加密数据不可读。使用密钥服务时请备份 %ProgramData%\FileEncrypt\master.key(或按规程先 fekctl evacuate)。
  • 密钥文件安全模型(2026-09-28 加固):%ProgramData%\FileEncrypt 目录与 master.key 由显式安全描述符保护(仅 SYSTEM + Administrators);--init 走 临时文件 + 原子换位,对已存在的 master.key 显式拒绝(换走旧文件再 init, 不做无提示覆盖);服务加载侧校验文件属主(非 SYSTEM/Administrators 拒载)。 需管理员权限运行 --init(属主归一依赖提升令牌)。
  • 协议 v33 部署约束:驱动、fekctl、keysvc 必须同批部署(版本握手会挡下旧组合); keysvc 巡检除 presence 外还会比对密钥指纹——驱动里的密钥被第三方(错误钥)覆盖时 会在一个轮询周期内被发现并覆盖回本地钥。
  • 卸载/停服务/换驱动之前必须 fekctl flush <vault-dir>(或 evacuate): 尚未落盘的写会在过滤器缺席区间被明文写回(见 docs/FORMAT.md §5.5③-4)。
  • 威胁模型、已知限制(A 类)与操作规程见 docs/FORMAT.md 与 plans/FE-M5-CLOSURE.md 的 runbook 一节。

状态

M0–M5 已完成并通过机内验证(构建/签名/热装卸、透明加解密、文件生命周期与 EA、 稳定性/性能/安全、断电一致性)。尚未完成:生产 altitude 与正式签名链(见 docs/C2-ALTITUDE-APPLICATION-NOTES.md)、 多 Vault/策略层(M6,按需)。

plans/ 与 docs/evidence/ 保留完整开发过程(含失败轮次与事后更正——请把它们当作 "证据链"阅读,而不是"产品文档")。

第三方组件

组件 用途 说明
WDK / Visual Studio 构建 微软工具链
VMware Workstation(vmrun) 测试 VM 编排 商业软件,仅开发期使用
WinDbg / KDNET 内核调试 开发期诊断
PyCryptodome tools/xts_arbiter.py 的 AES 原语 public domain;仅宿主仲裁器使用
7-Zip(7zr) 兼容性测试中被调用 未随仓库分发

License

MIT © 2026 FileEncrypt contributors

内核驱动依赖微软 WDK 构建与签名,其使用另受 WDK 许可约束;测试签名证书仅供开发环境 使用(正式分发需要 altitude 分配与微软签名链,见上方"状态"一节)。

About

Windows minifilter transparent encryption driver (AES-256-XTS, length-preserving, NTFS EA marking) - private preview

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages