分享一下我老师大神的人工智能教程!零基础,通俗易懂!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