比特币相关的密码学知识

地址、交易、区块、网络是区块链数据里面最基本最重要的概念。地址用来标示一笔交易的支出方和接收方。所有的交易最终需要被记到统一的账本——区块链上,而这个账本是通过区块确认并完成的。每一个新区块,都会被打上时间戳,最终生成依照时间前后排列并加以记录。每个独立节点之间又通过比特币网络来建立联系,这样就为电子交易记录建立了一个去中心化、分布式的时间戳服务器系统。

很复杂,在这一节,我们先讲地址。

1、公钥密码学

讲到地址,我们就不得不先说一说密码学,作为保护信息传输安全的技术手段,密码在人类社会中的应用源远流长,凯撒密码是古典密码的典型代表,它的基本思想是通过字符的代换来实现加解密。因此古典密码的安全性主要依赖加密算法本身的安全性,如果算法泄露了,要加密的信息也就没有秘密可言了。

如今密码学相关技术已经深入各个领域,它们的理论共识都遵循由奥古斯特•柯克霍夫在19世纪提出“柯克霍夫原则”—— 密码系统应该即使被所有人知道其运作步骤,仍然是安全的。即算法是公开的,唯一需要保护的是密钥。

1949年香农发表了《保密系统的信息理论》,为对称密码系统建立了理论基础,带来了加密传输基于秘钥安全而不是基于加密算法安全的理论和技术变革。这是密码学发展的里程碑,标志着现代密码学时代的来临。

公钥密码学兴起之前,对称加密是主流的加密模式,人们基于秘钥来对信息进行加解密,通常情况下,密钥越长,代表着密文被破解的难度越大。由于加密算法和解密算法都是同一模式,只有一把密钥保证加密数据的安全,因此这种加密算法也叫做“对称加密算法”。对称加密有一个最大弱点:甲方必须把密钥告诉乙方,否则乙方无法解密。而保存和传递密钥,就成了最头疼的问题。

公钥密码学是现代密码学最重要的进展。公钥密码学可以在不直接传递密钥的情况下,完成密文的解密。加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,系统的安全性既不依赖算法的保密,也不用直接传递密钥。基于这种公钥机制的思想,开始出现了一系列非对称加密算法。

1976年Whitfield Diffie & Martin Hellman首次提出了基于数学难题的公钥密码机制,1978年RSA公钥密码机制的出现,成为公钥密码的杰出代表并成为事实标准,在密码学史上创造了又一个新的里程碑。90年代公钥密码学进一步发展,基于椭圆曲线乘法、素数幂等数学函数的公钥算法诞生,使得数字密钥和不可伪造的数字签名成为可能。

数据签名算法的核心在于证明数据的发送方是签名者发出的、不可抵赖,而不是待签名数据的保密性。

下图比较说明非对称加密与对称加密算法的区别:

非对称加密需要两个(一对)密钥:公开密钥(publickey)和私有密钥(privatekey),用公钥对数据进行加密后,只有对应的私钥才能解密;反之如果私钥用于加密,则只有对应的公钥才能解密。通信双方无须交换密钥就可以建立保密通信。

公钥算法用到的是私钥与公钥,他们和比特币体系中常常说到的地址有什么关系?在比特币系统中,私钥由32字节的随机数组成,通过私钥可以算出公钥,公钥经过一系列哈希及编码算法就得到了比特币中的地址。所以地址其实是公钥的另一种表现形式,可以理解为公钥的摘要。

2、相关的加密算法

在私钥、公钥及地址的相关运算中,用到了基于secp256k1椭圆曲线乘法的签名算法、SHA-256、RIPEMD-160,和Base58编码。

2.1椭圆曲线签名算法

椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。它的主要优势是在某些情况下它比其他的算法(比如RSA)使用更小的密钥但提供相当的或更高等级的安全性。

比特币使用了基于secp256k1椭圆曲线数学的公钥密码学算法。它包含私钥与公钥,私钥用于对交易进行签名,将签名与原始数据发送给整个比特币网络,公钥则用于整个网络中的节点对交易有效性进行验证。签名算法保证了交易是由拥有对应私钥的人所发出的。

2.2 哈希函数

SHA-256是一种哈希函数,已经在上一节的讲解中做了介绍,这里不再赘述[1]

RIPEMD-160也是在生成地址时用到的一种哈希函数,其输出长度为20字节(160位)。比特币用它减少标识接收方的字节数。

2.3 Base58编码

可读性编码算法,类似古典密码学里的置换算法,理论上并不是密码学理论的核心内容。可读性编码算法不是为了保护数据的安全性,而是为了可读性。以二进制进行传输的信息是不具备可读性的,数字与字母组成的字符串才更容易被识别。可读性编码不改变信息内容,只改变信息内容的表现形式(部分编码算法还加入了容错校验功能,以保证传输过程中数据的准确性和完整性)。

Base64是常见的可读性编码算法,所谓Base64,即是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”。

Base58是Bitcoin中使用的一种编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"i",以及"+"和"/"符号。

设计Base58主要的目的是:

避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。

不使用"+"和"/"的原因是,非字母或数字的字符串难以作为账号的一部分被接受。

没有标点符号,通常不会被从中间分行。

使大部分的软件支持双击选择整个字符串。

比特币中使用Base58算法来对公钥的Hash160及私钥进行编码,以生成以1或3开头的比特币地址及WIF(Wallet import Format)格式的私钥。

3、私钥与公钥

比特币私钥其实是使用SHA-256生成的32字节(256位)的随机数,有效私钥的范围则取决于比特币使用的secp256k1 椭圆曲线数字签名标准。大小介于0x1 到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140之间的数几乎都是合法的私钥。

在私钥的前面加上版本号,后面添加压缩标志和附加校验码,(所谓附加校验码,就是对私钥经过2次SHA-256运算,取两次哈希结果的前四字节),然后再对其进行Base58编码,就可以得到我们常见的WIF(Wallet import Format)格式的私钥。

私钥经过椭圆曲线乘法运算,可以得到公钥。公钥是椭圆曲线上的点,并具有x和y坐标。公钥有两种形式:压缩的与非压缩的。早期比特币均使用非压缩公钥,现在大部分客户端默认使用压缩公钥。

由于数学原理,从私钥推算公钥是可行的,从公钥逆推私钥是不可能的。

初识比特币的人常有一种误解,认为比特币公钥就是地址,这是不正确的。从公钥到地址还要经过一些运算。

4、地址的生成

椭圆曲线算法生成的公钥信息比较长,压缩格式的有33字节,非压缩的则有65字节。地址是为了减少接收方所需标识的字节数。比特币地址的生成步骤如下:

生成私钥与公钥

将公钥通过SHA256哈希算法处理得到32字节的哈希值

后对得到的哈希值通过RIPEMD-160算法来得到20字节的哈希值 —— Hash160

把版本号[2]+Hash160组成的21字节数组进行双次SHA256哈希运算,得到的哈希值的头4个字节作为校验和,放置21字节数组的末尾。

对组成25位数组进行Base58编码,就得到地址。

下图以非压缩格式的65字节公钥示意上述过程:

由于椭圆曲线乘法以及哈希函数的特性,我们可以从私钥推导出公钥,也可以从公钥推导出地址,而这个过程是不可逆的。也正因如此,在整个比特币系统中,私钥是最关键的部分。私钥泄露也就意味着丢失了一切。

我们要花掉一个地址上的资产,需要构造一笔交易,同时使用这个地址对应的私钥签名。而如果我们要将资产转移到某个地址上,只需要转账给他公开的地址就行了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 〇、序言 货币由于其天然属性决定了其与安全不可分割的联系,从最早的金库、保险柜、镖局到后来的ATM机、运钞车;从存...
    怒马2048阅读 38,727评论 4 79
  • 本文出自于金马老师课程——“金马带你定投区块链”的课程,还有“白话区块链”公众号中的概念,我的目的就是把对同一个概...
    丁昆朋阅读 2,350评论 5 8
  • 三个梦 我和妈妈,老公一起在窗前看着要去远方的路,很陡峭,翻过窗户,就可以顺着几乎90度的陡壁下去。我一看到这么陡...
    Apple圆阅读 306评论 0 0
  • 【墨竹的菜园】0369——昨天到米东的秀美新疆和胡总沟通,在交谈的过程中,我脑中一直闪烁着一个词——情怀。 什么是...
    墨竹的菜园阅读 528评论 0 0
  • 终于等到鬼怪16集齐,等这块肉肥了,再一口气把它嚼烂,吃下去!昨晚终于天时地利人和,想一口气看完,无奈追到六集,终...
    三千晚风阅读 772评论 0 3