几种常见的数字签名算法比较

原文链接:数字签名算法介绍和区别

summary:

数字签名是一个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,用于验证数据完整性、认证数据来源和抗否认,遵循OSI参考模型、私钥签名和公钥验证。也是非对称加密算法和消息摘要算法的结合体,常见的数字签名算法主要有RSA、DSA、ECDSA三种,本文对数字签名算法进行详细介绍。

1. RSA

RSA是目前计算机密码学中最经典算法,也是目前为止使用最广泛的数字签名算法,RSA数字签名算法的密钥实现与RSA的加密算法是一样的,算法的名称都叫RSA。密钥的产生和转换都是一样的,包括在售的所有SSL数字证书、代码签名证书、文档签名以及邮件签名大多都采用RSA算法进行加密。

RSA数字签名算法主要包括MD和SHA两种算法,例如我们熟知的MD5和SHA-256即是这两种算法中的一类。

2. DSA

DSA全称Digital Signature Algorithm,DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,所以它比RSA要很多,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

DSA的整个签名算法流程如下:

  • 发送方使用SHA-1和SHA-2编码将发送内容加密产生的数字摘要;
  • 发送方用自己的专用密钥对摘要进行再次加密得到数字签名;
  • 发送方将原文和加密后的摘要传给接收方;
  • 接收方使用发送方提供的密钥对进行解密 ,同时对收到的内容用SHA-1/SHA-2编码加密产生同样的摘要;
  • 接收方再将解密后的摘要和d步骤中加密产生的摘要进行比对,如果两者一至,则说明传输过程的信息没有被破坏和篡改,否则传输信息则不安全。

3. ECDSA椭圆曲线数字签名算法

ECDSA是用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。而ECC(全称Elliptic Curves Cryptography)是一种椭圆曲线密码编码学。

ECC与RSA 相比,有以下的优点:

  • 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
  • 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
  • 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
  • 带宽要求低使得ECC具有广泛得应用前景。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目是基于ASP.NET的Web应用程序开发,旨在构建一个高性能、可扩展和可靠的在线平台。我们将使用ASP.NET MVC框架和C#编程语言来实现这个项目。 ASP.NET MVC是一种成熟的开发框架,它采用模型-视图-控制器的设计模式,将应用程序的逻辑和界面分离,提供了更好的代码组织和可维护性。我们选择ASP.NET MVC框架是因为它具有良好的可扩展性和灵活性,可以轻松地添加新功能和模块。 在技术方案上,我们将采用以下几个关键技术: 数据库集成:我们将使用Entity Framework作为ORM(对象关系映射)工具,与数据库进行集成。Entity Framework提供了一种简单且强大的方式来访问和操作数据库,可以大大简化数据访问层的开发工作。 安全性保护:我们将使用ASP.NET提供的身份验证和授权功能,确保只有经过授权的用户可以访问敏感数据和功能。我们还将使用加密技术来保护用户的敏感信息,如密码和支付信息。 缓存管理:为了提高应用程序的性能,我们将使用ASP.NET提供的缓存机制来缓存常用的数据和页面。这将减少对数据库和服务器的访问次数,提高应用程序的响应速度和吞吐量。 异步编程:我们将使用ASP.NET提供的异步编程模型来处理并发请求和长时间运行的任务。这将提高应用程序的并发能力和响应性能,确保用户在高负载情况下仍然能够流畅地使用应用程序。 性能优化:我们将使用一系列性能优化技术来提高应用程序的性能。这包括使用高效的算法和数据结构、使用缓存技术和数据库索引、进行代码优化和资源管理等。 通过采用这些技术方案,我们的项目将能够提供一个高性能、可扩展和可靠的Web应用程序。我们将遵循最佳的软件开发实践,进行系统测试和性能测试,以确保应用程序的质量和稳定性。
好的,我会根据您的要求来回答您的问题。 首先,我们需要了解DSA数字签名算法的原理。 DSA数字签名算法是一种基于离散对数问题的公钥密码算法,其安全性基于大整数分解和离散对数问题的困难性。DSA数字签名算法由以下几部分组成: 1. 公共参数:包括p、q、g三个参数,其中p是一个大质数,q是p-1的一个大质因子,g是模p的一个原根。 2. 公钥和私钥:公钥包括y和p两个参数,私钥包括x和p两个参数。其中,y=g^x mod p,x是私钥,y是公钥。 3. 签名算法:包括哈希函数、随机数生成函数、签名生成函数。 4. 验证算法:包括哈希函数、签名验证函数。 下面是用C++实现DSA签名算法的代码: ```c++ #include<iostream> #include<cmath> #include<cstdlib> #include<ctime> using namespace std; //欧几里得算法求最大公约数 int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } //判断是否为素数 bool isprime(int n) { if(n==2) return true; if(n<2||n%2==0) return false; for(int i=3;i<=sqrt(n);i+=2) if(n%i==0) return false; return true; } //求模反元素 int inv(int a,int p) { int d,x,y; d=gcd(a,p); if(d==1) { x=1; y=0; while(a*x%p!=1) x++; return x; } else return 0; } //生成公钥和私钥 void genkey(int &p,int &q,int &g,int &x,int &y) { srand(time(0)); do{ q=rand()%1000+1000; }while(!isprime(q)); do{ p=rand()%(2*q-1)+q; }while(!isprime(p)); for(g=2;g<p;g++) { if(pow(g,q)%p==1) continue; else if(pow(g,(p-1)/q)%p==1) continue; else break; } x=rand()%q; y=pow(g,x)%p; } //哈希函数 int hash(string msg,int p) { int h=0; for(int i=0;i<msg.length();i++) h=(h+msg[i])%p; return h; } //签名生成函数 void sign(int h,int q,int g,int x,int &r,int &s) { int k; do{ k=rand()%q; }while(k==0); r=pow(g,k)%q; s=(inv(k,q)*(h+x*r))%q; } //签名验证函数 bool verify(int h,int q,int g,int y,int r,int s) { int w,u1,u2,v; w=inv(s,q); u1=(h*w)%q; u2=(r*w)%q; v=((pow(g,u1)*pow(y,u2))%q)%p; if(v==r) return true; else return false; } int main() { int p,q,g,x,y,r,s,h; string msg="Hello world!"; genkey(p,q,g,x,y); cout<<"p="<<p<<endl; cout<<"q="<<q<<endl; cout<<"g="<<g<<endl; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; h=hash(msg,p); sign(h,q,g,x,r,s); cout<<"r="<<r<<endl; cout<<"s="<<s<<endl; if(verify(h,q,g,y,r,s)) cout<<"Verify success!"<<endl; else cout<<"Verify failed!"<<endl; return 0; } ``` 以上代码实现了DSA数字签名算法,包括生成公共参数、公钥和私钥、哈希函数、签名生成函数和签名验证函数。您可以在本地编译运行代码,进行测试和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值