各种数据文件是指非PDF格式文件和数据,因为PDF格式文件有数字签名和加密标准,所以,我们必须按照其标准实现数字签名和加密。而其他格式文件,如文本文件、图片文件、音频文件、视频文件、Office文件、CAD文件等等,大约三百多种,当然还包括字符串数据,这些五花八门的文件大多数都不支持数字签名和加密,所幸的是,这些文件都可以归类到MIME类型中。
MIME (Multipurpose Internet Mail Extensions,多用途互联网邮件扩展) ,其原本设计是用于让只支持文本的电子邮件支持各种格式文件作为邮件附件来发送。在http协议出现后,为了让HTML支持各种格式文件也采用了MIME框架,使得MIME成为了一个互联网媒体类型,用来表示文件或数据流的性质和格式。而HTTP传输协议由于是明文传输不安全就有了现在已经普及使用的HTTPS协议,这个协议支持采用SSL证书实现加密传输。同样,由于MIME明文邮件不安全,就有了S/MIME协议(安全/多用途互联网邮件扩展),这个协议支持采用邮件证书实现邮件加密和数字签名。两个协议的“S”就是”Secure”(安全)这个单词的第一个字母。
也就是说,有了S/MIME标准,就可以实现所有各种文件的数字签名和加密,都可以统一采用S/MIME技术标准把各种格式文件打包成一个数字信封,来保护各种数据文件的身份可信和加密存储。密信技术非常熟悉S/MIME邮件加密和数字签名技术,已经实现了电子邮件的全自动加密和数字签名,并且还创新地在S/MIME标准基础上的增加了电子邮件时间戳应用。这就是密信技术实现所有各种格式文件数字签名、加密和时间戳服务的技术基础。
密信技术采用S/MIME国际标准和数字信封技术,以SDK和API两种方式,帮助各种应用软件和各种互联网服务实现各种数据和各种格式文件的数字签名,以保证这些数据和文件的身份可信;实现各种数据和各种格式文件的证书加密,以保证这些数据和文件的机密信息安全;实现各种数据和各种格式文件的时间戳,以保证这些数据和文件生成和使用的时间可信和不可否认;实现各种数据和各种格式文件的位置戳,以保证这些数据和文件生成和使用时的位置信息可信和不可否认。
要实现数据文件加密,必须有加密证书,按照S/MIME标准,当然是加密证书必须绑定一个邮箱,也就是说,每个用户(数据生产者或数据使用者)都必须有一个邮箱和必须有一个绑定此邮箱的加密证书。而如果需要加密数据,还需要有权解密此数据的用户的公钥,这同电子邮件加密的实现方式是一样的,密信技术的云密码服务就能帮助用户轻松实现各种数据文件的证书加密,有两种服务模式:云加密模式和本地加密模式,用户可以更加业务需要选择不同的加密服务模式。
为了保护加密密钥的安全,加密密钥不保存在用户设备端,而是在云密钥管理系统(KMK)生成和保管,如下图所示,用户甲要发送机密数据给用户乙,则甲生成用于加密机密数据的对称密钥通过https提交给密信数据加密服务系统请求加密,加密服务系统用乙的公钥证书加密对称密钥后返回给甲,甲就可以用已加密的对称密钥用数字信封格式加密机密数据,并把已加密数据发给用户乙。乙收到加密数据后,就提取出加密的对称密钥通过https提交给密信数据加密服务系统请求解密,加密服务系统就用乙的私钥解密后返回以解密的对称密钥给用户乙,乙就可以解密数字信封里的机密数据了。
此加密模式解决了加密密钥在终端上的安全问题,由云密码服务代表终端设备执行加解密服务,而无需暴露重要的加密密钥给不安全的终端设备上。当然,必须有相应的身份认证服务在验证了用户身份后采用启用其密钥来解密已加密数据。请同时参考博文《解读RSA 大师第一次提出“密码即服务”的PPT》。
本地加密模式,就是把加密密钥和加密证书下发到用户本地设备并安全保存在SDK中,如下图所示。 每个用户必须有一张加密证书(含加密密钥),由用户通过SDK提交获取加密证书请求,证书绑定用户邮箱,在完成邮箱控制权验证后下发加密证书到SDK密钥存储区中安全保存,用于解密已加密文件。为用户申请和配置加密证书只需在第一次使用加密服务时由SDK自动完成。
业务系统把数据接收方的邮箱给SDK,由SDK获取此用户的加密公钥,并由SDK负责用此公钥加密数据文件,实现数据文件的证书加密。而解密过程则是把已加密数据文件给SDK,由SDK调用加密私钥来解密此数据文件,解密后的明文文件以加密之前的格式给用户,用户就可以使用已解密的数据文件了。
此加密模式大大提高了加密效率,在拿到用户的加密证书后和获取对方的加密公钥后就不再依赖于云端数据加密服务系统,每次可以直接在SDK本地完成数据加解密。但是,需要注意加密密钥在本地的安全保护。
要实现数据文件的数字签名,则签名者必须有签名证书,按照S/MIME标准,当然是签名证书必须绑定一个邮箱,也就是说,每个用户(数据生产者或数据使用者)都必须有一个邮箱和必须有一个绑定此邮箱的签名证书。用户可以使用自己的签名证书对各种数据文件进行数字签名,以证明此数据文件的生产者或使用者的可信身份。这同电子邮件数字签名的实现方式是一样的,密信技术的云密码服务就能帮助用户轻松实现各种数据文件的数字签名,如下图所示。
每个用户必须有一张签名证书,由用户通过SDK提交签名证书申请,证书绑定用户邮箱和用户身份信息,在完成邮箱控制权验证和身份认证后下发签名证书到SDK中,签名证书密钥由SDK本地生成并安全保存在SDK密钥存储区中,用于数字签名数据文件。为用户申请和配置签名证书只需在第一次使用数字签名服务时由SDK自动完成。
业务系统把待签名的数据文件给SDK,由SDK负责用此用户私钥数字签名数据文件,实现数据文件的数字签名,以证明数据文件的可信身份。数字签名过程一般都会同时附署时间戳签名,以证明数字签名时间可信和不可否认。而验证数字签名则是把数字签名数据文件给SDK,由SDK验证数字签名和时间戳签名是否有效和是否可信,并还原出数字签名之前的格式文件给用户,用户就依据验证签名的结果来判断是否信任此数据文件和是否使用此数据文件。
数据文件数字签名服务的核心是让每个数据文件都要可信身份,密信技术提供4种不同的身份类型,由用户根据业务需求选择不同的身份,包括只验证用户邮箱控制权的V1身份、验证邮箱和验证个人身份的V2身份、验证邮箱和验证单位身份的V3身份、验证邮箱和验证单位员工身份的V4身份,不同的身份认证级别需要在申请签名证书时按照要求完成身份认证才能使用数字签名服务。当然,不同的身份认证级别由于身份鉴证工作量的不同而收费不同。