椭圆曲线算法(ECC)学习(二)之Secp256k1

018-03-23621880人围观 ,发现 7 个不明物体数据安全

上一篇椭圆曲线算法(ECC)学习(一)中我们讲述了椭圆曲线算法的基本数学常识和加密解密过程,作为椭圆曲线数学的一种公钥密码的算法,其优点毋庸置疑。区块链最近异常火热,那么今天我们就来讲讲区块链的关键加密技术,椭圆曲线secp256k1。

Secp256k1是指比特币中使用的ECDSA(椭圆曲线数字签名算法)曲线的参数,并且在高效密码学标准(Certicom Research,http://www.secg.org/sec2-v2.pdf)中进行了定义。

0×01 前言

Secp256k1为基于Fp有限域上的椭圆曲线,由于其特殊构造的特殊性,其优化后的实现比其他曲线性能上可以特高30%,有明显以下两个优点:

1)占用很少的带宽和存储资源,密钥的长度很短。

2)让所有的用户都可以使用同样的操作完成域运算。

0×02 正文

椭圆曲线数字签名算法(ECDSA)

用户的密钥对:

( d, Q )

待签名的信息: M

签名:

签名过程:

1)根据ECC算法随机生成一个密钥对

2)令

如果r = 0,则返回步骤1

3)计算

4)按照数据类型转换规则,将H转化为一个big endian的整数e

5)

若s = 0, 则返回步骤1

6)输出的

即为签名。

验证过程:

1) 计算


2)按照数据类型转换规则,将H转化为一个big endian的整数e 
3)计算

4)计算

如果R = 零点,则验证该签名无效

5)令

6)若 v == r,则签名有效,若 v ≠ r, 则签名无效。

0×01 Secp256k1椭圆曲线

Secp256k1椭圆曲线形如:

椭圆曲线域参数由单元T =(p,a,b,G,n,h)指定

  • p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

Fp的曲线 E: 由下式定义:

  • a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  • b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007

压缩形式的基点G是:

  • G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

而在未压缩的形式是:

  • G= 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

最后,G的阶为:

  • n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

协因子:

h = 01

0×03 算法实现

在查阅资料时,发现了GitHub上的一个关于secp256k1的一个项目,这是一个针对曲线secp256k1上的EC操作优化的C库.

github地址:https://github.com/bitcoin-core/secp256k1

当然在steem-python也有相似的secp256k1-py库,运用pip安装secp256k1-py库、安装pkg-config

pip install --no-binary:all: secp256k1
sudo apt-get install libtool
sudo apt-get install autoconf
sudo apt-get install pkg-config

当准备工作做好后,我们就可以使用这个库

私钥公钥生成

python -m secp256k1 privkey -p

使用私钥对明文进行消息签名

python -m secp256k1 sign \-k c6e193266883a500c6e51a117e012d96ad113d5f21f42b28eb648be92a78f92f \-m hello

使用明文、公钥、签名,来检验是否是对应的私钥的所加密的

python -m secp256k1 checksig \-p 0314bf901a6640033ea07b39c6b3acb675fc0af6a6ab526f378216085a93e5c7a2 \-m hello \  -s
3045022100a314a579fb9f30a804c172eec4881ed603e661eed692797149dfdbce24d671d202203ccfab0603ad97c34864caa22d42a24d0cb5750fcb159476b8ae30a11edc0ed6

0×04 总结

经过两期的介绍,希望大家理解这个复杂的非对称加密算法中的离散问题。为了保护储存在区块链中的信息的安全与完整,区块链就使用上述的包括另一种(哈希函数)的密码现代密码学技术。希望各路大牛多加指正在下面评论中

相关链接:

[1]  https://en.bitcoin.it/wiki/Secp256k1

[2]  区块链指南 机械工业出版社

[3]  Douglas R.Stinson. 密码学原理与实践(第三版)电子工业出版社 2009

[4]  https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm

[5]  Michael E.Whitman 信息安全原理(第五版) 清华大学出版社

淼淼兮与怀10 篇文章等级: 4

|

  • 上一篇:如何安全地存储密码货币
  • 下一篇:如何对已损坏的SQLite数据库取证分析?

发表评论

已有 7 条评论

  • af 2018-03-23回复1楼

    好东西。。但是看得懂的。。。估计。。

    亮了(1)

    • 淼淼兮与怀 (4级)一个有情怀的菜鸡 2018-03-23回复

      @ af 可以权当了解 学习文嘛

      亮了(0)

  • 打不死的小强 2018-03-23回复2楼

    qq登陆过程建立的时候用的就是椭圆双曲线的密钥交换算法ecdh,参数也是Secp256k1

    亮了(2)

  • xd_cjy (4级) 2018-03-23回复3楼

    椭圆曲线上离散对数不抗量子,还得对地址加个哈希

    亮了(0)

    • 淼淼兮与怀 (4级)一个有情怀的菜鸡 2018-03-23回复

      @ xd_cjy  哦哦哦~嘿嘿嘿

      亮了(0)

  • zhangmin157 2018-03-24回复4楼

    平常每个星期总有一些幼儿文,总算有正经文章了, 不过,上面介绍算法时,应该用纯C来描述, 而不是用py调用别人写好的C->so->py代理

    亮了(1)

    • 淼淼兮与怀 (4级)一个有情怀的菜鸡 2018-04-04回复

      @ zhangmin157 主要是本人C学的不太好

椭圆曲线算法(ECC)学习(二)之Secp256k1相关推荐

  1. 八皇后算法python_Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  2. ECDH and ECDSA(ECC椭圆曲线算法3)

    这是ECC系列的第三篇. 专栏:https://blog.csdn.net/mrpre/category_6952288.html 在之前的文章中,我们看到了什么是椭圆曲线,并且我们为了做一些数学运算 ...

  3. Guide to Elliptic Curve Cryptography (ECC椭圆曲线算法1)

    原文 http://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/ Prefa ...

  4. 【转】Guide to Elliptic Curve Cryptography(ECC椭圆曲线算法1)

    Guide to Elliptic Curve Cryptography (ECC椭圆曲线算法1) 2017年06月03日 10:14:08 原文 http://andrea.corbellini.n ...

  5. Openssl ECC椭圆曲线算法 - 密钥/签名/验签/加密/解密/SM2密文 - 序列化反序列化导出导入 - C源码

    . . . . 废话不多说,本代码继承自另外一位讲解Openssl ECC椭圆曲线算法大佬的源代码:https://blog.csdn.net/scuyxi/article/details/59182 ...

  6. ECC椭圆曲线算法(2)初步介绍

    1. Weierstrass方程式 ECC(Elliptic curve cryptography) 椭圆曲线的 Weierstrass方程是一个二元三次方程: 且满足 可以看出,有3个根,其中一个为 ...

  7. OpenCV学习(二十) :分水岭算法:watershed()

    OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...

  8. 国科大学习资料--人工智能原理与算法-第十二次作业解析(学长整理)

    国科大学习资料–人工智能原理与算法-第十二次作业解析(张文生老师主讲)(14.14)

  9. 【密码算法 之十四】非对称算法,ECC椭圆曲线算法 之 ECDSA、ECDH、SM2、SM9等

    文章目录 1. ECC椭圆曲线 1.1 曲线类型 1.2 曲线标准 1.3 表示方法 1.4 曲线运算 1.4.1 点加(Point Addition) 1.4.2 点乘(Point Multipli ...

最新文章

  1. 搭建基于Spring Cloud的微服务应用
  2. 苹果开发之Cocoa编程(原书第4版)
  3. C语言--static修饰变量
  4. VTK:图片之ImageMedian3D
  5. 外点惩处函数法·约束优化问题
  6. 【kafka】kafka offset 的存储 (存储zookeeper 与 存储 kafka)
  7. python 异步io_python异步IO编程(一)
  8. SqlServer存储过程调用接口
  9. Redis报错#MISCONF Redis is configured to save RDB snapshots, but is currently not
  10. Java学习日记之 Java-IO流
  11. Boost C++ 库 中文教程(全)
  12. 计算机专业英语缩略词
  13. scrapy settings和管道的深入
  14. python pandas 增加一列_Python Pandas 向DataFrame中添加一行/一列
  15. 手机写python脚本_用Python写王者荣耀刷金币脚本
  16. python 白噪声检验-使用python实现时间序列白噪声检验方式
  17. 学习笔记-Burp Suite
  18. java配置环境变量path(JAVA配置环境变量失败)
  19. 家里有宽带还能再装一条吗_家里一条宽带可以装两个无线路由器吗?要怎么安装?怎么设置?...
  20. halcon图像灰度操作

热门文章

  1. 【SQL查询】正则表达式匹配字符串
  2. Sublime Text3配置Python运行环境(实用)
  3. vue源码解析compile
  4. 背包问题(01背包问题,多重背包问题,完全背包问题)——基于python的动态规划
  5. AliOS Things 3.3.0 文章总纲
  6. java.IOException: Target host must not be null, or set in parameters. scheme=null, host=null, path=
  7. 微信小程序 数组(增,删,改,查)
  8. 电脑维修和维护 毕业总结及经验报告
  9. Coursera吴恩达机器学习课程-第五章
  10. 空间分析软件ArcGis简易指南