椭圆曲线数字签名算法(ECDSA)
- 格式:pdf
- 大小:491.49 KB
- 文档页数:32
椭圆曲线离散对数问题是基于椭圆曲线上的离散对数难题,通常用于椭圆曲线密码学中的一种加密算法,比如椭圆曲线数字签名算法(ECDSA)和椭圆曲线Diffie-Hellman密钥交换(ECDH)等。
下面我将详细解释椭圆曲线离散对数问题的背景和基本概念:
1. 椭圆曲线基础
椭圆曲线是一个由满足特定方程的点组成的集合。
通常,椭圆曲线的方程可以表示为:
y2=x3+ax+b
其中,a和b是定义曲线的参数。
在有限域上,我们通常选择一个素数域(有限域)作为底域,比如GF(p),其中p是一个素数。
曲线上的点和加法运算定义了一个群
结构。
2. 离散对数问题
离散对数问题是在一个有限群中找到给定元素的幂等于另一个给定元素的指数。
对于椭圆曲线离散对数问题,我们考虑椭圆曲线上的点和它们的倍数。
具体而言,对于椭圆曲线上的点P和整数k,问题是找到整数n,使得nP=Q,
其中Q是已知的椭圆曲线上的点。
这里,n就是离散对数。
3. 安全性
椭圆曲线离散对数问题是一种困难的数学问题,目前尚未找到高效的经典算法来解决。
这使得椭圆曲线密码学方案变得相对安全。
然而,随着量子计算技术的发展,部分经典加密算法(如RSA、DSA)和椭圆曲线密码学也面临潜在的风险。
因此,未来的密码学研究重点之一是发展抵抗量子计算攻击的密码学算法,以确保信息安全。
总体来说,椭圆曲线离散对数问题在密码学中扮演着重要的角色,它为很多加密算法提供了安全性基础。
一、实习背景随着互联网技术的飞速发展,网络安全问题日益突出。
数字签名算法作为一种重要的安全机制,在保障信息安全、防止数据篡改、实现身份认证等方面发挥着至关重要的作用。
为了更好地了解数字签名算法,提高自身在网络安全领域的专业技能,我于近期参加了一次关于数字签名算法的实习活动。
以下是本次实习的详细报告。
二、实习内容1. 数字签名算法概述实习期间,我首先学习了数字签名算法的基本概念、原理和分类。
数字签名是一种利用密码学方法对数字信息进行签名生成和签名验证的技术。
它主要包括非对称加密算法和对称加密算法两大类。
非对称加密算法(公钥加密算法)使用两个密钥:公钥和私钥,公钥是公开的,私钥只有签名者持有。
对称加密算法则使用同一个密钥进行加密和解密。
2. 常见数字签名算法实习过程中,我重点学习了以下几种常见的数字签名算法:(1)RSA数字签名算法:RSA是目前计算机密码学中最经典算法,也是目前为止使用最广泛的数字签名算法。
RSA数字签名算法的密钥实现与RSA的加密算法是一样的,算法的名称都叫RSA。
密钥的产生和转换都是一样的,包括在售的所有SSL数字证书、代码签名证书、文档签名以及邮件签名大多都采用RSA算法进行加密。
(2)DSA数字签名算法:DSA(数字签名算法)是一种基于椭圆曲线的数字签名算法,它提供了一种基于身份的密码体制,即公钥与用户的身份信息即标识相关,从而比传统意义上的公钥密码体制有许多优点。
(3)ECDSA数字签名算法:ECDSA(椭圆曲线数字签名算法)是一种基于椭圆曲线的数字签名算法,它是DSA算法的改进版,具有更高的安全性和效率。
3. 数字签名算法在实际应用中的案例分析实习期间,我还学习了数字签名算法在实际应用中的案例分析,主要包括以下几个方面:(1)电子政务:数字签名算法在电子政务领域得到了广泛应用,如电子公文、电子合同、电子证书等。
(2)电子商务:数字签名算法在电子商务领域发挥着重要作用,如在线支付、电子发票、商品溯源等。
公钥和私钥生成算法公钥和私钥生成算法是现代加密技术中的重要组成部分,用于保护数据的安全性和保密性。
本文将介绍公钥和私钥的概念,以及常见的生成算法,帮助读者全面了解和运用这些算法。
首先,我们需要了解公钥和私钥的概念。
公钥是非对称加密算法中的一种加密密钥,用于加密数据或验证数字签名。
私钥则是与公钥配对的解密密钥,用于解密被公钥加密的数据或生成数字签名。
公钥和私钥是成对出现的,只有配对的公钥和私钥才能相互解密和验证。
生成公钥和私钥的算法有很多种,下面将介绍两种常见的算法。
第一种是RSA算法。
RSA算法是目前最为广泛使用的公钥算法之一。
它的生成步骤如下:1. 随机选择两个大素数p和q。
2. 计算n = p * q。
3. 计算欧拉函数φ(n) = (p-1) * (q-1)。
4. 随机选择一个整数e,1 < e < φ(n),且e与φ(n)互质。
5. 计算d,使得(d * e) mod φ(n) = 1。
6. 公钥为(n, e),私钥为(n, d)。
第二种是椭圆曲线算法(ECDSA)。
椭圆曲线算法是基于椭圆曲线离散对数问题的一种公钥算法,被广泛应用于数字签名和密钥交换等领域。
它的生成步骤如下:1. 选择一个椭圆曲线E上的基点G和一个生成元n。
2. 随机选择一个整数d,作为私钥。
3. 计算公钥Q = d * G。
4. 公钥为Q,私钥为d。
生成公钥和私钥的算法是非常重要的,因为安全性和可靠性直接影响到加密和数字签名的有效性。
正确选择和生成算法能够提高密钥的强度和安全性。
总之,公钥和私钥生成算法是现代加密技术中不可或缺的一部分。
通过本文的介绍,读者可以全面了解公钥和私钥的概念、作用,以及常见的生成算法。
通过正确选择和生成算法,能够提高数据的安全性和保密性,保护个人和组织的重要信息。
标题:【原创】椭圆曲线加密分析:FLEXLM ECC问答[7月16日更新到第7部分]作者:readyu时间: 2012-06-25,19:00:18链接: /showthread.php?t=152615说明:我曾经写过ECCTool用于学习和研究椭圆曲线加密在软件上的应用。
椭圆曲线密码学工具 ECCTooL v1.04原帖年代久远不再更新。
v1.05版本我放在本帖3#。
FLexLM ECC是椭圆曲线签名的一个典型应用,不可不察。
我整理了一下FLEXLM ECC方面的研究心得,准备把它完全写出来。
后面会有算法描述的例子代码。
FLEXLM ECC问答 (1)readyu 2012.61. FLEXLM是个虾米东西?FLEXlm是应用广泛的License管理工具。
宣称数千家EDA工具采用它管理授权。
FLEXlm对厂商来说,它的优点是证书管理功能强大,支持平台众多。
对最终用户来说,它的缺点是不够友好,比如Windows下,经常由于某些原因,flexlm服务启动错误。
对于破解者来说,它有着为数众多的教本。
维基百科上的条目为:/wiki/FLEXlmFLEXLM本来属于GLOBEtrotter。
Macrovision曾经收购GLOBEtrotter。
2006年的时候,FLEXLM原来的开发组跑路,另起灶头,产品叫RLM。
/index.php2008年Macrovision把FLEXLM卖了。
现在叫FlexNet Publisher。
/products/flexnet-publisher.htm2. FLexLM 的ECC(椭圆曲线加密)怎么来的?早期的flexlm采用的常规加密,不安全,能被做出lic。
这样的教程是很多的。
flexlm的安全性完全得不到保障,所以,自 v8(大约2001-2002)版本引入了公钥加密算法:椭圆曲线加密。
从此,它一直是flexlm的金钟罩。
包括v9(2003-) , v10(2004-) , v11(2007-), 到最新的版本 v11.10 (2012) 。
安全的两方协作SM2签名算法SM2是一种基于椭圆曲线密码体制的数字签名算法,适用于安全的两方协作签名方案。
在SM2算法中,有两个主要参与者:密钥生成中心(KGC)和签名者。
KGC负责生成密钥对,并将公钥广播给所有签名者。
签名者使用自己的私钥和KGC的公钥来生成签名,而验证者则使用KGC的公钥和签名者的公钥来验证签名的有效性。
SM2算法的安全性主要基于椭圆曲线密码学的难解性和随机性。
在椭圆曲线密码体制中,找到一个合法的密钥对是计算上困难的,因此攻击者很难伪造签名者的私钥。
SM2算法还使用了随机数来增加签名的随机性和不可预测性,使得攻击者更难预测签名的结果。
与其他数字签名算法相比,SM2算法具有较高的安全性和效率。
SM2算法的签名长度固定,因此比RSA等算法更适合用于网络传输等场景。
SM2算法还具有良好的抗量子计算攻击能力,因此在未来量子计算环境下也具有较好的应用前景。
SM2是一种高效安全的两方协作数字签名算法,适用于需要数字签名的各种场景,特别是在需要保证数据完整性和安全性的网络传输中具有广泛的应用前景。
随着移动互联网的飞速发展,人们对于安全、便捷的数据传输和数字签名需求日益增长。
在这篇文章中,我们将探讨轻量级SM2两方协同签名的概念、特点、优点及应用场景,以此应对移动互联网环境下的安全挑战。
轻量级SM2两方协同签名是一种基于椭圆曲线密码学的数字签名技术,其安全性高、计算量小、部署方便等特点使其在移动互联网环境中备受。
轻量级SM2两方协同签名的优点主要表现在以下几个方面。
它采用了非对称加密算法,确保了消息的机密性和完整性。
由于其算法优化,计算量相对较小,能够在移动设备上快速处理,使得用户体验更加流畅。
该技术部署方便,对设备资源要求较低,适合在各种类型的移动设备上运行。
在移动互联网环境下,轻量级SM2两方协同签名有着广泛的应用场景。
例如,在安全电子邮件中,可以利用该技术确保邮件的来源和内容不被篡改,保护用户的隐私和安全。
数字认证是一种用于验证数据完整性和身份的技术,常用于加密、数据签名和身份认证等领域。
以下是一些常用的数字认证算法:1. HMAC (Hash-based Message Authentication Code):HMAC 是一种基于哈希函数的消息认证码算法。
它使用一个密钥与消息进行计算,生成固定长度的认证码,用于验证消息的完整性和真实性。
2. RSA (Rivest-Shamir-Adleman):RSA 是一种非对称加密算法,用于数字签名和密钥交换。
它基于大数分解的数学难题,允许用户创建一对公私钥,其中私钥用于签名,公钥用于验证签名。
3. DSA (Digital Signature Algorithm):DSA 也是一种数字签名算法,用于确保消息的完整性和身份认证。
与RSA相比,DSA在密钥生成和签名验证过程中更快。
4. ECDSA (Elliptic Curve Digital Signature Algorithm):ECDSA 是一种基于椭圆曲线密码学的数字签名算法。
它提供与DSA相当的安全性,但使用更短的密钥长度,从而提供更高的性能。
5. SHA (Secure Hash Algorithm):SHA系列算法是一组广泛使用的哈希函数,如SHA-1、SHA-256、SHA-384和SHA-512。
它们用于生成消息摘要,用于验证数据完整性和生成数字签名。
6. MD5 (Message Digest Algorithm 5):MD5 是一种广泛使用的哈希函数,但由于其碰撞问题,现在已经不再推荐用于安全性要求高的应用。
7. HMAC-SHA:HMAC-SHA 是HMAC 和SHA 算法的结合,常用于生成安全的消息认证码。
请注意,随着时间的推移,一些算法的安全性可能会降低,因此在选择数字认证算法时,应考虑当前的安全标准和推荐实践。
比特币椭圆曲线方程
比特币和椭圆曲线方程是两个不同的概念,但它们在某些方面有关联。
比特币是一种数字货币,基于区块链技术实现去中心化的交易。
而椭圆曲线方程是一种数学工具,用于加密和安全通信等领域。
椭圆曲线方程是一类定义在椭圆平面上的方程,通常用于密码学和数论等领域。
在比特币中,椭圆曲线算法用于生成比特币地址和数字签名,确保交易的安全性和有效性。
具体来说,比特币使用了一种名为ECDSA(椭圆曲线数字签名算法)的加密技术,利用椭圆曲线方程对交易进行签名和验证。
通过椭圆曲线方程,可以在有限域上实现加密和签名操作。
这使得比特币的交易过程具有很高的安全性和匿名性,因为只有拥有正确密钥的人才能对交易进行签名和验证。
总之,比特币和椭圆曲线方程虽然属于不同的领域,但它们在加密和安全通信方面有着密切的联系。
比特币利用椭圆曲线方程实现数字签名和交易验证,确保了交易的安全性和有效性。
同时,椭圆曲线方程也为其他领域提供了强大的加密和安全通信工具。
ecdsa 3044签名格式
在签署交易时重复使用一个数字,要了解此机器人的工作原理,我们需要先查看 ECDSA 和数字签名。
是椭圆曲线数字签名算法,或 ECDSA。
顾名思义,ECDSA 是一种生成数字签名的方案。
这些签名是我们证明账户和资产所有权的方式。
每个签名证明两件事:
1.您拥有一些称为私钥的秘密。
每个私钥都与一个称为公钥的公知密钥相关联。
您的加密“地址”是一个公钥。
2.您使用私钥对特定消息进行签名。
在我们的例子中,消息是交易。
ECDSA 之所以有效,是因为您可以轻松地使用私钥生成公钥,但不能使用公钥来导出私钥。
但是,您可以在某些有限条件下使用签名来撤销私钥。
为了生成签名,ECDSA 需要一个私钥 d、一个随机数 k 和消息的哈希值 h。
它将这些与与私钥 d 相关联的公钥 Q 以及由ECDSA 算法标准化的两个数字 G 和 n 组合在一起。
这些一起用于使用以下算法计算数字签名:
r = k * G \mod n
s = \frac{h + d * r}{k} \mod n
r 和 s 一起形成数字签名。
椭圆曲线签名算法椭圆曲线签名算法(Elliptic Curve Signatures, ECS)是公共密钥加密系统中一种基于椭圆曲线离散对数问题的数字签名算法。
它的安全性和效率都很高,在现代密码学中具有重要意义。
下面将详细讲解其基本概念、算法流程和应用场景。
一、基本概念1.椭圆曲线椭圆曲线是一种在平面上定义的曲线,其数学性质由Weierstrass方程描述:y² = x³ + ax + b。
其中a、b为常数,满足4a³ + 27b² ≠ 0。
这样的椭圆曲线形成了一个群结构,可以被应用于密码学中。
2.离散对数问题在椭圆曲线上,离散对数问题是指对于一个给定的点P和整数k,在群中求解kP的过程。
这个过程比较困难,需要耗费大量计算时间,因此可以用于构建加密和数字签名算法。
3.数字签名数字签名是数字通信中用于保证消息完整性和身份认证的技术手段。
发送方使用自己的私钥对消息进行签名,接收方使用发送方的公钥进行验证。
只有私钥持有人才能够生成合法的数字签名,其他人无法伪造。
二、算法流程椭圆曲线签名算法的流程如下:1.密钥生成选择一个椭圆曲线,并取一个基点G作为生成元。
然后选择一个随机数d作为私钥,计算公钥Q = dG。
d作为私钥需要被保密,而Q作为公钥可以向其他人公开。
2.签名假设要对消息M进行签名,首先计算消息的哈希值h = H(M),然后选择一个随机数k,计算点R = kG和s = k⁻¹(h + dR) mod n,其中n为椭圆曲线的阶。
经过这一步操作得到的(s, R)即为对消息M的数字签名。
3.验证接收方收到消息和数字签名后,计算消息的哈希值h = H(M)。
然后计算点U₁ = s⁻¹hG + s⁻¹R,如果U₁ = O,则数字签名无效。
否则,计算点U₂ = Q⁻¹sR,如果U₂的x坐标与R的x坐标相等,则数字签名有效。
三、应用场景椭圆曲线签名算法广泛应用于数字证书、支付系统、智能卡等领域,具有以下优势:1.安全性高椭圆曲线签名算法利用椭圆曲线的离散对数问题保证安全性,破解难度大。
btc私钥生成公钥步骤
生成比特币私钥和公钥是加密货币领域中的重要步骤。
以下是生成比特币私钥和公钥的一般步骤:
1. 随机选择一个私钥,比特币私钥通常是一个随机选择的256位数字,通常表示为64个十六进制字符。
这个私钥必须是足够随机并且安全,以避免被破解。
2. 通过椭圆曲线加密算法生成公钥,使用椭圆曲线数字签名算法(ECDSA),通过私钥生成对应的公钥。
这是通过椭圆曲线加密算法的数学运算来实现的。
3. 计算比特币地址,通过对公钥进行哈希运算,并添加版本字节和校验和,生成比特币地址。
需要注意的是,生成私钥和公钥的过程需要非常小心,确保私钥的安全性,以免被盗。
同时,使用加密货币钱包或工具来生成私钥和公钥是非常重要的,因为这些工具通常会提供更安全和方便的方式来执行这些步骤。
总的来说,生成比特币私钥和公钥是一个涉及到密码学和数学算法的复杂过程,需要谨慎对待,以确保安全性和准确性。
基于智能卡的椭圆曲线数字签名算法的实现智能卡椭圆曲线数字签名算法(ECC-SCDS)是一种基于椭圆曲线密码学(ECC)的数字签名算法。
它是一种快速、可靠和安全的数字签名方式,可提供身份认证和密钥协商的功能,并能够准确地计算出签名。
它通常在智能卡和高安全领域中使用,比如,在完成一笔支付交易时。
ECC-SCDS算法当前使用最广泛的是椭圆曲线Diffie-Hellman(ECDH)算法,它可以提供高安全性和少量计算开销,允许客户端和服务器端之间进行加密、解密以及数字签名。
ECC-SCDS需要两个密钥:私钥和公钥。
私钥是一个点,永远不能够被公开,以保护用户的私人信息;公钥是另一个点,可以被任何感兴趣的人使用来验证签名。
签名过程是一个安全的一次性操作,要求发起方拥有私钥访问,并在认证过程中提供一系列的数字证书。
其中,首先应为发起方生成椭圆曲线(EC)域点,其形式为 E(k, x),其中,K 为一个参数,表示在椭圆曲线结构上任意设定的参数,x 为一个包含在EC之中的点,表示注册者所要签名的身份信息。
随后,发起方将这个EC域点 E(k, x) 传送给接收方以作为其数字签名证明。
接收方向发起方发送对公开验证函数的输入,以及用于验证数字签名的提供者的哈希值。
最后,接收方使用发起方的EC域点,公钥,哈希值,输入函数,以及数字签名,对计算机存储在发起者身份证书中的信息作出验证。
如果验证通过,则表示发起方签名成功;如果验证失败,则表示发起方签名失败。
智能卡椭圆曲线数字签名算法具有安全性和可靠性的优点,同时可运行的算法的复杂性低,计算量小,因此它很容易用于智能卡上,可以改善用户的体验。
总之,智能卡椭圆曲线数字签名算法是一种非常有用的安全加密技术,能够满足复杂的认证和加密要求。
openssl 公钥参数一、概述OpenSSL是一个广泛使用的安全套件库,提供了许多加密、身份验证和数据传输功能。
其中,公钥参数是OpenSSL中用于处理公钥和私钥的重要概念。
本文档将介绍OpenSSL中的公钥参数及其相关概念。
二、公钥类型OpenSSL支持多种公钥类型,包括RSA、DSA、ECDSA等。
每种公钥类型具有不同的参数设置和用途。
1.RSA公钥:RSA是一种非对称加密算法,使用两个密钥:公钥和私钥。
公钥用于加密数据,而私钥用于解密数据。
2.DSA公钥:DSA(数字签名算法)是一种用于数字签名的公钥算法。
DSA使用一个密钥对:一个用于生成数字签名的私钥和一个用于验证签名的公钥。
3.ECDSA公钥:ECDSA(椭圆曲线数字签名算法)也是一种用于数字签名的公钥算法,使用椭圆曲线密码学技术。
ECDSA使用一个密钥对:一个私钥和一个用于验证签名的公钥。
三、公钥参数设置在OpenSSL中,可以通过各种命令和选项来设置公钥参数。
以下是一些常用的参数设置方法:1.生成RSA密钥对:```shellopensslgenpkey-algorithmRSA-outprivate_key.pem```2.生成DSA密钥对:```shellopensslgendsa-outprivate_key.pem```3.生成ECDSA密钥对:```shellopensslecparam-genkey-namesecp256k1|opensslec-aes256-outprivate_key.pem```上述命令将生成相应的私钥文件(以`.pem`为后缀),并将其导出为PEM格式。
还可以使用其他选项和参数来进一步配置密钥对,如设置密钥长度、选择不同的椭圆曲线等。
四、公钥导出和导入在OpenSSL中,可以使用`-export`选项将私钥导出为PEM格式,以便与其他工具或系统进行交换。
以下是一个导出RSA私钥的示例:```shellopensslpkey-inprivate_key.pem-pubout-outpublic_key.pem```导出后,可以使用其他工具或系统导入该公钥。
ECC算法和加密应用大全(一)基本原理ECC(Elliptic Curves Cryptography)加密算法是一种公钥加密算法,与主流的RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度。
近年来,人们对ECC的认识已经不再处于研究阶段,开始逐步进入实际应用,如国家密码管理局颁布的SM2算法就是基于ECC算法的。
下面我们来认识一下ECC的工作原理。
椭圆曲线定义在引入椭圆曲线之前,不得不提到一种新的坐标系-------射影平面坐标系,它是对笛卡尔直角坐标系的扩展,增加了无穷远点的概念。
在此坐标系下,两条平行的直线是有交点的,而交点就是无穷远点。
两者的变换关系为:笛卡尔坐标系中的点a(x,y),令x=X/Z,y=Y/Z,则射影平面坐标系下的点a 的坐标为(X,Y,Z),如点(2,3)就转换为(2Z,3Z,Z)。
椭圆曲线定义:一条椭圆曲线在射影平面上满足方程:Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3的所有点的集合,且曲线上每个点都是非奇异的。
该方程有名维尔维斯特拉斯方程,椭圆曲线的形状不是椭圆,只是因为其描述的方程类似于计算一个椭圆周长的方程。
转换到笛卡尔坐标系下的方程为:y2+a1xy+a3y = x3+a2x2+a4x+a6加法法则运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。
我们规定P+Q=R。
(如图)此处+不是简单的实数相加,是抽象出来的O∞+P=P,O∞为零元曲线上三个点A,B,C处于一条直线上,则A+B+C=O∞下面,我们利用P、Q点的坐标(x1,y1),(x2,y2),求出R=P+Q的坐标(x4,y4)。
P,Q,R'共线,设为y=kx+b,若P≠Q,k=(y1-y2)/(x1-x2)若P=Q,k=(3x2+2a2x+a4-a1y) /(2y+a1x+a3)解方程组得到:x 4=k2+ka1-a2-x1-x2;y 4=k(x1-x4)-y1-a1x4-a3;密码学中的椭圆曲线定义在有限域Fp中定义一个椭圆曲线,常用y2=x3+ax+bFp中只有p个元素,p为素数Fp中,a+b≡c (mod p),a×b≡c (mod p),a/b≡c (mod p)4a3+27b2≠0(mod p) a,b是小于p的非负整数x,y属于0到p-1间的证书,曲线标记为Ep(a,b)阶:椭圆曲线上一点P,存在正整数n,使得nP=O∞,则n为P的阶,若n不存在,则P是无限阶的,有限域上定义的椭圆曲线上所有点的阶都存在。
摘要椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线对数字签名算法(DSA)的模拟。
ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。
它在1998年既已为ISO所接受,并且包含它的其他一些标准亦在ISO的考虑之中。
与普通的离散对数问题(discrete logarithm problem DLP)和大数分解问题(integer factorization problem IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm problem ECDLP)没有亚指数时间的解决方法。
因此椭圆曲线密码的单位比特强度要高于其他公钥体制。
本文将详细论述ANSIX9.62标准及其协议,安全,实现,互操作性方面的问题。
1、介绍数字签名算法(DSA)在联邦信息处理标准FIPS中有详细论述,称为数字签名标准。
它的安全性基于素域上的离散对数问题。
椭圆曲线密码(ECC)由Neal Koblitz和Victor Miller 于1985年发明。
它可以看作是椭圆曲线对先前基于离散对数问题(DLP)的密码系统的模拟,只是群元素由素域中的元素数换为有限域上的椭圆曲线上的点。
椭圆曲线密码体制的安全性基于椭圆曲线离散对数问题(ECDLP)的难解性。
椭圆曲线离散对数问题远难于离散对数问题,椭圆曲线密码系统的单位比特强度要远高于传统的离散对数系统。
因此在使用较短的密钥的情况下,ECC可以达到于DL系统相同的安全级别。
这带来的好处就是计算参数更小,密钥更短,运算速度更快,签名也更加短小。
因此椭圆曲线密码尤其适用于处理能力、存储空间、带宽及功耗受限的场合。
ECDSA是椭圆曲线对DSA的模拟。
ECDSA首先由Scott和Vanstone在1992年为了响应NIST对数字签名标准(DSS)的要求而提出。
ECDSA于1998年作为ISO标准被采纳,在1999年作为ANSI标准被采纳,并于2000年成为IEEE和FIPS标准。
包含它的其他一些标准亦在ISO的考虑之中。
本文中我们将介绍ANSI X9.62标准。
也将介绍一些签名的基础知识以及协议、安全性、实现、互操作性方面的问题。
本文其他部分的安排如下:第二节中我们将回顾数字签名方案和DSA,第三节和第四节将分别介绍有限域和椭圆曲线,第五节将讲述域参数的产生和参数有效性的验证,第六节将讲述密钥对的产生和公钥有效性的验证,第七节的内容是ECDSA的签名和验证过程。
第八章论证ECDSA的安全性,第九节和第十节讲述的是ECDSA协议和实现方面的问题。
2、数字签名方案2.1背景知识数字签名的目的是提供一个手写签名的数字化副本。
签名是一个依赖于签名者私钥和被签名一段消息的比特串。
签名必须是可验证的,即如果对签名的真实性存在疑问,必须由一个中立的第三方作出公正的裁决,并且无需知道签名者的私钥。
对签名的抵赖以及伪造签名应该能被发现。
本文论述的是非对称摘要数字签名。
“非对称”即用户的密钥对各不相同。
用户的私钥用于签名,其他用户用他的公钥来检验签名的真实性。
摘要是指对一段消息先用哈希函数进行摘要计算,尔后再对消息摘要进行签名,而不是消息。
安全性:从理论上讲,在选择消息攻击下,数字签名应该是不可伪造的。
这一概念由Goldwasser,Micali和Rivest提出。
更一般的讲就是攻击者获得用户A的摘要和签名,但他无法用其他的摘要来伪造这样一个签名。
应用:数字签名方案用于以下一些用途:数据完整性(确保数据没有被未知或未授权的中间人改变),数据源认证(确保数据的来源是可信的),不可否认性(确保用户不能对自己的行为进行抵赖)。
数字签名是密码学协议的基本组成部分,并且可以提供其他一些服务如:身份认证(FIPS 196,ISO/IEC 9798-3),密钥传递前的认证(ANSI X9.63,ISO/IEC 11770-3),经验证的密钥协商(ISO/IEC 11770-3)。
分类:数字签名方案可以根据所基于的数学难题进行分类:1、基于大整数分解(IF)的方案,安全性基于大整数分解的难度。
实例有RSA方案和Rabin 方案。
2、基于离散对数(DL)的方案,安全性基于有限域上普通的离散对数问题。
实例包ElGamal,Schnorr,DSA和Nyberg-Rueppel方案。
3、基于椭圆曲线(EC)的方案,安全性基于椭圆曲线离散对数问题。
2.2数字签名算法DSA于1991年由NIST提出,并在FIPS186中得到确认。
DSA可以看作是ElGamal签名方案的一个变形。
其安全性建立在素域上的离散对数问题的困难性之上。
DSA参数的产生:每个用户的安全参数产生如下:1、选择160比特的素数q和1024比特的素数p,满足 。
2、在有限域中寻找q阶循环子群的生成元g,具体方法是在选取元素h计算g=mod p,当g≠1时即找到满足要求的g。
3、域参数就是p,q和g。
DSA密钥对的产生:每个拥有域参数p,q和g进行如下操作:1、选择随机或伪随机数x满足1<x<p-1。
2、计算。
3、用户的私钥是x,公钥是y。
DSA签名过程:1、选择随机或伪随机数k满足1<k<p-1。
2、计算,若r=0则返回第一步。
K-13、计算。
4、计算e=SHA-1(m)。
5、计算,若s=0则返回第一步。
6、对消息m的签名就是(r,s)。
DSA签名的验证:为了验证(r,s)是对m的签名,需要使用签名者的域参数(p,q,g)和公钥y进行如下运算:1、验证r,s在区间[1,q-1]中。
2、计算e=SHA-1(m)。
3、计算。
4、计算和5、计算及。
6、如果则认可此签名。
安全性分析:由于r和s均小于q,故DSA签名长度小于320比特。
DSA的安全性依赖于两个方面,它们都基于离散对数问题的难解性,一个是Zp*上的离散对数问题,目前已有数域筛算法去加以解决,这是一种亚指数级的算法。
其平均运算时间为:其中c约为1.923,若p是1024比特的素数,则上式的计算量是无法接受的。
因此目前1024比特的DSA可以应付现有攻击。
另一个是q阶子群上的离散对数问题,给定p,q,g和y,,要寻找x,目前最好的算法是Pollard’s Rho算法,大约要做步。
若q是160比特的,则该算法在计算上不可行,因此DSA是很安全的。
DSA的安全性主要取决于p和q的尺寸。
增加其中一个的尺寸而不增加另一个的尺寸对安全性的提高并无益处。
此外,对两种离散对数问题解决算法的提高都会削弱DSA。
安全参数的产生:DSA的早期版本受到了一些批评,因此FIPS186推出了一种新模式以产生素数p和q以及“可证明的随机性”。
它可以防止用户故意构造一个利于破译的素数(例如可以由CA来产生域参数并发送给用户)。
FIPS指定了两个模式,分别使用SHA-1和DES,产生伪随机私钥x。
FIPS186指定使用这两种模式以及其他经过FIPS认可的安全模式。
3、有限域我们将简要介绍有限域的知识,更多详细内容请参看其他书籍。
有限域由一个有限集合F和F上的两个二元运算组成,这两个运算满足某种运算规则,分别称为加法和乘法。
有限域的阶即域中元素的个数。
当仅当q是素数的幂次时存在一个q阶有限域,这个有限域是唯一的,记作。
有很多方法可以描述的元素,有些描述方式可以使域上的软件及硬件运算更加高效。
若q=pm,其中p为素数,m为正整数,则p称为的特征,m称为的度。
至于椭圆曲线密码,一般基于素域或是多项式域。
在3.1和3.2中我们将分别介绍这两种有限域上的元素和运算以及多项式域的两种表示方法:多项式表示方法和正规基表示方法。
3.1有限域FpP为素数,有限域称为素域,由整数集{1,2,……,p-1}和其上的符合下列规则的运算组成:1、加法。
a,b∈p,a+b=r,r为a与b的和模p所得的值。
2、乘法。
a,b∈p,a*b=s,s为a与b的积模p所得的值。
3、求逆运算。
a是中的非零元素,a的逆是唯一的,记作,有例1.,全部元素为{1,2,……,22},其上三种运算:12+20=9,8*9=3,8-1=3。
3.2有限域称之为特征为2的有限域或者一个二进制有限域,可以看做是上的m维向量空间。
中存在m个不同的元素,任一个ß∈均可写为以下形式:集合{}称为在上的基。
有这样一个基,域中所有元素就可以用一个比特串(a0,a1,……am-1)来表示。
这样,加法就可以用向量的逐比特异或运算来表示,乘法运算则依赖于基的选择。
基的选择方式是多种多样的。
一些基可以使运算变得高效。
ANSI X9.62给出了两种基,分别是多项式基和正规基。
多项式基是上的m次本原多项式,那么f(x)定义了一个多项式基。
域元素有限域由上的所有不多于m次的多项式组成。
域元素可以写为比特串形式。
因此的元素可以写为长度为m的比特串。
乘法单位元是(0,0,…,0,1),加法零元是全零串(0,0,……,0)。
域运算:加法:乘法:求逆运算:选择不可约多项式ANSI X9.62的两条标准如下:1.如果在上有m次三项本原多项式,则模多项式应在这些多项式中选取k最小的那个。
2.若不存在那样的多项式,则f(x)应为m次5项本原多项式。
这时有三条原则:(1)应尽量小。
(2)确定时k2应尽量小。
(3),确定时,应尽量小。
正规基表示的正规基有着如下形式:。
正规基总是存在的。
任何元素,能够写成如下的形式:。
正规基表示使得元素的平方运算效率很高。
另一方面,不同元素的乘积通常来说会显得效率很低。
因此,ANSI X9.62采用了高斯正规基,它的乘法运算更简单和有效率。
高斯正规基正规基的T值表示正规基乘法运算的复杂度。
通常来说,T值越小,表示乘法运算更有效。
给定m,T,,至多有一个GNB的T值为T。
高斯正规基的存在性高斯正规基总是存在的,当m不能被8整除。
一个Type 为T的高斯正规基存在的充分必要条件:p是素数且p=Tm+1,(Tm/k,m)=1 其中k为在模p下乘法阶为2.域元素域中的任意元素a可以表示为:.故有:。
零元素表示为0=(0,0,...0),乘法单位元表示1=(1,1,...,1).域运算加法与多项式基表示类似。
平方运算就是对向量表示的域元素做一次简单循环移位。
乘法运算p=Tm+1,,阶为T。
定义序列T为偶数和奇数的两种情况。
求逆运算跟多项式基表示类似。
高斯正规基的选取ANSI X9.62给定了下列原则:1.如果存在Type值为2的,必须使用。
2.如果不存在Type值为2的,若存在Type值为1的,必须使用。
3.如果上面两个条件都不满足,则选择Type值最小的高斯正规基5、ECDSA域参数ECDSA的域参数包括一条合适的椭圆曲线和其上一个基点G。
域参数可以全局公开,也可以只对单个用户公开。