版本: 1.0.0
最后更新: 2025-12-10
本项目遵循以下核心安全原则:
- 零信任 (Zero Trust): 不信任任何网络传输的数据,所有通信必须经过验证。
- 私钥不离身: 私钥永远存储在 Android TEE (Trusted Execution Environment) 中,绝不传输。
- 基于挑战-响应 (Challenge-Response): 绝不传输静态密码,每次解锁使用一次性随机数 (Nonce)。
- Windows Hello 集成: 使用微软官方 CDF (Companion Device Framework) 框架,不使用模拟键盘输入等不安全方式。
- 密钥存储: 使用
AndroidKeyStore系统。 - 密钥类型: RSA 2048-bit 或 NIST P-256 (ECC)。
- 保护级别:
KeyGenParameterSpec.Builder.setIsStrongBoxBacked(true)(如果硬件支持 StrongBox)。setUserAuthenticationRequired(true): 强制要求用户生物识别 (指纹/人脸) 才能使用私钥签名 (可选配置)。
- 生命周期:
- App 安装时生成密钥对。
- App 卸载或清除数据时密钥销毁。
- 私钥不可导出 (
setExported(false)is default for private keys).
- 公钥存储:
- 在设备注册阶段,Windows 获取 Android 端的公钥。
- 公钥与
DeviceId绑定,存储在 Windows CDF 框架的受保护存储区中。
- TPM 集成: Windows Hello 可能会利用 TPM 保护认证凭据。
- 发现: Windows 扫描到 Android 设备。
- 交换: Android 发送公钥 (Public Key) 和设备 ID 给 Windows。
- 注册: Windows 调用
SecondaryAuthenticationFactorRegistration.RequestStartRegisteringDeviceAsync()。- 将 Android 设备 ID 和公钥注册到 Windows 系统。
- Windows 可能会要求用户输入一次 PIN 码或密码以确认添加信任设备。
- 触发: Windows 检测到蓝牙信号强度满足阈值 (RSSI > -60dBm)。
- 挑战生成:
- Windows 调用
SecondaryAuthenticationFactorAuthentication.StartAuthenticationAsync()。 - 系统生成一个加密的
Nonce(挑战码)。
- Windows 调用
- 传输: Windows 通过 BLE Characteristic (0xAA11) 将
Nonce发送给 Android。 - 签名:
- Android 收到
Nonce。 - (可选) Android 弹出生物识别提示。
- 验证通过后,Android 使用 Keystore 中的 私钥 对
Nonce进行签名 (SHA256withRSA / SHA256withECDSA)。
- Android 收到
- 响应: Android 将签名结果通过 BLE Characteristic (0xAA12) 发回 Windows。
- 验证:
- Windows 接收签名。
- 调用
SecondaryAuthenticationFactorAuthentication.FinishAuthenticationAsync()。 - Windows 系统内部验证签名是否由注册的公钥生成。
- 结果:
- 验证成功 -> 解锁 Windows 会话。
- 验证失败 -> 保持锁定,记录安全事件。
| 威胁 | 描述 | 防御措施 |
|---|---|---|
| 重放攻击 (Replay Attack) | 攻击者录制之前的签名数据,试图再次解锁。 | Nonce 机制: 每次解锁的 Nonce 都是随机且唯一的,旧的签名对新的 Nonce 无效。 |
| 中间人攻击 (MITM) | 攻击者拦截 BLE 通信,篡改数据。 | 1. BLE Bonding: 强制使用蓝牙配对加密链路。 2. 签名验证: 攻击者没有私钥,无法伪造有效的签名。 |
| 设备盗窃 | 手机被盗。 | 生物识别强制: 配置 Android Keystore 要求指纹验证才能签名,窃贼无法使用私钥。 |
| 蓝牙嗅探 | 攻击者监听蓝牙信号。 | BLE 链路层加密;且传输的数据中不包含任何密码或敏感个人信息,只有随机数和签名。 |
| 恶意 App 伪装 | 恶意 Windows App 伪装成锁屏服务。 | UWP 应用需声明 windows.authentication.web 权限,且需经过微软商店审核或企业签名;CDF 框架由系统级服务 LogonUI 调用。 |
- Namespace:
Windows.Security.Authentication.Identity.Provider - 关键类:
SecondaryAuthenticationFactorRegistration: 用于注册配套设备。SecondaryAuthenticationFactorAuthentication: 用于执行认证流程。SecondaryAuthenticationFactorDevicePresence: 用于通知系统设备是否在附近 (可选)。
- Class:
java.security.KeyStore - Generator:
android.security.keystore.KeyGenParameterSpec - Signature:
java.security.Signature
注意: 本文档是安全实现的基准,任何代码实现必须严格遵守上述流程。