精通比特币:公钥与私钥
“关于公钥加密那点事”
据说20世界70年代,公钥加密这货被发明了,成计算机和信息安全的数学基础,适合的数学函数例如:素数函数,椭圆曲线乘法,听着这两个名字佛性不?美好不?实际上要想去计算,难疯你,想破解,难傻你!
这就是佛在你心中,性是他由来,你有心来,他没性。(插一句:比特币的私钥通过椭圆曲线加密生成公钥,私钥是本,公钥是性)
但是小姐姐告诉你,既然跟没有心性的东西起舞,不如就只知道它的面具下的真身就好了,至于是什么丑啊,美啊,恶啊的,末了呢也定如宇宙万物之中在你肩头滑落的一缕缕灰尘,转身而逝。
至于这两个看着清纯佛意的概念素数函数和椭圆曲线乘法数学函数的目的不过就是当你使用它计算的时候,你向一个方向计算容易,反过来就难了,几乎不可逆。
也就是说貌似面具之下的真相只有揭开面具的人才能看见,可能够揭开面具的人的多少,取决于是否能识别出是不是有面具。
例如:如果某人用一种方法把自己带上面具,那么除了他之外的其他人是不知道这个人带着面具的与外界接触,那么大家怎么识别这个人真实的心性,答案必定是用他带上面具的方法去揭开面具,方法只有他知道,他不泄露,没有人知道,这个方法就是私钥。
那么比特币正是用了素数函数和椭圆曲线乘法数学函数作为密钥的基础算法。看着好像是小姐姐把这价值不菲的比特币形容成了一个坏蛋,不能够啊不能够,比特币是我的好基友,爱它千遍都不厌倦呢!
小姐姐只是把这个貌似抽象的加密算法拟人化一下,为了是告诉大家,素数函数和椭圆曲线乘法就是比特币带着一个美的不要不要的面纱,你想偷走它,就得揭面纱,不过,你想揭面纱,难如登天呢!
一:为了说服你,让你心服口服的转身而去,小姐姐都可以把套路告诉你。
首先你要知道,比特币系统中,用公钥加密创建一个密钥对,用于控制比特币的获取。
密钥对包括:
1)一个私钥
2)一个私钥衍生出来的公钥
公钥和私钥匙的作用:
例如:你某天在一咖啡馆,隔壁桌的一个姑娘貌美如花,你一见钟情,经过你激情勾搭,百倍调戏,拿下了姑娘,为了再次表达诚意,要给姑娘一个比特币做情人节礼物。
于是戏开始了,姑娘瞬间拿手机亮出一个二维码说:”这是我的比特币地址。“
你在傻眼的同时,老老实实的拿出手机,打开比特币钱包,扫了姑娘的二维码,输入1个比特币,再输了你的钱包密码,哗啦啦,1个比特币飞走了。
也就是说:
公钥用于接收比特币(姑娘亮的二维码是公钥的一种形式,另外还有一个数字字符串,这年头,有码谁要用串呢!)
私钥用于比特币支付时候的数字签名(你的钱包管理的你的私钥,私钥其实就是一个随机数生成的,你不用操心,钱包自己料理这麻烦事儿。)
整个支付过程的逻辑很简单,简单就很快乐,快乐就是简单。
比特币的当前所有者(你)需要在交易中提交公钥和签名,签名是为了确认支付者(你)在该交易时对所交易的比特币拥有所有权(意思就是币是你的,你可以任性)。
岁月二,先告诉你套路,再拦住你的脚步,让你死心信不信?
小姐姐都需要休息一下,你也是,听听王菲和那姐唱的<岁月>:珍惜眼前人,心中无黄昏。
套路标配(1):来吧,先撸私钥
套路标配(1):来吧,先撸私钥
私钥是什么:
可以是1和n-1之间的任何数字,其中n是一个常数(n=1.158 * 10^77,略小于2^256),要生成一个私钥,需要随机选择一个256 位的数字,并检查它是否小于n-1。
怎么生成的私钥?
一个随机数生成
找到足够安全的熵源,也就是说随机数的来源,选这个随机数要满足的两个条件就是:
1)不能预测
2)不能重复
私钥空间有多大?
比特币私钥空间的大小是2^256
一个私钥的空间跟宇宙含有原子的数量占的空间差不多大呢!
宇宙中只含有10^80个原子,比特币私钥空间的大小是2^256,用十进制表示的话,大约是10^77。
看看这个大家伙是什么样啊
下面是一个比特币的私钥:(64位十六进制)
1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
一个随机数生成的私钥匙表示方法都是一样的:
1)256位二进制表示
2)64位十六进制表示(每一位十六进制有4个字节)
总之,就是一个非常大的数
警告帖:此刻看到这里,你就记住了,你有币,你任性,你要想一直这么任性,你就好好的保管你的私钥,一但丢失,你的比特币不但不归你所有,找都找不回来,这时候区块链技术比你任性。但是如果你把他送给你在咖啡馆遇到的姑娘,那你就是不一样的任性了呗。
套路标配(2):继续撸公钥
公钥是什么?
是你的那对密钥的另外一半,相依相伴的好基友。有了他,产生了你,有了你,之后还有谁,以后告诉你。
公钥是私钥通过椭圆曲线乘法计算出来的,密码学之佛性的秘笈,你躲在黑暗里,我却不得不与你翩翩起舞,因你而有我,愿永相依。
佛性妖公式:椭圆曲线乘法
K=k*G
k是私钥
G是生成点,一个常数点
K是所得公钥
据说椭圆曲线乘法的反向计算是一个寻找“离散对数”的过程,也就是,我明明知道你是骗子,我就是没有办法揭穿你。
椭圆曲线美不美扫盲簪:数学不好的我,为你得做簪
离散对数是什么鬼?
离散对数
就是给定正整数x,y,n,求出正整数k,使y≡xk(mod n)。就目前而言,人们还没有找到计算离散对数的快速算法。
快速算法
是指其计算复杂性在多项式范围内的算法,即O(logn)k,其中k为常数)。虽然有快速计算离散对数的量子算法,但现在并没有量子计算机,实用的量子计算机也许根本就建造不出来,但也许有一天,他横空出世也是有可能的。
比特币使用椭圆曲线:
比特币使用了secp256k1标准所定义的一种特殊的椭圆曲线和一系列数学常数。该标准由美国国家标准与技术研究 院 (NIST)设立。secp256k1曲线由下述函数定义,该函数可产生一条椭圆曲线:
妖术妖术的意思是:mod p(素数p取模)表明该曲线是在素数阶p的有限域内,也写作Fp,其中p = 2^256 – 2^32 – 2^9 – 2^8 – 2^7 – 2^6 – 2^4 – 1
不爱看的小伙伴们,可以忽略妖术,你只要知道,这是个非常大的素数
我替你用小点的数试一试,看看能不能揭开那层面纱好不好
假设我们用一个小一点的数17 ,这个素数阶的有限域内的椭圆曲线,它在网络上表现的是一系列的散点,如图:
呈现出散点的原因是:这条曲线被定义在一个素数阶的有限域内,而不是定义在实数范围。
单行路总结:一个私钥如何通过椭圆曲线相乘生成公钥,这一个过程如在一个城市交通里可以把它想成是个单行道
咱们跑一圈:
用一个随机生成的私钥k为起点,将它与曲线上预定的生成点G相乘以获得曲线上的另一点,也就是相应的公钥 K。
生成点G是secp256k1标准的一部分,比特币密钥的生成点都是相同的: {K = k * G} 其中k是私钥,G是生成点,在该曲线上所得的点K是公钥。因为所有比特币用户的生成点是相同的,一个私钥k乘 以G将 得到相同的公钥K。
看到这里我要一句话总结全篇:两个素数相乘容易,相除就难的不要不要的。
算个小题敲打一下:
56是有几个7相加?
计算很简单是8个:7+7+7+7+7+7+7+7
1087639453465634643545454646456754763881241241448685865856856346346524......有几个7相加得到的?
你想算,我算吧,你要想去揭开面具,我给你套路,你要揭开面纱,我给你妖术(椭圆曲线乘法或者加法)。
椭圆曲线相加:除了用以上的妖术椭圆曲线乘法函数也可以对乘法用拓展加法的标准方法定义。给定椭圆曲线上的点P,如果k是整数,则 kP = P + P + P + …+ P(k次),在这种情况下k有时被混淆为“指数”
最后给个警告簪:安全解释
公钥:随便送,散大街上都行
私钥:死活自己藏好了
2018.02.16
Lola
小姐姐在大年初一(2018.2.16)走了一边精通比特币第四章,接下来公钥是不是有私生子,得闲了,我再卦,好不好呢!
如遇币豪路过,请一定要留步,赏个三五六个的ERC-20币币,小姐姐都会欢喜的不得了: