私钥保存形式主要有文件、密码设备和软件系统三种。
当用文件形式保存私钥时,私钥的安全性通常用口令保护,同时基于口令可加密存储私钥文件。当系统用私钥签名或解密时,需把该私钥文件读入内存或密码模块中进行密码运算。为保护私钥的安全性,通常使用口令加密保护私钥文件。
当用密码设备形式保存私钥时,密码设备可提供安全机制保护私钥存储与访问的安全性。
当用软件系统方式保存私钥时,私钥完全由软件系统管理,其安全性完全依赖于软件系统,不同系统下私钥存储形式和安全性可能不同。
1.PKCS#8文件形式
PKCS#8规定了私钥单独以文件形式保存时的具体格式。
2.PKCS#12文件格式
当私钥用PKCS#12形式保存时,常用的文件后缀为pfx或p12。
(1)PFX
PKCS#12规定了私钥和证书以单个文件形式保存时的具体格式。
(2)macData
macData包含消息认证码mac及相关参数macSalt、iterations,采用口令方式保证authSafe数据完整性。
(3)authSafe
authSafe包含私钥和证书数据,采用密码消息ContentInfo类型。authSafe的contentType字段可是signedData类型,也可是data类型。当为signedData类型时,基于公钥保证数据完整性;当用data类型时,基于口令确保完整性,消息认证码信息保存在macData中。authSafe的content字段直接(data类型)或间接(signedData类型)包含AuthenticatadSafe类型的编码结果。
(4)SafeContent
(5)常用SafeBag类型
常用SafeBag类型包括:keyBag、pkcs8ShroudedKeyBag、certBag、crlBag、secretBag、safeContentsBag等。
3.Java Keystore文件形式
JDK 1.4已经支持X.509数字证书标准。Java平台把密钥库当做密钥(公私钥对)与证书的资源管理库。密钥库物理上是个文件,缺省名是keystore。由一个别名来区分密钥和证书,每个别名均被唯一的口令保护。密钥库本身也受口令保护。
当私钥用Java Keystore形式保存时,常用的文件后缀为jks。
Keystore文件可由keytool工具与Java类两种方式访问或操作 。
keytool是JDK自带工具,密钥库中的公私钥对与数字证书管理很方便。
4.密码设备形式
密码设备是指以硬件形式存在的密码模块。
该模式下,私钥保存在密码设备中,具体包括以下几个方面。
(1)密码设备分类
(2)私钥存储方式
(3)私钥存储安全性
(4)私钥访问方式
(5)私钥访问安全性
5.软件系统形式
当采用软件系统方式保存私钥时,私钥完全由软件系统进行管理,其安全性完全依赖于软件系统,不同系统下私钥存储形式和安全性可能不同。私钥可能以单独文件形式存在,也可能与其他数据打包后保存。