最近做了几道CTF的 编码类别 的题目,有个比较有意思的是名为
“社会主义核心价值观加密/解密”
的编码解码工具,其源码在Github上有,感兴趣的可以去搜一下;
在对其编码规则感兴趣的同时,期间想到了在 比特币地址 生成过程中的加密算法
椭圆曲线(ECC)加密算法
椭圆曲线是什么?
椭圆曲线是一种加密数据的方法;椭圆曲线和椭圆函数、椭圆积分等内容密切相关,著名的费马大定理
的证明也与此有关。
总之,椭圆曲线是代数几何中最重要的一类研究对象。
而椭圆曲线也是公钥密码学
中的一种。
椭圆曲线与比特币地址
比特币地址是通过 椭圆曲线数字签名算法 得到的。
- 首先先随机选出
256位二进制数字
; - 然后这个大随机数形成
私钥
; - 通过
ECC算法
,计算得出私钥对应的公钥
; - 最后通过加密函数(
BASE58函数
等)来生成地址
(其生成是单向的); - 最后这个地址就是比特币的一个地址。
预知识:什么是陷门函数?
所有公钥加密算法的关键在于每种算法都有各自独特的 陷门函数(trapdoor function)。陷门函数是一种只能进行单向计算,或者单向计算更容易的函数。
举个例子:
Come on + 公钥 = sjldflk
其中Come on是初始数据,使用公钥在公钥加密算法下生成信息:sjldflk。
但这是个不可逆的过程,也就是说即使知道 lsjldflk 和公钥,也没办法得出Come on这个数据。
而在最流行的RSA公钥加密函数中,其公钥是一个非常大的数,而私钥是其公钥的两个素数因子。
椭圆加密的陷门函数?
那么 RSA 和 ECC 的陷门函数
有何不同?
ECC的陷门函数先在曲线上找到一个特定的点,然后使用 点函数 在曲线上找到一个新的点,接着重复使用 点函数 ,在曲线上不停的跃迁,直到找到最后一个点,即结束。
在这个过程中,我们只能知道 起点 和 终点 ,几乎不可能知道中间经历了几次跃迁!!!
所以,ECC加密的公钥就是:起点
和 终点
,而私钥就是:从起点到终点需要经历多少次跃迁
。
小结
忙里偷闲瞎写了点东西,是非常基础的一个加密算法的原理,其实还有很多问题并没有说如何解决,比如:点函数产生的线段与椭圆曲线的交点过远怎么办?
以后啥时候想起来啥时候写吧 ~ 溜了