椭圆曲线加密法:http://www.javashuo.com/article/p-ufmqlzjk-es.html加密
先阅读上面那篇椭圆曲线加密法文章。3d
http://www.javashuo.com/article/p-zuxtgtfk-gp.html中说公钥是一个随机数也就是私钥,经过椭圆曲线加密后称为公钥。以下图:blog
以一个随机生成的点k,将其与椭圆曲线上的点G相乘(这个相乘不是普通上的数学相乘,而是密码学上的相乘,具体看http://www.javashuo.com/article/p-ufmqlzjk-es.html)得到曲线上的另一点,这个点也就是相对应的公钥K。get
K = k * G,其中K是公钥,k是私钥,G是椭圆曲线上的生成点。数学
生成点是secp256k1标准的一部分,比特币密钥的生成点都是相同的。用户的生成点是相同的,一个私钥k乘以G将获得相同的公钥K。k和K之间的关系是固定的,但只能单向运算,即从k获得K。class
K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G比特币
有椭圆曲线加密法知道,若是给定椭圆曲线一点G,能够求出2G(G+G),3G(2G+G)····。当给出G时,已知x,求出xG并不困难,可是反之,已知xG时,求x时很是困难的。 随机数
公钥K被定义为一个点:密码
K=(x,y)
其中,
x=F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A y=07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
以上就是公钥的生成。
参考《精通比特币》