首先,关于什么是ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学),这里有一篇入门介绍文章,讲解的很好,看不太懂也没关系,至少要了解是什么。尤其是最后的签名算法原理。
ECC运用于加密大致有三种
- 签名验证
- 交换秘钥
- 加密解密
签名验证
参见wiki
.net提供了ECDsaCng,实现了ECDSA算法。
代码看这里
秘钥交换
关于秘钥交换算法 Diffie–Hellman,请参见wiki
迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
交换过程:
Alice和Bob先对p 和g达成一致,而且公开出来。Eve也知道它们的值。
Alice取一个私密的整数a,不让任何人知道,发给Bob 计算结果:A=g^a mod p. Eve也看到了A的值。
类似,Bob 取一私密的整数b,发给Alice计算结果B=g^b mod p. 同样Eve也会看见传递的B是什么。
Alice 计算出S=B^a mod p=(g^b)^a mod p=g^ab mod p.
Bob 也能计算出S=A^b mod p=(g^a)^b mod p=g^ab mod p.
Alice 和 Bob 现在就拥有了一个共用的密钥S.
虽然Eve看见了p,g, A and B, 但是鉴于计算离散对数的困难性,她无法知道a和b 的具体值。所以Eve就无从知晓密钥S是什么了。
.net 提供了 ECDiffieHellmanCng,实现了ECDHE算法(Elliptic Curve Diffie-Hellman Exchange)。 此算法中两端采用的KEY都来自于椭圆曲线。
Elliptic curve Diffie-Hellman (ECDH) is an anonymous key agreement protocol that allows two parties, each having an elliptic curve public-private key pair, to establish a shared secret over an insecure channel. This shared secret may be directly used as a key, or better yet, to derive another key which can then be used to encrypt subsequent communications using a symmetric key cipher. It is a variant of the Diffie-Hellman protocol using elliptic curve cryptography.
代码看这里
加密解密
<i>ECIES,暂未研究,日后再写。</i>
网友评论