ECC 关于加密解密的一些误区

ECC (椭圆曲线算法)

使用的为iOS 平台下使用 OpenSSL('OpenSSL-Universal', '1.0.1.17') 来实现的

加密

私钥签名,公钥验签
签名方法在 openssl库 ecdsa.h

签名
ECDSA_SIG * ECDSA_do_sign(const unsigned char *dgst, int dgst_len,
                         EC_KEY *eckey);
验签
int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
                    const ECDSA_SIG *sig, EC_KEY *eckey);

公钥加密,私钥解密???
没有看到有这一块的实现,
只看生成一个秘钥,用其私钥和自己的公钥生成一个新的秘钥,用其做AES
ecdh.h(椭圆曲线密钥交换算法)

生成新的秘钥
EC_KEY newKey = EC_KEY_new_by_curve_name(EC_GROUP_get_curve_name(EC_KEY_get0_group(myEcKey)));
EC_KEY_generate_key(newKey);

和myEcKey的publickey做 ecdh.h 的 compute
ECDH_compute_key( , , EC_KEY_get0_public_key(myEcKey), newKey ,  KEY_HASH_FUNCTION);
保存 newKey 的publicKey,其私钥丢掉
Save( EC_KEY_get0_public_key(newKey));

获得密钥的时候调用:
EC_POINT epnt = EC_POINT_new(EC_KEY_get0_group(myEcKey));
EC_POINT_oct2point(egrp, epnt, @LoadSaveKey ));
ECDH_compute_key(,,epnt, myEcKey,  KEY_HASH_FUNCTION);

每次使用的时候,都生成一个新的秘钥对,私钥使用一次后丢掉,公钥传输给Other,
Other 通过自己的私钥和传输过来的公钥可以计算出 AES 的秘钥

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    纳兰三少阅读 1,993评论 1 6
  • 2018-Read-Record 记录我的2018学习历程 文中首先解释了加密解密的一些基础知识和概念,然后通过一...
    NinthDay阅读 11,360评论 8 105
  • 引入grale插件 限制插件的执行范围 发布 写一个普通的task类 继承DefaultTask 这个类并不会有什...
    浔它芉咟渡阅读 1,057评论 0 3
  • 稼轩词印象之三 稼轩与东坡齐名,同为豪放派词人的代表,但正如王国维所说“苏词旷,辛词豪”。东坡是旷达超逸,总是在通...
    荷塘低吟阅读 240评论 0 0
  • 总结昨天 时间管理:昨天的时间管理缺少记录, 每天时间耗费在哪件事上需要被记录,也需要完成对自己做每件事的常规时间...
    阿拉丁神灯624阅读 220评论 0 0