当前位置: 首页 > news >正文

初探数字签名与数字证书

数字签名Digital signature

本文参考wiki条目:

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






数字签名的目的

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

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


数字签名与电子签名:

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

数字签名的实现方式:

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

Codec.Crypto.RSA

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

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

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

数字证书

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

数字证书的例子:



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

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

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

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


相关文章:

  • 计算机在煤矿安全上有什么作用,计算机技术在煤矿安全生产中应用.pdf
  • 在maven中运行java main函数的方法
  • 怎样查看计算机USB接口的版本,如何查询计算机的USB接口的版本?
  • WordPress修改固定链接
  • win7设置工作组计算机共享的打印机,win7与win7系统之间局域网如何共享打印机
  • ORA-16038简单的处理过程
  • 计算机中逻辑运算顺序,【计算机系统】位运算与逻辑运算
  • ORA-19815错误的重现和解决办法
  • ajax操作异常处理,ajax请求异常捕获的问题
  • Visual Studio 2010 IDE中的新功能(1)
  • webmagic ajax,webmagic爬虫对静态页面,动态页面及js请求方式爬取的处理
  • Visual Studio 2010 IDE中的新功能(2)
  • 传奇3单机服务器怎么修改器,自己是GM并架设了传奇3单机版,如何改变装备属性?...
  • ftp文件服务器坑,爬大坑,FTP服务器
  • Silverlight Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效...
  • Google 是如何开发 Web 框架的
  • [译]CSS 居中(Center)方法大合集
  • HTTP中的ETag在移动客户端的应用
  • maven工程打包jar以及java jar命令的classpath使用
  • mysql innodb 索引使用指南
  • MySQL-事务管理(基础)
  • Redux 中间件分析
  • Spring声明式事务管理之一:五大属性分析
  • Sublime text 3 3103 注册码
  • 大快搜索数据爬虫技术实例安装教学篇
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 高程读书笔记 第六章 面向对象程序设计
  • 搞机器学习要哪些技能
  • 计算机常识 - 收藏集 - 掘金
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 如何学习JavaEE,项目又该如何做?
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • UI设计初学者应该如何入门?
  • 积累各种好的链接
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​flutter 代码混淆
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $NOIp2018$劝退记
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (四)Android布局类型(线性布局LinearLayout)
  • (译) 函数式 JS #1:简介
  • .net Application的目录
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET程序员迈向卓越的必由之路
  • ??在JSP中,java和JavaScript如何交互?