导航:首页 > 源码编译 > 时间签名算法

时间签名算法

发布时间:2023-02-23 01:01:16

Ⅰ 12 签名算法

签名算法是公钥密码学的“消息认证码”,它主要包括3个部分:

签名算法可以在加密算法的基础上构建。使用一个私钥,可以对一个消息产生一个值,通常是使用hash算法来生成。任何人都可以用公钥来检查这个值,计算该值是否由消息计算得到,然后将两者进行验证。和公钥加密算法一个明显的不同是,使用私钥来产生消息(这个情形下就是签名),使用公钥去解析它,这个和加密的过程是反过来的。

上面的说明是对后面很多重要细节的概述。本文将继续讨论一些细节。

数字签名算法(Digital Signature Algorithm DSA)是英国联邦政府的一个数字签名标准。它由NIST(National Institute of Standards and Technology)在1991年第一次提出,用来作为数字签名的标准(Digital Signature Standard DDS)。该算法由NSA的技术顾问David W.Kravitz发布。

DSA的密钥生成分为两步:第一步,选择在用户中共享的参数。第二步,为每一个用户生成一份公私钥对。

首先需要挑选一个被推荐的密码hash函数H,密钥长度L和一个素数长度N。原始的DSS中推荐L的长度为512和1024之间,现在NIST推荐密钥的长度为3072位这样密钥的安全生命周期就可以到2030年。随着L的增长,N也需要增长。

接下来选择素数q,其长度为N位。N需要小于或者等于hash输出的长度。再选择一个L位长度的素数p,使得p-1是q的倍数。

最后一部分是最容易让人困惑的。需要找到一个数字g,它的乘法序模p是q。最简单的方法是设

也可以尝试其他比2大,比p-1小的数。

一旦确定了(p,q,g),可以将其在用户中共享。

有了参数,就该来位用户计算公钥和私钥了。首先,选择随机数x (0<x<q), 接下来计算y y=g^x(mod p).这样私钥就是x,公钥为(p,q,g,y)。

为了对消息进行签名,签名者在0-q之间挑选一个随机数k。如何挑选k是一个很敏感和相关的过程,这个在之后进行讨论。当k选定后,可以计算消息m的签名的两部分r和s:

如果两者中任意一个是0(罕见时间),再重新选择一个k。

验证签名需要一个复杂的计算。给定消息m和签名(r,s):

如果签名是有效的,那么v就会等于r,也就是签名的第二部分。

虽然目前DSA算法自身没有什么问题,但是它却很容易出错。进一步说,DSA是非常敏感的,仅仅是一个很小的实现上的错误就可以毁掉整个机制。

特殊来看,签名参数k的选择是非常严格的。可以说是密码系统中对于随机数选择中最严格的。例如,很多算法需要一个nonce值。nonce值仅仅需要唯一,它不需要私密。它也不需要不可预测。nonce值通常可以使用简单的计数器或者时钟。很多其他算法例如CBC模式,需要一个初始化向量。它不需要是唯一的,只需要是不可预测的。它也不需要是私密的:初始化向量通常和密文一起。但是DSA算法的随机数k是以上的组合:

如果没有满足这些特性,攻击者可以尝试从一定数量的签名中得到你的私钥。例如,攻击者只要知道k的一些位,和比较多的有效签名,就可以恢复出私钥。[NS00]

实际中DSA的很多实现都不能保证唯一性,愉快地重用随机数k。这就使得只需要使用简单的数学就可以恢复密钥。因为这个攻击很容易理解,应用非常广泛并且可以造成非常严重的影响,本节将讨论它的细节。

假设攻击者看到了很多对于不同消息mi的签名(ri,si),它们使用了相同的k。攻击者可以挑选出两个签名(r1,s1)和(r2,s2),假设它们的原消息位m1和m2.s1和s2的是通过如下计算得到的

攻击者可以推断出r1和r2是相同的,因为

重用了相同的k,而r仅仅依赖于k,所以r是相同的。另外由于签名者使用的是同一个密钥,两个公式中的x也是相同的。

将两个s相减,得到一下的计算:

可以得到k

两个hash值H(m1)和H(m2)很容易计算。它们并没有加密,被签名的消息是公开的。签名的两个s1和s2是签名的组成部分,攻击者都可以看到。所以攻击者可以计算得到k。目前它还没有得到私钥x,然后用私钥去伪造签名。

再次看下s的计算过程,这次把k当作是已知项,x作为需要解决的变量。

所有有效的签名都满足这个等式,所以可以尝试任意一个签名。来解出x

同样的H(m)是公开的,攻击者可以计算出k。假设他们已经计算出了k,s本身就是签名的一部分。现在只需要计算r^(-1)(mod q)(也就是r相对于模q的逆元),这个同样也可以计算出来。(更多信息可以查看附录中有关于现代数学,记住q是个素数,所以这个模的逆元是可以直接计算的)。这也就意味着攻击者,只要发现了任何签名的k,就可以得到私钥的值。

目前为止,本节中假设的是签名者一直使用的同一个随机数k。更糟的是,签名者只要在攻击者可以看到的签名中,有两个签名复用k一次。如上,k重复了,r就会重复。而r是签名的一部分,签名者的这个错误非常容易被观察到。这样即便签名者只是很罕见地重用了k(比方说随机数生成器的问题),只一次,攻击者就可以打破这个DSA系统。

简而言之,在DSA签名算法中重用参数k就意味着攻击者可以破解出私钥。

TODO:

和一般的DSA相同,k的选择是极为严格的。攻击者可以使用几千个签名,这些签名的nonce仅仅有一些位泄漏,攻击者便可以破解出签名的私钥。

本章描述的签名算法有一个特点被称为:不可抵赖性。简单说,它意味着不可以否认自己就是签名消息的发送者。任何人都可以验证你用私钥签署的签名。但是签名只有你可以做。

这通常并不是一个有用的特性,只有少数接受者可以验证签名可能更加谨慎。这种算法通常需要只有接受者才可以计算出这个特殊的值。

这些消息是可以拒绝的,例如一种通常被称为“可以否认的消息认证”。一个发送者认证一条消息给接收者,发送者之后可以否认它发送了这条消息。接收者也无法向任何人证明发送者给他发送了特定的消息。

Ⅱ 电子合同中,对称加密、非对称加密、哈希算法、CA、时间戳、数字签名这些是什么,有什么用,你们知道吗

算法,因为只要你有足够的时间,完全可以用穷举法来进行试探,如果说一个加密算法是牢固的,一般就是指在现有的计算条件下,需要花费相当长的时间才能够穷举成功(比如100年)。一、主动攻击和被动攻击数据在传输过程中或者在日常的工作中,如果没有密码的保护,很容易造成文件的泄密,造成比较严重的后果。一般来说,攻击分为主动攻击和被动攻击。被动攻击指的是从传输信道上或者从磁盘介质上非法获取了信息,造成了信息的泄密。主动攻击则要严重的多,不但获取了信息,而且还有可能对信息进行删除,篡改,危害后果及其严重。 二、对称加密基于密钥的算法通常分为对称加密算法和非对称加密算法(公钥算法)。对成加密算法就是加密用的密钥和解密用的密钥是相等的。比如着名的恺撒密码,其加密原理就是所有的字母向后移动三位,那么3就是这个算法的密钥,向右循环移位就是加密的算法。那么解密的密钥也是3,解密算法就是向左循环移动3位。很显而易见的是,这种算法理解起来比较简单,容易实现,加密速度快,但是对称加密的安全性完全依赖于密钥,如果密钥丢失,那么整个加密就完全不起作用了。比较着名的对称加密算法就是DES,其分组长度位64位,实际的密钥长度为56位,还有8位的校验码。DES算法由于其密钥较短,随着计算机速度的不断提高,使其使用穷举法进行破解成为可能。三、非对称加密非对称加密算法的核心就是加密密钥不等于解密密钥,且无法从任意一个密钥推导出另一个密钥,这样就大大加强了信息保护的力度,而且基于密钥对的原理很容易的实现数字签名和电子信封。比较典型的非对称加密算法是RSA算法,它的数学原理是大素数的分解,密钥是成对出现的,一个为公钥,一个是私钥。公钥是公开的,可以用私钥去解公钥加密过的信息,也可以用公钥去解私钥加密过的信息。比如A向B发送信息,由于B的公钥是公开的,那么A用B的公钥对信息进行加密,发送出去,因为只有B有对应的私钥,所以信息只能为B所读取。牢固的RSA算法需要其密钥长度为1024位,加解密的速度比较慢是它的弱点。另外一种比较典型的非对称加密算法是ECC算法,基于的数学原理是椭圆曲线离散对数系统,这种算法的标准我国尚未确定,但是其只需要192 bit 就可以实现牢固的加密。所以,应该是优于RSA算法的。优越性:ECC > RSA > DES

Ⅲ 签名算法怎么来的

数字签名算法分析与Hash签名

序:这篇文章我用了近一周的时间完成,其中涉及到的RSA算法已经在上一篇《公钥密码体系》中详细的介绍过,目前数字签名中人们使用很多的还是512位与1024位的RSA算法。


摘要: 数字签字和认证机构是电子商务的核心技术。数字签名作为目前Internet中电子商务重要的技术,不断地进行改进,标准化。本文从数字签名的意义出发,详细介绍了数字签名中涉及到的内容与算法,并自行结合进行改进。

关键词:Internet公钥加密 Hash函数 电子商务加密数字签名

数字签名简介

我们对加解密算法已经有了一定理解,可以进一步讨论"数字签名"(注意不要与数字认证混淆)的问题了,即如何给一个计算机文件进行签字。数字签字可以用对称算法实现,也可以用公钥算法实现。但前者除了文件签字者和文件接受者双方,还需要第三方认证,较麻烦;通过公钥加密算法的实现方法,由于用秘密密钥加密的文件,需要靠公开密钥来解密,因此这可以作为数字签名,签名者用秘密密钥加密一个签名(可以包括姓名、证件号码、短信息等信息),接收人可以用公开的、自己的公开密钥来解密,如果成功,就能确保信息来自该公开密钥的所有人。

公钥密码体制实现数字签名的基本原理很简单,假设A要发送一个电子文件给B,A、B双方只需经过下面三个步骤即可:

1. A用其私钥加密文件,这便是签字过程

2. A将加密的文件送到B

3. B用A的公钥解开A送来的文件

这样的签名方法是符合可靠性原则的。即:

签字是可以被确认的,
签字是无法被伪造的,
签字是无法重复使用的,
文件被签字以后是无法被篡改的,
签字具有无可否认性,
数字签名就是通过一个单向函数对要传送的报文进行处理得到的用以认证报文来源并核实报文是否发生变化的一个字母数字串。用这几个字符串来代替书写签名或印章,起到与书写签名或印章同样的法律效用。国际社会已开始制定相应的法律、法规,把数字签名作为执法的依据。

数字签名的实现方法

实现数字签名有很多方法,目前数字签名采用较多的是公钥加密技术,如基于RSA Data Security公司的PKCS(Public Key Cryptography Standards)、DSA(Digital Signature Algorithm)、x.509、PGP(Pretty Good Privacy)。1994年美国标准与技术协会公布了数字签名标准(DSS)而使公钥加密技术广泛应用。同时应用散列算法(Hash)也是实现数字签名的一种方法。

非对称密钥密码算法进行数字签名

算法的含义:

非对称密钥密码算法使用两个密钥:公开密钥和私有密钥,分别用于对数据的加密和解密,即如果用公开密钥对数据进行加密,只有用对应的私有密钥才能进行解密;如果用私有密钥对数据进行加密,则只有用对应的公开密钥才能解密。

使用公钥密码算法进行数字签名通用的加密标准有: RSA,DSA,Diffie-Hellman等。

签名和验证过程:

发送方(甲)首先用公开的单向函数对报文进行一次变换,得到数字签名,然后利用私有密钥对数字签名进行加密后附在报文之后一同发出。

接收方(乙)用发送方的公开密钥对数字签名进行解密交换,得到一个数字签名的明文。发送方的公钥可以由一个可信赖的技术管理机构即认证中心(CA)发布的。

接收方将得到的明文通过单向函数进行计算,同样得到一个数字签名,再将两个数字签名进行对比,如果相同,则证明签名有效,否则无效。

这种方法使任何拥有发送方公开密钥的人都可以验证数字签名的正确性。由于发送方私有密钥的保密性,使得接受方既可以根据结果来拒收该报文,也能使其无法伪造报文签名及对报文进行修改,原因是数字签名是对整个报文进行的,是一组代表报文特征的定长代码,同一个人对不同的报文将产生不同的数字签名。这就解决了银行通过网络传送一张支票,而接收方可能对支票数额进行改动的问题,也避免了发送方逃避责任的可能性。

对称密钥密码算法进行数字签名

算法含义

对称密钥密码算法所用的加密密钥和解密密钥通常是相同的,即使不同也可以很容易地由其中的任意一个推导出另一个。在此算法中,加、解密双方所用的密钥都要保守秘密。由于计算机速度而广泛应用于大量数据如文件的加密过程中,如RD4和DES,用IDEA作数字签名是不提倡的。

使用分组密码算法数字签名通用的加密标准有:DES,Tripl-DES,RC2,RC4,CAST等。

签名和验证过程

Lamport发明了称为Lamport-Diffle的对称算法:利用一组长度是报文的比特数(n)两倍的密钥A,来产生对签名的验证信息,即随机选择2n个数B,由签名密钥对这2n个数B进行一次加密交换,得到另一组2n个数C。

发送方从报文分组M的第一位开始,依次检查M的第I位,若为0时,取密钥A的第i位,若为1则取密钥A的第i+1位;直至报文全部检查完毕。所选取的n个密钥位形成了最后的签名。

接受方对签名进行验证时,也是首先从第一位开始依次检查报文M,如果M的第i位为0时,它就认为签名中的第i组信息是密钥A的第i位,若为1则为密钥A的第i+1位;直至报文全部验证完毕后,就得到了n个密钥,由于接受方具有发送方的验证信息C,所以可以利用得到的n个密钥检验验证信息,从而确认报文是否是由发送方所发送。

这种方法由于它是逐位进行签名的,只有有一位被改动过,接受方就得不到正确的数字签名,因此其安全性较好,其缺点是:签名太长(对报文先进行压缩再签名,可以减少签名的长度);签名密钥及相应的验证信息不能重复使用,否则极不安全。

结合对称与非对称算法的改进

对称算法与非对称算法各有利弊,所以结合各自的优缺点进行改进,可以用下面的模块进行说明:

Hash算法进行数字签名

Hash算法也称作散列算法或报文摘要,Hash算法将在数字签名算法中详细说明。

Hash算法数字签字通用的加密标准有: SHA-1,MD5等。

数字签名算法

数字签名的算法很多,应用最为广泛的三种是: Hash签名、DSS签名、RSA签名。这三种算法可单独使用,也可综合在一起使用。数字签名是通过密码算法对数据进行加、解密变换实现的,常用的HASH算法有MD2、MD5、SHA-1,用DES算法、RSA算法都可实现数字签名。但或多或少都有缺陷,或者没有成熟的标准。

Hash签名

Hash签名是最主要的数字签名方法,也称之为数字摘要法(digital digest)、数字指纹法(digital finger print)。它与RSA数字签名是单独的签名不同,该数字签名方法是将数字签名与要发送的信息紧密联系在一起,它更适合于电子商务活动。将一个商务合同的个体内容与签名结合在一起,比合同和签名分开传递,更增加了可信度和安全性。下面我们将详细介绍Hash签名中的函数与算法。

Ⅳ 数字签名的原理

数字签名是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。

它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。

(4)时间签名算法扩展阅读:

实现方法

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

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

1.密码生成算法;

2.标记算法;

3.验证算法。

阅读全文

与时间签名算法相关的资料

热点内容
pdf卡片2004 浏览:307
e算量加密锁检测不到 浏览:774
python串口读取数据类型 浏览:758
17年新款宝来压缩机不跳 浏览:105
王者打着为什么服务器升级 浏览:847
aliyunlinux安装 浏览:981
jdk8分层编译 浏览:453
单片机脉冲计数程序 浏览:825
原相机文件夹名 浏览:330
淘宝云服务器靠什么赚钱 浏览:136
单片机同步通信 浏览:259
游戏服务器如何选 浏览:746
和平精英苹果转安卓怎么转不了 浏览:52
伟福单片机实验箱 浏览:157
广东加密货币 浏览:219
利用python批量查询系统 浏览:499
什么app看左右脸 浏览:305
台湾小公主s解压密码 浏览:571
易语言锁机软件源码 浏览:159
迅雷下载完成无法解压 浏览:592