初探数字签名与数字证书

数字签名Digital signature

本文参考wiki条目:

http://en.wikipedia.org/wiki/Digital_signature






数字签名的目的

一个有效的数字签名可以用来验证一份数字信息(文件)是由特定的发送者创建的,并且在传输过程中没有被修改。

经常用于 软件分发,金融交易,电子政务,以及其他需要检测伪造及篡改信息的领域。


数字签名与电子签名:

数字签名是电子签名的一种实现方式。电子签名的含义更广泛一些。在美国以及欧盟成员国,电子签名具有法律效力。我国也出台了《中华人民共和国电子签 名法》 ,因此含有数字签名的文件是具有法律效力的。

数字签名的实现方式:

采用非对称加密。asymmetric cryptography ,一般常用的就是RSA 算法,关于RSA算法这里先不罗嗦了。
数字签名基于3个算法:
  1. 生成密钥的算法,用于产生一对私钥和公钥。
  2. 签名签署算法:给定一个需要签署的信息(文件)以及私钥,生成数字签名
  3. 签名验证算法:给定一个信息,签名,以及公钥,判断此签名是否可信。
在 Haskell中有一个 RSA 库,其中对应的函数为:


generateKeyPair :: RandomGen g => g -> Int -> ( PublicKey , PrivateKey , g)

sign :: PrivateKey -> ByteString -> ByteString
verify :: PublicKey -> ByteString -> ByteString -> Bool
但是在实际使用过程中,直接使用非对称加密算法,会比较慢,因此可以对文件先用 md5 或 sha-1 取得特征码,再对文件特征码做加解密验证。

对于这几个算法,有两个重要的特性:
1. 一个特定的信息用一个特定的私钥生成的签名,必须可以被对应的公钥所验证。(这个很好理解)
2. 对于不掌握特定私钥的人或组织,想要生成一个有效的数字签名是计算不可行的。(说白了,就是没有私钥想伪造个签名是没门儿的)

数字证书

数字证书是由一个权威机构发行的,包含公钥,证书持有者的名称信息,以及证书授权中心对这些信息的数字签名文件。
数字证书是由第三方颁发的,这个第三方也有自己的数字证书,称为“根证书”。

数字证书的例子:



数字签名在安全领域的应用:

对于一个具有有效数字证书的文件,一般可以信任为安全的文件。比如从网上下载一个软件,怎么才能确定它不是个木马呢?看数字签名,如果包含了知名公司的数字签名,一般就可以认为是安全的。(除非这个公司不想混了,特意加入了恶意代码,或者私钥被盗用了,但这种情况太罕见了)

但是,是不是有数字签名的文件都是正常安全的文件呢? 也不一定,有些木马程序就带有数字签名!因为签名虽然很难伪造,但申请个数字签名并非多难的事情。

对数字证书也要防假冒伪劣啊。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值