`
winzenghua
  • 浏览: 1336134 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

初探数字签名与数字证书

阅读更多

数字签名Digital signature

本文参考wiki条目:

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






数字签名的目的

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

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


数字签名与电子签名:

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

数字签名的实现方式:

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



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

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

数字证书

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

数字证书的例子:



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

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

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

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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics