专栏首页安智客数字证书的存储和安全性

数字证书的存储和安全性

数字证书的产生、分发和存储

首先,让我们来回顾一下数字证书产生和分发的简要过程。一个网上用户怎样才能得到一张数字证书呢?

CA将证书分发给用户的途径有多种。

第一种途径是带外分发(Out-of-band Distribution),即离线方式。密钥对是由软件运营商代替客户生成,证书也是由运营商代替客户从CA下载,然后把私钥和下载的证书一起储存在U盘里,再交给用户的。这样做的好处是免去了用户上网下载证书的麻烦。

第二种途径是带内分发(In-band distribution),即用户从网上下载数字证书到自己的电脑中。下载时,用户要向CA出示“参考号”和“授权码”,以向CA证明自己的身份。这样做成本较低,但对使用计算机不太熟悉的用户来说,可能在下载时会碰到一些麻烦。除了以上两种方式外,CA还把证书集中放置在公共的数据库中公布,用户可以随用随查询随调用。

数字证书和私钥储存的介质有多种,可以存储在计算机硬盘、软盘、智能卡或USB key里。现在最火的移动金融盾就把证书存储在手机中的SE芯片中。

需要注意的几个概念

  一、关于私钥的唯一性

  严格地讲,私钥既然是世上唯一且只由主体本身持有,它就必须由主体的计算机程序来生成。因为如果在别处生成将会有被拷贝的机会。然而在实际应用上并非如此,出于某些特殊需要(例如,如果只有一份私钥,单位的加密文件就会因为离职员工带走私钥而无法解密。)加密用的公/私钥对会要求在可信的第三方储存其备份。这样,加密用的私钥可能并不唯一。然而签名用的私钥则必须保持唯一,否则就无法保证被签名信息的不可否认性。

  在生成用户的密钥对时,用于加密的公/私钥对可以由CA、RA产生,也可以在用户终端的机器上用专用的程序(如浏览器程序或认证软件)来产生。用于数字签名的密钥对原则上只能由用户终端的程序自行产生,才能保证私钥信息的私密性以及通信信息的不可否认性。

  有人可能会产生疑问:如果加密和签名的密钥对都是由软件运营商代替客户生成的,这是否破坏了上述的私钥唯一性原则呢?答案是否定的。这时候,私钥的唯一性要依靠法律合同的保证以及操作过程中相应制度的约束,使得不可否认性得到支持。出于这种机制,我们仍然可以认为,用户的签名私钥是唯一的。

  二、证书,私钥,到底保护哪一个?

  我们常常听到有人说:“保管好你的软盘,保管好你的KEY,不要让别人盗用你的证书。”有些教科书上也这样讲。应该说,这句话是有毛病的。数字证书可以在网上公开,并不怕别人盗用和篡改。因为证书的盗用者在没有掌握相应的私钥的情况下,盗用别人的证书既不能完成加密通信,又不能实现数字签名,没有任何实际用处。而且,由于有CA对证书内容进行了数字签名,在网上公开的证书也不怕黑客篡改。我们说,更该得到保护的是储存在介质中的私钥。如果黑客同时盗走了证书和私钥,危险就会降临。

  为什么说USB key安全性好

  不同的存储介质,安全性是不同的。如果证书和私钥储存在计算机的硬盘里,计算机一旦受到黑客攻击,(例如被埋置了木马程序)证书和私钥就可能被盗用。

  使用软盘或存储型IC卡来保存证书和私钥,安全性要比硬盘好一些,因为这两种介质仅仅在使用时才与电脑相连,用完后即被拔下,证书和私钥被窃取的可能性有所降低。但是黑客还是有机会,由于软盘和存储型IC卡不具备计算能力,在进行加密运算时,用户的私钥必须被调出软盘或IC卡进入外部的电脑,在这个过程中就会造成一定的安全隐患。

  使用智能卡(含CPU的IC卡)储存数字证书和私钥是更为安全的方式。为什么这样说呢?原来智能卡具有一定的计算机的功能,芯片中的CPU就是一台小小的计算机。

  产生公私密钥对的程序(指令集)是智能卡生产者烧制在芯片中的ROM中的,密码算法程序也是烧制在ROM中。公私密钥对在智能卡中生成后,公钥可以导出到卡外,而私钥则存储于芯片中的密钥区,不允许外部访问。

智能卡中密钥文件存储在E2PROM之中。对密钥文件的读写和修改都必须由卡内的程序调用。从卡接口的外面,没有任何一条命令能够对密钥区的内容进行读出、修改、更新和删除。除非设计和编写卡操作系统(COS)的人自己在COS上留了后门,只有他才知道如何从外部调出密钥区的内容。但我们可以排除黑客与COS设计者相勾结的这种几率极小的可能性。

目前华为与徽商银行的手机盾以及华为与建行的手机盾产品,都是将证书存储在inSE中。TEE+SE技术使得手机盾产品得以实现。

  在加密和签名的运算过程中,外部计算机中的应用软件使用智能卡API调用的方式,输入参数、数据和命令,启动智能卡内部的数字签名运算、密码运算等,并获得返回结果。由于智能卡内部的CPU可以完成这些操作,全过程中私钥可以不出智能卡介质,黑客的攻击程序没有机会去截获私钥,因此这就比证书和私钥放在软盘或硬盘上要安全得多。

  从物理上讲,对智能卡芯片中的内容作整体拷贝也是几乎不可能的。从智能卡芯片在操作过程中发生的微弱的电磁场变化,或者I/O口上反映出的微弱的电平变化中分析出芯片中的代码。但现在国际上对智能卡生产商的技术要求很高,要求上述的指标要低到不能够被测出来。国际上能够生产智能卡的公司只有少数几家,他们都采用了种种安全措施,确保智能卡内部的数据不能用物理方法从外部拷贝。

USB Key和智能卡除了I/O物理接口不一样以外,内部结构和技术是完全一样的,其安全性也一样。只不过智能卡需要通过读卡器接到电脑的串行接口上,而USB Key通过电脑的通用串行总线(USB)接口直接与电脑相接。另外,USB接口的通信速度要远远高于串行接口的通信速度。现在出品的电脑已经把USB接口作为标准配置,而使用智能卡则需要加配读卡器。出于以上原因,各家CA都把USB Key作为首选的证书和私钥存储介质而加以推广。

 仍需注意的问题

  这里需要指出的是,有些号称智能卡的产品实际上只是不含CPU的存储型IC卡,它仅仅具有存储功能。上文已经介绍过,存储型IC卡的安全性与软盘相仿,对于这两种不同类型的IC卡,用户需要甄别清楚。

  第二个问题是,尽管智能卡在设计和生产过程中,对安全机制给以了充分的考虑和保证,然而,由于人为因素,也可能带来安全隐患。例如智能卡上提供一个闪存(flash)随机存储区域,是供写入一般用户数据或增加卡片功能的程序之用的。敏感的数据和程序不允许写在闪存区,必须写在安全存储区。制作智能卡时,安全区要通过硬件方法做掩模处理。硬件的掩模处理费工费时成本高,一般需要3个月。有些卡商为了降低成本缩短工期迎合客户要求,将应该放在安全区中的敏感数据和程序放在闪存区中,闪存区里的内容是可以从卡片外部进行读写的,这就造成了可能被黑客侵入的安全隐患。这就要求我们对合作的IC卡厂商的工艺流程也要仔细审查。

另外,为了防止USB key 不慎丢失而可能被他人盗用,不少证书应用系统在使用过程中还设置了口令认证机制。如口令输入得不对,即使掌握了USB key,也不能登录进入应用系统。这种双因素认证机制可以使USB key更加安全可靠,值得提倡。

我们认为,手机盾这种产品形式将进一步丰富各种盾,同时给各种盾带来丰富的应用,从金融行业到各种各样的安全认证需求的行业中。

本文分享自微信公众号 - 安智客(china_safer)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一切不谈密钥保护的加密都是耍流氓!你的区块链可信吗?

    一、区块链的价值与疯狂 2009年,中本聪提出的比特币构想给人类带来了全新的数字货币观,时至今日依然热度不减。与比特币目前停留在虚拟货币、投资品等不同,作为比特...

    安智客
  • Key attestation-Google的密钥认证

    Android的密钥库已经有很多年了,它为应用程序开发者提供了一种使用加密密钥进行验证和加密的方法。 Keystore将密钥保留在应用程序的进程空间之外,以便应...

    安智客
  • 从诺基亚 X6 聊人脸解锁:安全基础是TEE

    前不久,诺基亚发布了其全新X系列智能手机诺基亚X6,官网上也打出了:AI面部识别,基于TEE移动安全解决方案指纹解锁之外,更享安全便捷的宣传。由于其采用的是高通...

    安智客
  • 老司机出品——包教包会之玩转正则表达式

    结束了CoreAnimation系列之后,老司机心里仿佛也轻松了许多。今天说说开发中的一个利器吧,正则表达式。

    老司机Wicky
  • RSA 算法简述

    数字签名是实现安全的核心技术之一,它的实现基础就是RSA加密技术,它是RSA的典型应用。 以往的书信或文件是通过亲笔签名或印章证明其真实性的,但在计算机网络中,...

    IT茂茂
  • 第36天并发编程之进程篇

    步骤一:创建一个py程序,用来打印三个人的信息,创建了三个函数,每个函数里面都有一个sleep来模拟网络延迟,因此我们写出了下面的代码

    py3study
  • iOS开发·适配iPhone X相关的宏和方法

    适配iPhone X和Xcode 9的过程中,除了与导航栏相关的问题,还有一个问题经常出现,就是UITableView相关的问题。下面两个办法可以解决多数错位的...

    陈满iOS
  • 【Rust日报】 2020-07-03 Google的Android將使用Rust

    https://immunant.com/blog/2020/06/kernel_modules/

    MikeLoveRust
  • CSS选择器详解

    最近在做一些面试的工作,我经常会问的一个问题就是:CSS中有哪些选择器。我往往得到的答案就是id选择器啊、class选择器啊,再追问下去就没了,这让我很是意外!...

    laixiangran
  • 豌豆荚的老团队,做了一款「反头条」的内容类小程序

    知晓君

扫码关注云+社区

领取腾讯云代金券