版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 dsa数字签名算法1 引言为了确保数据传输的安全性,不得不采取一系列的安全技术,如加密技术、数字签名、身份认证、密钥管理、防火墙、安全协议等。其中数字签名就是实现网上交易安全的核心技术之一,它可以保证信息传输的保密性、数据交换的完整性、发送信息的不可否认性、交易者身份的确定性等。dsa(digital signature algorithm,数字签名算法,用作数字签名标准的一部分),它是另一种公开密钥算法,它不能用作加密,只用作数字签名。dsa使用公开密钥,为接受者验证数据的完整性和数据发送者的身份。它也可用于由第三方去确定签名和所签数据的真实性。dsa算法的安全性基于解离散对数的困难性,这
2、类签字标准具有较大的兼容性和适用性,成为网络安全体系的基本构件之一。2. 数字签名2.1 数字签名的概念数字签名在iso74982标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。数字签名是通过一个单向函数对要传送的信息进行处理得到的用以认证信息来源并核实信息在传送过程中是否发生变化的一个字母数字串。数字签名提供了对信息来源的确定并能检测信息是否被篡改。数字签名要实现的功能是我们平常的手写签名要实现功能的扩展。平常在书面文件上签名的主要作用有两点,一是
3、因为对自己的签名本人难以否认,从而确定了文件已被自己签署这一事实;二是因为自己的签名不易被别人模仿,从而确定了文件是真的这一事实。采用数字签名,也能完成这些功能:(1)确认信息是由签名者发送的;(2)确认信息自签名后到收到为止,未被修改过;签名者无法否认信息是由自己发送的。数字签名和手签的区别是:手签是模拟的,易伪造,而数字签名是基于数学原理的,更难伪造。数字签名的技术基础是公钥密码技术。密钥必须以某种安全的方式告诉解密方。大家熟悉的des加密标准就是一种对称加密技术。1976年,diffie和hellman在一篇名叫“new direction in cryptog raphy(密码学的新方
4、向)”一文中提出了一个新的思想,即:不仅加密算法本身可以公开,就是加密用的密钥本身也可以公开。这就是公钥密码体制。其中使用的密钥被分解为一对:一把公钥和一把私钥。只要私钥保密就可以了,公钥可以发到因特网(如网站的黄页)等公开地方供别人查询和下载。2.2 数字签名的原理 图1. 数字签名的原理图处理过程: (采用双重加密) (1)使用sha编码将发送文件加密产生128bit的数字摘要; (2)发送方用自己的专用密钥对摘要再加密,形成数字签名; (3)将原文和加密的摘要同时传给对方; (4)接受方用发送方的公共密钥对摘要解密,同时对收到的文件用sha编码加密产生同一摘要; (5)将解密后的摘要和收
5、到的文件在接受方重新加密产生的摘要相互对比,如果两者一致,则说明在传送过程中信息没有破坏和篡改。否则,则说明信息已经失去安全性和保密性。3数字签名的方案3.1 rsa数字签名系统 rsa算法中数字签名技术实际上是通过一个哈希函数来实现的。数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。用rsa或其它公开密钥密码算法的最大方便是没有密钥分配问题。因为公开密钥加密使用两个不同的密钥,其中有一个是公开的,另一个是保密的。公开密钥可以保存在系统目录内、未加密的电子邮件信息中、电话黄页(商业电话)上或公告牌里,网上的任何用户都可获得公开密钥
6、。 3.2 hash签名 hash签名是最主要的数字签名方法,也称之为数字摘要法(digital digest)或数字指纹法(digital finger print)。它与rsa数字签名是单独的签名不同,该数字签名方法是将数字签名与要发送的信息紧密联系在一起,它更适合于电子商务活动。将一个商务合同的个体内容与签名结合在一起,比合同和签名分开传递,更增加了可信度和安全性。一个hash函数满足:h可以作用于一个任意长度的数据块;h产生一个固定长度的输出;h(x)对任意给定的x计算相对容易,无论是软件还是硬件实现;对任意给定码h,找到x满足h(x)=h具有计算不可行性;对任意给定的数据块x,找到满
7、足h(y)=h(x)的yx具有计算不可行性;找到任意数据对(x,y),满足h(x) = h(y)是计算不可行的。用hash函数实验签名的方案如下:发送方x:准备消息m,计算其散列码h(m),用x的私钥对散列值构成签名kx-1h(m),并将消息m及签名kx-1 h(m)发送给y接收方y:对收到的消息m计算用h(m),利用公钥解密kx-1h(m),然后比较kx kx-1 h(m)和h(m),如果kx kx-1 h(m) h(m),则签名得到验证。3.3 椭圆曲线数字签名算法(ecdsa)椭圆曲线的数字签名具有与rsa数字签名和dsa数字签名基本上相同的功能,但实施起来更有效,因为椭圆曲线数字签名在
8、生成签名和进行验证时要必rsa和dsa来得快。 椭圆曲线数字签名的速度要比rsa、dsa快,还可以用在一些较小、对资源有一定限制得设备如智能卡(含有微处理器芯片得塑料片)中。3.4 美国数字签名标准(dsa)数字签名算法(digital signature algorithm,dsa)是schnorr和elgamal签名算法的变种,由美国国家标准化技术研究院(nist)和国家安全局共同开发。dsa是基于离散对数的难度。4 基于dsa数字签名的实现方法 建立在公钥密码技术上的数字签名方法有很多,有rsa签名、dsa签名和椭圆曲线数字签名算法(ecdsa)等等。下面对dsa签名进行详细分析。(1)
9、dsa算法参数说明dsa算法中应用了下述参数:p:l bits长的素数。l是64的倍数,范围是512到1024;q:p - 1的160bits的素因子;g:g = hp-1 mod p,h满足h 1;x:1x q,x为私钥;y:y = gx mod p ,( p, q, g, y )为公钥;h( x ):单向hash函数。在dss中选用安全散列算法 ( secure hash algorithm,sha )。p, q, g:可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。(2)签名及验证协议签名及验证协议如下:p产生随机数k,k loadicon(idr_mainframe
10、);void dmydlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(dmydlg)ddx_text(pdx, idc_p, m_p);ddx_text(pdx, idc_q, m_q);ddx_text(pdx, idc_g, m_g);/ mpdified in 2007.6.10ddx_text(pdx, idc_y, m_y);ddx_text(pdx, idc_s, m_s);ddx_text(pdx, idc_v, m_v);ddx_cbindex(pdx, idc_com
11、bo, m_len);ddx_text(pdx, idc_output, m_out);ddx_text(pdx, idc_input, m_in);ddx_text(pdx, idc_editfile, m_file);ddx_text(pdx, idc_string, m_string);/afx_data_mapbegin_message_map(dmydlg, cdialog)/afx_msg_map(dmydlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_bn_clicked(idc_button_get, onbu
12、ttonget)on_bn_clicked(idc_encrypt, onencrypt)on_bn_clicked(idc_decrypt, ondecrypt)on_bn_clicked(idc_btnfile, onbtnfile)on_en_change(idc_editfile, onchangeeditfile)on_en_change(idc_string, onchangestring)on_bn_clicked(idc_sha1_radio, onsha1radio)on_bn_clicked(idc_md5_radio, onmd5radio)on_cbn_editchan
13、ge(idc_combo, oneditchangecombo)on_bn_clicked(idc_button1, onbutton1)/afx_msg_mapend_message_map()/ dmydlg message handlersbool dmydlg:oninitdialog()cdialog:oninitdialog();/ add about. menu item to system menu./ idm_aboutbox must be in the system command range.assert(idm_aboutbox & 0xfff0) = idm_abo
14、utbox);assert(idm_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu);/ set the icon for this dialog. the framework does this automatically/ when the applications main window is not a dialogseticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set sm
15、all icon/ todo: add extra initialization herecheckradiobutton(idc_md5_radio,idc_sha1_radio,idc_md5_radio);updatedata(false);return true; / return true unless you set the focus to a controlvoid dmydlg:onsyscommand(uint nid, lparam lparam)if (nid & 0xfff0) = idm_aboutbox)caboutdlg dlgabout;dlgabout.do
16、modal();elsecdialog:onsyscommand(nid, lparam);/ if you add a minimize button to your dialog, you will need the code below/ to draw the icon. for mfc applications using the document/view model,/ this is automatically done for you by the framework.void dmydlg:onpaint() if (isiconic()cpaintdc dc(this);
17、 / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rect);int x = (rect.width() - cxicon + 1) / 2;int y = (rect.height()
18、- cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon);elsecdialog:onpaint();/ the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor dmydlg:onquerydragicon()return (hcursor) m_hicon;void dmydlg:onbuttonget() / todo: add your control notificatio
19、n handler code hereready=1;updatedata(true); ctime t0=ctime:getcurrenttime();/*int len=8; /int len=2; modified in 2007 6. 9for(int i=0;im_len;i+)len*=2;p.mov(0);q.mov(0);n.mov(0);e.mov(0);p.getprime(len);q.getprime(len);n.mov(p.mul(q);n.put(m_p);p.m_ulvalue0-;q.m_ulvalue0-;p.mov(p.mul(q);d.mov(0x100
20、01);/mpdified in 2007.6.10/m_d=10001;/mpdified in 2007.6.10e.mov(d.euc(p);e.put(m_q); ctime t1=ctime:getcurrenttime(); ctimespan t=t1-t0;m_out.format(%d,t.gettotalseconds();m_out+= 秒;q.m_ulvalue0=0;*/cbigint r,s,u,v4,w,p,q,t; /,h,g,x,y;int n=3,b=31,l=512,g=160,t=1;t.mov(pow2(2,g);while (t)s.mov(make
21、randnumber(g);/r.mov(s);/r.mov(r.add(1);/r.mov(r.mod(t);/u.mov(sha(s);q.mov(sha(s);q.m_ulvalue0=q.m_ulvalue0|0x1;q.m_ulvalue4=q.m_ulvalue4|0x80000000; while (q.rab()=0) q.mov(q.add(2);int c=0,n=2;for (int k=0;k4;k+)vk.mov(s);vk.mov(vk.add(n+k);vk.mov(vk.mod(t);vk.mov(sha(vk);w.mov(0);r.mov(1);for (
22、k=0;k3;k+)vk.mov(vk.mul(r);w.mov(w.add(vk);r.mov(r.mul(t);s.mov(pow2(2,b);vk.mov(vk.mod(s);vk.mov(vk.mul(r);w.mov(w.add(vk);r.mov(w);r.mov(r.add(1);w.mov(w.mod(q);r.mov(r.sub(w);p.mov(r);while (p.rab()=0) c=c+1;n=n+n+1;if (c=4096) break;p.mov(p.add(q);p.mov(p.add(q);if (c256)m_out=_t(n不得大于256位);upda
23、tedata(false);return;k.mov(makerandnumber(160);r.mov(g.rsatrans(k,p);r.mov(r.mod(q);s.mov(k.euc(q);g.get(m_in);t.mov(x.mul(r);t.mov(t.mod(q);t.mov(t.add(g);s.mov(s.mul(t);s.mov(s.mod(q);r.put(m_out);s.put(m_s);/*for(int i=0;im_in.getlength();i+)if(m_ini9)&(m_inif)&(m_inif)m_out=_t(待加密数据必须为0-9或a-f或a-
24、f组成的整数);updatedata(false);return;*/p.get(m_in);/if(p.cmp(n)=0)/m_out=_t(待加密数据必须小于n);/ updatedata(false);/return;/q.mov(p.rsatrans(e,n);/q.put(m_out);updatedata(false);void dmydlg:ondecrypt() cbigint w,u1,u2,t;/ todo: add your control notification handler code hereif(ready=0)|(q.m_ulvalue0=0)m_out=_t
25、(请先进行数字签名); updatedata(false);return;w.mov(s.euc(q);u1.get(m_in);u1.mov(u1.mul(w);u1.mov(u1.mod(q);u2.mov(r.mul(w);u2.mov(u2.mod(q);v.mov(g.rsatrans(u1,p);v.mov(v.mod(p);t.mov(y.rsatrans(u2,p);t.mov(t.mod(p);v.mov(v.mul(t);v.mov(v.mod(p);v.mov(v.mod(q);if (v.cmp(r)=0) v.put(m_v);r.put(m_v);/q.get(m_
26、out);/p.mov(q.rsatrans(d,n);/p.put(m_out);updatedata(false);void dmydlg:onbtnfile() / todo: add your control notification handler code herecfiledialog m_fileopen(true); /设置打开窗体的标题 m_fileopen.m_ofn.lpstrtitle = _t(打开文件); m_fileopen.m_ofn.lpstrfilter = _t(文件 (*.*)0*.*00); /点击浏览按钮 if(idok = m_fileopen.
27、domodal() /获取打开的文件路径 cstring m_filename = m_fileopen.getpathname(); cedit* pedit = (cedit*)(getdlgitem(idc_editfile); /将选择的文件路径名显示到idc_editfile表识的edit中 pedit-setwindowtext(m_filename); void byte2strhash(unsigned char *hash,int hashlen,unsigned char *out)int i,x,y;for (i = 0;i 4;y += 0x30;if (y 0x39)
28、 y+= 0x07;x = hashi & 0x0f;x += 0x30;if (x 0x39) x+= 0x07;outi 1 = y;out(i 1)+1 = x;outhashlen 1 = 0x00;void dmydlg:onchangeeditfile() / todo: if this is a richedit control, the control will not/ send this notification unless you override the cdialog:oninitdialog()/ function and call cricheditctrl()
29、.seteventmask()/ with the enm_change flag ored into the mask./ todo: add your control notification handler code hereupdatedata(true); cstring open=m_file; md5_ctxmd5_ctx; sha1_ctx sha1_ctx;int hashradio; hashradio=getcheckedradiobutton(idc_md5_radio,idc_sha1_radio);if(hashradio=idc_md5_radio) /md5 i
30、nt i;unsigned char digest16,output16;file* file; unsigned char buffer16384; md5init(&md5_ctx);file = fopen(open, rb); i = fread(buffer, 1, 16384, file); md5update(&md5_ctx, buffer, i); md5final(digest, &md5_ctx); fclose(file);byte2strhash(digest,16,output);cstring str(output);setdlgitemtext(idc_inpu
31、t,str);else /sha-1int i;unsigned char digest20,output20;file* file; unsigned char buffer16384; sha1init(&sha1_ctx);file = fopen(open, rb); i = fread(buffer, 1, 16384, file); sha1update(&sha1_ctx, buffer, i); sha1final(digest, &sha1_ctx); fclose(file);byte2strhash(digest,20,output);cstring str(output
32、);setdlgitemtext(idc_input,str);void dmydlg:onchangestring() / todo: if this is a richedit control, the control will not/ send this notification unless you override the cdialog:oninitdialog()/ function and call cricheditctrl().seteventmask()/ with the enm_change flag ored into the mask./ todo: add your control notification handler code hereupdatedata(true); md5_ctxmd5_ctx; sha1_ctx sha1_ctx;int hashradio; hashradio=getcheckedradiobutton(idc_md5_radio,idc_sha1_radio);if(hashradio=idc_md5_radio) /md5unsigned char digest16,o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年撰写:中国氟洛芬项目风险评估报告
- 2024-2030年撰写:中国培古立行业发展趋势及竞争调研分析报告
- 2024-2030年抗菌药甲磺酸加替沙星搬迁改造项目可行性研究报告
- 2024-2030年投影式自动旋光仪公司技术改造及扩产项目可行性研究报告
- 2024-2030年喷射按摩池搬迁改造项目可行性研究报告
- 2024-2030年北京市餐饮行业发展趋势及投资经营模式分析报告
- 2024-2030年全球及中国轮胎压力表行业发展动态及前景规划分析报告
- 2024-2030年全球及中国腰果壳液行业销售策略及营销渠道策略报告
- 2024-2030年全球及中国液态氯化铝行业产销规模及发展前景预测报告
- 2024-2030年全球及中国民族服装行业盈利模式及营销策略分析报告
- 案例分析 长沙望城区自建房倒塌事23课件讲解
- 管道巡护管理
- 第17课《猫》课件+【知识精研】统编版语文七年级上册
- 统计信号分析知到智慧树章节测试课后答案2024年秋哈尔滨工程大学
- 《程序化成功案例》课件
- 2025年中考道德与法治一轮教材复习-九年级下册-第一单元 我们共同的世界
- 【MOOC】中国电影经典影片鉴赏-北京师范大学 中国大学慕课MOOC答案
- 陕西省西安市长安区2024-2025学年八年级上学期期中地理试卷
- 企业破产律师服务协议
- 【MOOC】遗传学-中国农业大学 中国大学慕课MOOC答案
- 预防火灾消防安全培训
评论
0/150
提交评论