`
manjingtou
  • 浏览: 121119 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数字签名

阅读更多

好的文章 http://www.ibm.com/developerworks/cn/java/l-security/

 

数字签名以电子形式存在于数据信息之中的,或作为其附件的或逻辑上与之有联系的数据,可用于辨别数据签署人的身份,并表明签署人对数据信息中包含的信息的认可。(摘自百度)

 

数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证

 

基本介绍  数字签名不是指将你的签名扫描成数字图像,或者用触摸板获取的签名,更不是你的落款

  数字签名了的文件的完整性是很容易验证的(不需要骑缝章,骑缝签名,也不需要笔迹专家),而且数字签名具有不可抵赖性(不需要笔迹专家来验证)。

  简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,目前主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。

  数字签名(Digital Signature)技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。

主要功能

  保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

  数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

  数字签名是个加密的过程,数字签名验证是个解密的过程。

签名过程

  报文的发送方用一个哈希函数从报文文本中生成报文摘要(散列值)。发送方用自己的私人密钥对这个散列值进行加密。然后,这个加密后的散列值将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。

  数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。 一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。

个人安全邮件证书

  具有数字签名功能的个人安全邮件证书是用户证书的一种,是指单位用户收发电子邮件时采用证书机制保证安全所必须具备的证书。个人安全电子邮件证书是符合x.509标准的数字安全证书,结合数字证书S/MIME技术对普通电子邮件做加密和数字签名处理,确保电子邮件内容的安全性、机密性、发件人身份确认性和不可抵赖性。 具有数字签名功能的 个人安全邮件证书中包含证书持有人的电子邮件地址、证书持有人的公钥、颁发者(CA)以及颁发者对该证书的签名。个人安全邮件证书功能的实现决定于用户使用的邮件系统是否支持相应功能。目前, MS Outlook 、Outlook Express、Foxmail及CA安全电子邮件系统均支持相应功能。使用个人安全邮件证书可以收发加密和数字签名邮件,保证电子邮件传输中的机密性、完整性和不可否认性,确保电子邮件通信各方身份的真实性。

用数字签名识别病毒

  [1][2]如何区分数字签名攻击呢?有两个方法:

  1.查看数字签名的详细信息,我们应该查看该数字签名的详细信息,点击“详细信息”按钮即可。

  我们会发现正常EXE和感染(或捆绑木马)后的EXE数字签名的区别

  正常EXE的数字签名详细信息

  被篡改后的EXE数字签名信息无效

  方法2,使用数字签名验证程序sigcheck.exe (可以百度一下找这个工具,著名系统工具包Sysinternals Suite的组件之一。)

  数字签名异常的结果为:

  C:\Documents and Settings\litiejun\??\modify.exe:

  Verified: Unsigned

  File date: 15:46 2008-5-23

  Publisher: n/a

  Description: n/a

  Product: n/a

  Version: n/a

  File version: n/a

  数字签名正常的结果为:

  C:\Documents and Settings\litiejun\??\che.exe:

  Verified: Signed

  Signing date: 16:28 2008-4-29

  Publisher: n/a

  Description: n/a

  Product: n/a

  Version: n/a

  File version: n/a

原因分析

  1,精心设计的感染

  当EXE被感染时,是很容易破坏文件的数字签名信息的,如果攻击者感染或破坏文件时,有意不去破坏EXE中有关数字签名的部分,就可能出现感染后,数字签名看上去正常的情况。但认真查看文件属性或校验文件的HASH值,你会发现该EXE程序已经不是最原始的版本了。

  2.该软件发行商的数字签名文件被盗,攻击者可以把捆绑木马或感染病毒后的EXE程序,也打包上数字签名,这种情况下就更严重了。企业如果申请了数字签名证书,一定要妥善保管,否则后患无穷。

使用方法

  你可以对你发出的每一封电子邮件进行数字签名。这不是指落款,普遍把落款讹误成签名。

  在我国大陆,数字签名是具法律效力的,正在被普遍使用。2000年,中华人民共和国的新《合同法》首次确认了电子合同电子签名的法律效力。2005年4月1日起,中华人民共和国首部《电子签名法》正式实施。

原理特点

  每个人都有一对“钥匙”(数字身份),其中一个只有她/他本人知道(密钥),另一个公开的(公钥)。签名的时候用密钥,验证签名的时候用公钥。又因为任何人都可以落款申称她/他就是你,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用你的密钥签发的文件。

  在通讯中使用数字签名一般基于以下原因:

鉴权

  公钥加密系统允许任何人在发送信息时使用公钥进行加密,数字签名能够让信息接收者确认发送者的身份。当然,接收者不可能百分之百确信发送者的真实身份,而只能在密码系统未被破译的情况下才有理由确信。

  鉴权的重要性在财务数据上表现得尤为突出。举个例子,假设一家银行将指令由它的分行传输到它的中央管理系统,指令的格式是(a,b),其中a是账户的账号,而b是账户的现有金额。这时一位远程客户可以先存入100元,观察传输的结果,然后接二连三的发送格式为(a,b)的指令。这种方法被称作重放攻击

完整性

  传输数据的双方都总希望确认消息未在传输的过程中被修改。加密使得第三方想要读取数据十分困难,然而第三方仍然能采取可行的方法在传输的过程中修改数据。一个通俗的例子就是同形攻击:回想一下,还是上面的那家银行从它的分行向它的中央管理系统发送格式为(a,b)的指令,其中a是账号,而b是账户中的金额。一个远程客户可以先存100元,然后拦截传输结果,再传输(a,b3),这样他就立刻变成百万富翁了。

不可抵赖

  在密文背景下,抵赖这个词指的是不承认与消息有关的举动(即声称消息来自第三方)。消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源。

如何实现

  数字签名算法依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。

  普通的数字签名算法包括三种算法:

  1.密码生成算法 ;

  2.标记算法 ;

  3.验证算法 。

Java数字签名步骤

  1、将applet的class文件打包成*.jar(不会的可以在命令行中输入jar查看帮助) [3]

  2 首先我们要生成一个keystore 否则在签名的时候报如下错误

  jarsigner 错误: java.lang.RuntimeException: 密钥库装入: C:\Documents and Settings\ij2ee\.keystore (系统找不到指定的文件。). (这边的ij2ee 是我当前系统用户名)

  生成keystore的语句:keytool -genkey -alias 别名你可以自己写 -keyalg RSA -keystore .keystore

  比如我的就是 keytool -genkey -alias ij2ee -keyalg RSA -keystore .keystore

  下面是会出现的数字签名的一些步骤操作:

  输入keystore密码:

  再次输入新密码:

  您的名字与姓氏是什么?

  [Unknown]: ij2ee

  您的组织单位名称是什么?

  [Unknown]: mtk

  您的组织名称是什么?

  [Unknown]: mtk

  您所在的城市或区域名称是什么?

  [Unknown]: suzhou

  您所在的州或省份名称是什么?

  [Unknown]: jiangsu

  该单位的两字母国家代码是什么

  [Unknown]: cn

  CN=jeson, OU=mtk, O=mtk, L=suzhou, ST=jiangsu, C=cn 正确吗?

  [否]: y

  输入<sfcs>的主密码

  (如果和 keystore 密码相同,按回车):

  这时候会在jdk的bin目录下生成 .keystore 。把这个.keystore文件移动到 C:\Documents and Settings\当前系统用户 的目录下面。

  3、创建一个数字证书

  在命令行中输入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天数,就是10年左右,在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,都是中文,一看就懂的

  keytool -genkey -alias peakCA -keyalg RSA -keysize 1024 -keystore peakCALib -validity 3650

  4、将证书导出到证书文件中

  在命令行中输入如下指令,peakCA和peakCALib自己起名字好了,******是你输入的密码

  keytool -export -alias peakCA -file peakCA.cer -keystore peakCALib -storepass ****** -rfc

  5、授权jar文件,在命令行中输入如下指令

  jarsigner -keystore peakCALib myapplet.jar peakCA

分享到:
评论

相关推荐

    代码签名数字证书(含私钥)_过期证书_过期数字签名强制签名工具_数字签名_证书

    本文将深入探讨过期证书、过期数字签名的处理、强制签名工具以及数字签名证书的相关知识。 首先,我们要理解什么是代码签名数字证书。这是一种由权威的证书颁发机构(CA)颁发的证书,用于验证软件的开发者身份和...

    数字签名和数字证书

    在IT安全领域,数字签名和数字证书是两个关键概念,它们在确保数据的完整性和身份验证方面发挥着至关重要的作用。本文将详细解释这两个概念,以及它们之间的关系,并结合C#编程语言,探讨如何实现证书和签名功能。 ...

    如何对驱动进行数字签名和禁用数字签名强制

    在计算机和信息技术领域,数字签名是一种用于验证软件驱动程序完整性和来源的技术。它能够保证用户安装和使用的是经过认证、未经修改的驱动程序,增强系统的安全性。对于开发者来说,为驱动进行数字签名是一项重要的...

    数字签名克隆工具

    数字签名在IT行业中扮演着至关重要的角色,尤其是在软件开发、安全验证和数据完整性保护方面。在深入探讨"数字签名克隆工具"之前,我们先理解什么是数字签名。 数字签名并非传统意义上的签名,而是一种用于验证电子...

    winform实现数字签名实例

    在IT领域,数字签名是一种用于验证数据完整性和发送者身份的技术。它在网络安全、软件发布以及电子文档签署等方面起着至关重要的作用。本实例将详细讲解如何使用C#语言和WinForm来实现数字签名功能。 首先,让我们...

    ,易语言软件的数字签名

    在IT行业中,数字签名是一种重要的安全机制,尤其在软件开发和分发领域。它主要用于验证软件的来源和完整性,防止恶意篡改。易语言作为一款中国本土的编程环境,也支持对编译后的软件进行数字签名,以提高软件的可信...

    代码签名数字证书(含私钥),数字签名是使用自己的私钥签名,C,C++

    数字签名并非我们日常生活中手写的签名,而是通过一种加密算法,使用私钥对数据进行的一种特殊标记。这个过程类似于物理世界中的印章,但具有更高的安全性。在C或C++编程中,开发人员可以使用代码签名证书来为他们的...

    基于RSA算法的数字签名系统 C#实现

    在IT领域,数字签名是一种重要的安全机制,它用于验证数据的完整性和发送者的身份。这里我们聚焦于一个基于RSA算法的数字签名系统,该系统已用C#编程语言实现。RSA算法是公钥密码学中的基石,而数字签名则是其在确保...

    数字签名复制工具V1.0绿色版

    数字签名复制工具是一款功能强大、便捷实用的数字签名克隆工具,此款软件能够将一个有数字签名的文件中的数字签名克隆到另一个没有数字签名的文字上。软件方便简单,可复制多重签名,快来下载体验吧。 功能介绍 ...

    (纯算法,没有调用库)python实现RSA数字签名代码、ppt、文档.rar

    在这个资源包中,包含的是使用Python纯算法实现RSA数字签名的代码、相关的PPT演示文稿以及文档,这些内容将帮助我们深入理解RSA数字签名的工作原理和实现过程。 1. **RSA算法基础** RSA算法基于大数因子分解的困难...

    给CAB文件加上数字签名

    ### 给CAB文件加上数字签名 在软件开发过程中,为CAB文件添加数字签名是一项重要的安全措施。本文将详细介绍如何使用简单的工具为CAB文件(通常用于分发ActiveX控件)添加数字签名,以及这一过程的重要性和具体步骤...

    数字签名文件,数字签名文件

    在IT领域,数字签名是一种重要的安全技术,它用于验证文件的完整性和来源的可靠性。数字签名文件,如标题所示,通常是指已经应用了数字签名的文件,这种签名能确保文件在传输过程中没有被篡改,并且能证明文件的发布...

    RSA数字签名源代码

    在C#编程环境中,我们可以利用.NET框架提供的类库来实现RSA算法的各种功能,包括数字签名。 数字签名是一种用于验证数据完整性和发送者身份的技术,它是通过将哈希函数和非对称加密相结合来实现的。在RSA数字签名中...

    微软驱动数字签名失败解决补丁

    Windows无法验证文件数字签名而无法启动,无法验证此驱动的数字签名的网络上的解决方案一般都是下面几种: 第一种: 开机时按F8键,在弹出的菜单中有 禁用驱动程序签名强制 选项,使用上下键选中之后,再按回车键...

    PDF中数字签名设置步骤

    ### PDF中数字签名设置步骤详解 #### 一、前言 在数字时代,电子文档的安全性和可信度变得尤为重要。PDF格式作为最常用的电子文档之一,提供了丰富的功能来确保文档的真实性和完整性,其中数字签名就是一项重要的...

    获取数字签名信息

    在IT行业中,数字签名是一种重要的安全机制,用于验证软件或数据的完整性和来源。当我们谈论“获取数字签名信息”时,通常是指通过编程接口(如DLL接口)来访问和解析包含在可执行文件或库中的数字签名数据。下面将...

Global site tag (gtag.js) - Google Analytics