PKCS#--加密,签名和证书概念简要介绍

 午休时,想起自己以前做的一个配置文件签名的例子.这里简单回顾一下几个基本概念!

(1)非对称密钥指的是一对密钥:私钥和公钥.

 私钥和公钥并无特别的区分,只是对外公布的密钥称为公钥,自己保留的称为私钥.这对密钥中,其中任何一个用来加密,可以使用另一个进行唯一解密.且相互之前无法推到得出.

 (2)加密分为两种情况:对称加密和非对称加密.两者用在不同的情况下.一般情况下,对称密钥适用于大量内容的加密.非对称密钥用于少量内容的加解密(主要考虑效率的问题,典型的应用为SSL).

 (3)数字签名指的是对信息摘要进行加密.一般分为两个步骤:摘要和加密.

 <1>首先对明文利用摘要算法抽出一段固定字节的摘要.关于摘要算法的几种性质,这里不做讨论.读者记住不可逆就可以了.

 <2>对上述摘要用自己的私钥加密.这个过程就称为签名.相当于打上了你的信息.别人也无法冒充你,同时你也无法抵赖哦.

 (4)证书指的是封装公钥,同时该公钥已经过公证了,有权威第三方证实过了.表明该公钥指的信任,所以无法假冒的.

情景假设:

 A给B发送信息.

<1>首先假设A,B都各自拥有了"对方"的公钥(这里的公钥之所以加了引号,表明公钥不一定真的是对方的,至少使用者是坚信这就是对方的)

<2>还有一个角色是第三方

 因为内容需要保密,故A用B的公钥加密,并发送给B.理论上讲B收到信息后,用自己的私钥解密就可以了.但是存在以下几个疑点:

第一:B如何确定这个是A发送过来的呢.

第二:A如何确定自己用于加密的对方的公钥就是B的呢.

第三:B如何确定自己持有的公钥就一定是A的呢.

 对于第一个问题:就要用到签名了.即发给B的信息上加上自己的签名.

A只需要使用sha256算法(一种摘要算法)对明文处理,抽出一段摘要.并用自己的私钥对这段摘要加密.

再把明文和签名一起用B的公钥加密.最后将这个加密信件发给B.(注意,这里的明文和签名可能经过特殊的封装.常见的标准是PKCS系列,如:PKCS7.这里一并封装了使用了何种摘要算法)

B收到信息后,使用自己的私钥解密,拿出两个东西:明文和签名.B用向指明的摘要算法对明文再做一次摘要处理得摘要1.然后用A的公钥解密签名,拿出摘要2..此时,B手里有两份摘要.B比较z这两份摘要.若一致.,则表明这个确实是A发送过来的.

以上都是在假定A和B手里的公钥都是对方的才正确!!

 对于第二和第三个疑点的处理为证书:通常A和B的公钥都通过了第三方(CA中心)公证过了.CA用自己的私钥签名过了.当然CA不可能处理全球这么多的公证需求.所以存在证书链一说.这里不讨论了.

 笔者参加工作的第一个任务就是对公司产品的配置文件签名.实现GUI上的下载和上传.

思路就是:

 首先使用openssl生成一对密钥.要求按照spec生成.然后自签名一个PKCS12格式证书.pkcs12证书封装了公钥和私钥.不过这里的私钥还需要手动设置一段密码,加密.不用担心这里的私钥的安全性.这里主要考虑到私钥需要存放在产品中,已方便用户上传配置文件时进行解签名.

 设计的一对签名/解签API是基于openssl库完成.openssl本身存在一对API实现pkcs7格式的签名.所以,只要相应的处理一下即可.

   GUI上面的处理比较简单了,用json实现backup和restore两步就可以了.这里不讨论了.具体的code不方便贴出来.有需要的给我留言.

谢谢~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值