在智能卡中隔离敏感数据
通过使用智能卡存储身份验证信息或数字签名机制,您可以向 Windows CE 设备添加安全层。可以编写定制的 CryptoAPI 提供者,使用智能卡的功能实现安全信息存储。
Windows CE 智能卡子系统通过智能卡服务提供者 (SCSP) 支持 CrytoAPI,SSCP 是允许访问特定服务的 DLL。该子系统在智能卡读卡器硬件和应用程序之间提供链接。通常,Windows CE 不提供 SCSP,而由智能卡供应商提供相应的 SCSP。但是,Windows CE 提供下表中描述的接口。
| 子系统组件 |
文件 |
说明 |
| 资源管理器 |
Scard.dll |
使用 Win32 API 管理对多个读卡器和智能卡的访问。 |
| 资源管理器帮助器库 |
Winscard.dll |
为使用智能卡和智能卡读卡器提供 PC/SC 服务。 |
| 智能卡读卡器帮助器库 |
Smclib.lib |
提供通用智能卡驱动支持例程,以及所需特定驱动程序的附加 T=0 和 T=1 协议支持。 |
| 智能卡读卡器驱动程序示例 |
Pscr.dll
bulltlp3.dll
stcusb.dll |
SwapSmart PC 读卡器驱动程序。
串行读卡器驱动程序。
通用串行总线 (USB) 读卡器驱动程序。 |
典型的智能卡系统包括应用程序、处理智能卡读卡器和应用程序之间的通信的子系统、读卡器以及智能卡。下图显示了基于 Windows CE 的智能卡系统的体系结构。

图 3:基于 Windows CE 的智能卡系统的体系结构
在一个独立的硬件中实现智能卡 CryptoAPI 服务提供者的部分功能将保证密钥和操作的安全性,因为:
- 提供防止篡改的存储区,以便保护个人信息的私人密钥和其他表单。
- 隔离注重安全性的计算,这些计算涉及系统其他部分的身份验证、数字签名和密钥交换。
- 使凭据和其他私人信息具备便携性。
在使用智能卡的组织中,用户实际不必记住任何密码(只有一个个人识别号或 PIN),并且出于其他安全性目的(例如电子签名的电子邮件),他们可以使用相同的证书。
唯一标识设备
OEM 可以为 Windows CE 设备提供唯一的识别标记,并使应用程序可以访问它。例如,您可能需要标记运行您的 OS 映像的每个蜂窝电话,以便达到记帐和安全性的目的。
Windows CE 使用 DEVICE_ID 结构来保存唯一的设备识别号。OEM 适配层中的输入/输出控制 IOCTL_HAL_GET_DEVICEID 返回指定给该 Windows CE 设备的当前 DEVICE_ID。有关详细信息,请参阅 Platform Builder 文档的“操作系统开发”一节中的“为应用程序提供平台信息”。
使用受保护的内核模式
在运行线程时使用全内核模式将使整个系统易受攻击,因为 Windows CE 绕过了安全性特性。在全内核模式中,应用程序可以访问系统中的任何物理内存。这将使系统对恶意应用程序保持开放,不能防止它们获取特权信息和加密代码,或者删除文件。
尽管在全内核模式下运行时性能将得到提高,但这在一个开放的未受保护的环境中是不可接受的。您可以禁用全内核模式;在 Config.bib 文件中设置 ROMFLAGS 的第二个字节。根据其他标志的设置,ROMFLAGS 的值可能会有所不同。
在拨号启动加载程序中使用数字身份验证
拨号启动加载程序是一个存储在 ROM 中的程序,该 ROM 用于通过快闪内存或远程服务器升级 OS 映像文件 (Nk.bin)。要确保下载的 OS 映像的完整性,您可以使用数字密钥来签名和验证 OS 映像文件。拨号启动加载程序通过 Microsoft CryptoAPI 使用非对称散列算法 (CALG_SHA) 来验证数据。非对称散列算法将生成 160 位散列值。
Platform Builder 3.0 为数字身份验证提供下列工具:
- Makekey.exe,用于创建公共密钥/私人密钥对。
- Mksigs.exe,用于签名 OS 映像文件。
- Addsigs.exe,用于向清单文件中附加签名。
在 OS 映像下载进程中,拨号启动加载程序从清单文件中提取签名,并验证每个 OS 映像文件的可靠性。如果验证失败,将暂停下载进程并通知用户。