ECC算法分析--openssl的实现以及其调用流程

本文介绍了ECC(椭圆曲线密码学)算法在OpenSSL中的实现及其调用流程,对比了ECC与RSA的不同,并详细解析了ECC涉及的结构体如EVP_PKEY、RSA_ST、EC_KEY_ST等。文章强调了ECC中ECDH和ECDSA两种机制的分离,以及EVP_MD和ENGINE在签名验证过程中的作用。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

ecc的过程与rsa相比有很大的不同,ecc涉及到了很多额外的概念,比如group等等,另外ecc包含两套截然不同的机制,这就是ecdsa和ecdh,这两套机制统一于ecc,在非ecc算法中,这两套机制是由两个独立的算法实现的,比如对于加密/解密以及签名/验证这一类需求来说使用的是rsa,dsa,对于密钥协商这一类需求来说使用的是dh,如何把这两类算法统一到一个结构中是类似openssl等框架需要解决的问题,openssl将所有的关于“密钥”的信息全部放入一个结构体中,这个结构体就是EVP_PKEY,这些信息包括密钥本身和关于这些密钥的操作,这些操作中最重要的就是诸如产生密钥以及验证签名之类的操作了,由于密钥操作仅仅是一些标准,各个机构可以有自己的定制化实现,于是engine的作用就体现出来了,按照oo的观点,将engine封装到key当中是个很好的设计,因为几乎所有的加密解密签名验证操作都是围绕着key进行的,所以engine几乎都在key相关的结构中,另外对于对称算法,engine专门提供了一个机制,详细信息见前文。
struct evp_pkey_st
{
    int type;
    int save_type;
    int references;
    union{
        char *ptr;
#ifndef OPENSSL_NO_RSA
        struct rsa_st *rsa;    /* RSA */
#endif
...
#ifndef OPENSSL_NO_EC
        struct ec_key_st *ec;    /* ECC */
#endif
    } pkey;
    int save_parameters;
    STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
...
}
对于rsa来讲很简单,一个下面的rsa_st足以容纳所有的数据和操作,包括公钥,私钥,sign,verify等等:
struct rsa_st
{
    int pad;
    long version;
    const RSA_METHOD *meth; //可以重载的方法,所有的关于rsa的操作全部在这个meth里面
    /* functional reference if 'meth' is ENGINE-provided */
    ENGINE *engine; //当前的engine,内部包含一个RSA_METHED,该methed可以将上面的meth重载
    B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值