openssl签名和验证

上传人:仙*** 文档编号:244734834 上传时间:2024-10-05 格式:PPT 页数:12 大小:156.50KB
返回 下载 相关 举报
openssl签名和验证_第1页
第1页 / 共12页
openssl签名和验证_第2页
第2页 / 共12页
openssl签名和验证_第3页
第3页 / 共12页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第九章,openssl,签名和验证,Openssl,在,evp.h,中对签名和验证函数进行了封装。对数据签名,实际就是对数据的摘要进行私钥加密。验证签名就是解密签名数据,和原始的摘要是否一样。,Openssl,中签名,是先对原始数据计算摘要,再对摘要进行私钥加密。验证的过程是对原始消息计算摘要,解密签名值,和摘要对比是否一致。如果一致,说明签名有效;否则,则认为原名或签名值被篡改。数据签名结合数字证书可以实现身份认证、防篡改、防抵赖的功能。,签名的数据格式为,PKCS#1.,9.1,概述,Openssl,处理签名的函数主要有,EVP_SignInit_ex,、,EVP_SignUpdate,和,EVP_SignFinal,。签证签名函数主要有,EVP_VerifyInit_ex,、,EVP_VerifyUpdate,和,EVP_VerifyFinal,。,其中,EVP_SignInit_ex,、,EVP_VerifyInit_ex,、是摘要函数,EVP_DigestInit_ex,的宏定义,,EVP_SignUpdate,和,EVP_VerifyUpdate,是摘要函数,EVP_DigestUpdate,的宏定义。,9.2,函数介绍,常用的函数有,6,个:,EVP_SignInit_ex,EVP_SignUpdate,EVP_SignFinal,EVP_VerifyInit_ex,EVP_VerifyUpdate,EVP_VerifyFinal,9.2.1,签名初始化函数,EVP_SignInit_ex,函数功能:签名初始化,设置摘要算法、摘要算法引擎,函数定义:,此函数是宏定义函数,和消息摘要的函数是一样的。在,openssl/evp.h,文件中定义如下:,#define,EVP_SignInit_ex(a,b,c,),EVP_DigestInit_ex(a,b,c,),int,EVP_DigestInit_ex(EVP_MD_CTX,const,EVP_MD*,type,ENGINE,*,impl,);,参数说明:,Ctx,:,in EVP_MD_CTX,结构体,用来保存计算摘要时的上下文环境,如设置的摘要算法、当前已经计算的状态等。,Type:,表示计算摘要使用的算法。,Impl,:表示摘要算法使用引擎。应用程可以使用自定义的算法引擎,如硬件摘要算法等。,9.2.2,签名函数,EVP_SignUpdate,函数功能:,签名,update,,计算数据摘要。此函数可以被调用 多次,适用于大段数据的摘要计算。,函数定义:,#define,EVP_SignUpdate_ex(a,b,c,),EVP_DigestUpdate,(,a,b,c,),int,EVP_DigestUpdate,(,EVP_MD_CTX,const,void*d,size_t,cnt,);,参数说明:,Ctx,:,in EVP_MD_CTX,结构体,用来保存计算摘要时的上下文环境,如设置的摘要算法、当前已经计算的状态等。,d,:待计算摘要的数据。,cnt,:计算摘要的数据长度。,返回值:如果调用成功返回,1,,否则返回,0,9.2.3,签名结束函数,EVP_SignFinal,函数功能:计算签名结束,输出签名值。,函数定义:,Int,EVP_SignFinal,(EVP_MD_CTX*,ctx,,,unsigned char*,md,,,unsigned,int,*s,,,EVP_PKEY*,pkey,);,参数说明:,Ctx,:,in EVP_MD_CTX,结构体,用来保存计算摘要时的上下文环境,如设置的摘要算法、当前已经计算的状态等。,md,:签名结果输出值的指针。,s,:,out,size_t,类型数据,签名的长度。,Pkey,:签名的私钥。,返回值:调用成功返回,1,,否则返回,0.,9.2.4,验证初始化函数,EVP_VerifyInit_ex,函数功能:验证签名初始化,设置摘要算法、摘要算法引擎。,函数定义:,#define,EVP_VerifyInit_ex,(,a,b,c,),EVP_DigestInit_ex(a,b,c,),int,EVP_DigestInit_ex(EVP_MD_CTX,const,EVP_MD*,type,ENGINE,*,impl,);,参数说明:,Ctx,:,in EVP_MD_CTX,结构体,表示上下文变量。,type,:表示摘要使用的算法。,impl,:表示摘要算法使用引擎。,返回值:成功为,1,,否则为,0.,9.2.5,验证函数,EVP_VerifyUpdate,函数功能:计算数据摘要。,函数定义:,该函数是宏定义函数,其实和消息摘要的函数是一样的。,#define,EVP_VerifyUpdate,(,a,b,c,),EVP_DigestUpdate,(,a,b,c,),Int,EVP_DigestUpdate,(EVP_MD_CTX*,ctx,const,void*,d,size_t,cnt,);,参数说明:,ctx,:,in EVP_MD_CTX,结构体,表示上下文变量。,d:in,待计算摘要的数据。,cnt,:,in,size_t,类型数据,表示计算摘要的数据长度。,9.2.6,验证结束函数,EVP_VerifyFinal,函数功能:验证签名结束,返回签名结果。,函数定义:,Int,EVP_VerifyFinal,(EVP_MD_CTX*,ctx,const,unsigned char*,sigbuf,unsigned,int,siglen,,,EVP_PKEY*,pkey,);,参数说明:,ctx,:,in EVP_MD_CTX,结构体,表示上下文变量。,sigbuf,:,inconst,unsigned char*,类型数据,表示签名值的长度。,siglen,:,inunsigned,int,类型数据,表示签名值的长度。,Pkey,:,inEVP_PKEY,*,类型数据,表示验证签名的公钥。,9.3,实例应用,了解了签名和验证的主要函数后,下面通过一个实例来说明这些函数的用法。签名和验证能够完成消息的防篡改、签名者身份认证和防抵赖。,本例通过,rsa,算法,对一段数据进行数字签名并利用公钥进行验证。,数据签名处理:,初始化摘要算法结构体,签名初始化,,设置摘要算法、密码算法引擎,循环调用签名(摘要),update,,,直到处理完所有的数据,调用摘要结束函数,输出,最后的摘要值,结束,开始,加载或读取私钥,结束,初始化摘要算法结构体,验证初始化,,设置摘要算法、密码算法引擎,调用签名结束函数,输出,签名值,开始,加载或读取私钥(一般从证,书中读取公钥),循环调用验证(摘要),update,,,直到处理完所有的数据,验证数据签名处理:,流程图,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!