源地址(可能要FQ):https://www.coursera.org/learn/cryptocurrency/home/welcome

1.1 Cryptographic Hash Functions

Hash functions 就是输入一段数据(可以是字符串、文件等),输出一个定长的字符串。(64位、256位等)

Hash functions 三大安全属性(Security properties):1.collision-free(无冲突)2.hiding(隐蔽性,hash不可逆)3.puzzle-friendly

1.collision-free(无冲突): 如果 x != y,那么H(x) != H(y),或者说没有人能找到如果 x != y,使H(x) == H(y),(也可能是找到的代价太高太高)

2.Hiding:给你一个H(x),你无法得到x是多少。

这是因为hash函数是不可逆的,为什么不可逆,归根结底的原因是它不是一个单射函数。(不同的输出可能输出相同的结果,当这种情况发生了,称为Hash collision,这种情况是有可能的,但是你没办法找到,或者超级难找到)。

3.pulzzle-friendly:对于一个输出y,只要k在一个范围内非常均匀的被选取,那么就无法找到x,使得H(k|x) = y。

min-entropy(高阶最小熵):我查了相关概念,这里主要表达的意思,即使这个k是非常均匀的被选取的,比如在2的256次方这个数里,这么大的数,每个数字被选上的概率都是相等的。

然后如果k均匀地选取的,那么给你y,如果你想找到x,只要一个一个试x的值,看看H(k|x)等不等于y或者是落入一个集合Y,除此之外,没有更好的方法。

为什么k均匀的选取,x就只有一个一个试这样一个方法了,这里视频也没有讲清楚,但结论就是这样,记住就好了。

第三个属性和第二个属性好像有点类似,区别好像就在于第三条的Y可以是一个集合,是一个范围,一个hash results。

1.1的最后又举了一个应用的实例,如下图,这里的Message很长,所有就先切分成n段,每一段都是512bits的长度,最后一段如果不够,可以添上zero bits让它够512bits。IV视频只说是一个从标准文档里得到的256bits的东西,这个东西加上512bits的Message块1,得到一个768bits的数据,这个数据进到c这个函数里,输出一个256bits的数据,这个数据再和后面的512bits的Message块2一起进到下一个函数,以此类推,一直到最后得到一个256bits的数据,这个就是整个Hash functions的最后的输出结果。

1.2 Hash Pointers and DataStructures

Hash Pointer 可以让我们retrieve the information, 还可以verify information hasn't changed。

用这样一个hash pointer去组建各种数据结构。比如说用它组成的类似链表的结构,我们叫他block chain

hash pointer就可以帮助我们检测到是否有人试图篡改数据内容,比如下图

当有人想要修改图中左边第一个数据块中的内容时,它右边的那个数据块就可以检测到前面这个数据块hash的值和它之前存储的值不一样,所以入侵者如果想要不被发现,就必须顺带把第二个数据块的hash后的值修改,这就又影响了第二个数据块,所以第三个数据块又能检测到第二个数据块的hash后的内容和它之前存储的不同。所以入侵者又必须继续修改第三个数据块的hash值。这时候它就不得不暴露了,因为已经到头了,它没法篡改头指针的内容,这个头指针的内容是我们掌握的,一旦修改我们就会立刻发现有人篡改。[这就是为什么hash pointer 可以防篡改的原因,我只要掌握了头指针的内容就可以,而且还可以根据这些回溯到最开始被篡改的地方是在哪一块]

另外一个数据结构:Merkle tree

关于这个Merkle tree,网上的资料有很多。

它和上面那个结构一样,你只需要掌握root的hash值就可以保证整个数据没有被篡改,和上面的线性结构相比。它的最大好处是:因为是树形结构,可以用log(n)的时间去verify,或者用log(n)的时间去定位哪里发生了信息篡改。

总结:

普通指针 - 链表                    普通指针 - 二叉树

hash指针 - block chain       hash指针 - Merkle tree

 1.3Digital Signatures

数字签名, 和手写签名很像,只有你能签名,但是所有人都能验证。

如何实现:

3个操作,

1生成密钥:密钥生成器生成一个sk(私钥)(你用来签名的)和一个pk(公钥)(其他人用来验证)、

2签名:你用sk和一些Message一起生成一个签名。

3验证:其他人用pk,Message和带验证的签名来验证,验证结果就是简单的yes or no

数字签名必须做到:1有效的验证,2不会被别人伪造你的签名

怎么保证前面不会被伪造呢?下面是一个测试你的签名是否具有不被伪造的特性的方法。

和可能的攻击者玩一个游戏,在这个游戏中,攻击者可以发任意多次message给挑战者(签名拥有者),让签名者给他签好的名,攻击者通过研究这些message和签名来试图掌握伪造签名的方法。最后攻击者发送一个message和一个他伪造的签名,让挑战者去验证,如果验证成功,说明攻击者成功的伪造了签名。

我们可以用Hash(message)而不是message因为Hash(message)只有256bits,但是message可能很大。

最后视频说比特币用的是叫ECDSA(Elliptic CurveDigitalSignatureAlogorithm)的数字签名scheme,讲课的老师说这东西依赖hairy math,他相信你不会去想知道其中的细节的:)不过你还是可以去看它的细节,如果你感兴趣

好的随机性是必须的,ECDSA就做到了这一点。如果做不到这一点,很有可能就会泄漏你的sk。

这里的随机性应该是只生成私钥和公钥时候用到的,签名的时候似乎也会用到这样的随机性。

 1.4 Public Keys as Identities

这一篇看得不是很懂,好像是说把pk(公钥)当作一个人,一个动作,或者一个系统的ID(identity)。

如果你用一个公钥验证了一个人的签名和信息(sign&message),你看成是:这个公钥说了这段信息。

如果你想要一个新的ID,你就生成一对新的公钥、私钥对。

视频说这就带来了一个idea,来decentralize(去中心化)。

每个人都一个在任何时间创造出任何多的identity,整个系统是去中心划的。

这种identities在比特币中的术语叫addresses.

address在比特币或者其他数字货币中的意思就是一个pk,或pk的哈希。

后面讨论了这种形式的private(私有性)

首先,它看起来是私密的,你可以在家里创造它,没人知道这个随机的pk和现实中的谁联系起来。

但是,如果你经常用这个identity做一系列的动作,别人就可能通过这个猜到你是谁。比如joe经常做这一系列动作,而这个identity也经常做这一系列动作,所以这个identity可能是joe?

这是一个数字货币(like比特币)都要面对的问题,视频说不想剧透,后面会说。。。

 1.5 A Simple Cryptocurrency

这一篇讨论了假设的两个非常简单的数字货币:GoofyCoin和ScroogeCoin

GoofyCoin

rule1:Goofy可以创造新的coin,多少都可以,他创造的coin都属于他

rule2: 拥有coin的人可以通过签名把货币给别人,得到货币的人通过给他的人的签名证明它现在才是coin的拥有者。

现在问题来了

Alice从Goofy那里拿到coin后,她创造了两个数据结构,第一个显示她了Bob,第二个显示她给了Chuck,这两个数据结构上都有她的签名,Chuck不知道Alice已经给了Bob,所以Bob和Chuck都声称他们拥有这部分coin。这个叫做double-spending attack,像是一个人拿一份钱同时在京东和淘宝上都买了东西,显然这是不应该的,所以GoofyCoin是不安全的,它没有解决double-spending attack。

ScroogeCoin:

ScroogeCoin和GoofyCoin是类似的,只不过它是解决了double-spending attack的。

这就是之前说到的Block chain 数据结构,Scrooge拿到头指针并且签名,其他所有人都可以验证,每一个块会记录一笔交易的记录。视频里说到这里只是方便讲解,事实上每一块会记录多笔交易记录,比特币就是这样。

这样做的目的就是检测到double-spending,如果Alice打算把coin给Bob,然后Alice又打算造一个block上面显示她把钱给Chuck了,但是这时候Chuck就会发现不对劲,因为他可以看到交易记录里写的,他已经把coin给Bob了,事实上所有人都可以看到Alice把coin给Bob这个记录。所以当Alice这么做的时候,大家都能看到这是一个double-spending,就会拒绝这个操作。Scrooge也会拒绝。

在Scrooge中有两种transaction,第一个是CreateCoins,就和GoofyCoin一样,Scrooge创造新coin,这里稍微不同的是,Scrooge可以创造的币如下表格,第一列就是一个普通的序列,第二列代表这个新coin是标准币的几倍的价值,第三列代表这个币刚创造的时候谁会得到它。每个新coin都会有个ID,just like 73(0),

下图就是第二种transaction,当满足右边红色的四条后,Scrooge就会认为它是有效的,然后把它写进Block chain 历史记录里,每个人都会看到。

最后,这些coin都是永久不变的,不会被分成小的,也不会组成大的。但是可以用一些方法做出这样的效果,比如消耗一部分value小的coin,然后再创造一个value大的coin,就相当于是combie了coin了。

ScroogeCoin解决了double-spending attack,但是问题是如果大家不信任Scrooge,或者Scrooge不尽职怎么办?

我们可以去掉Scrooge来完成这些吗?也就是说我们可以区中心化吗(Scrooge就是中心)?

问题的关键是如何做到Scrooge提供的那些保证,但是用一种decentralize的方法。

具体怎么做,视频说他后面的课程会说,他希望你继续看这门课程。

【课程笔记】比特币和数字货币技术[Bitcoin and Cryptocurrency Technologies] week1的更多相关文章

  1. [转帖]央行推出数字货币DCEP:基于区块链技术、将取代现钞

    央行推出数字货币DCEP:基于区块链技术.将取代现钞 天天快报的内容. 密码财经 2019-10-29 18:15 关注   前不久的10月23日,Facebook的首席执行官扎克伯格在美国国会听证会 ...

  2. [转帖]都在说DCEP,央行数字货币究竟跟你有什么关系?

    都在说DCEP,央行数字货币究竟跟你有什么关系? https://kuaibao.qq.com/s/20191104A0G1D300?refer=spider   黄奇帆指出,DCEP 使得交易环节对 ...

  3. 五大主流数字币钱包:imToken数字货币钱包,Bitcoin core钱包,BTS网页版钱包,AToken轻钱包,Blockchain

    AToken数字货币钱包 超容易上手支持五大主流币种   互联网 | 编辑: 王静涛 2017-12-28 09:58:33转载     国家监管部门已叫停数字货币交易,包括火币网.比特币中国.OKC ...

  4. 免费开源数字货币交易所——基于Java开发的比特币交易所 | BTC交易所 | ETH交易所 | 数字货币交易所

    本项目是基于Java开发的比特币交易所 | BTC交易所 | ETH交易所 | 数字货币交易所 | 交易平台 | 撮合交易引擎.本项目基于SpringCloud微服务开发,可用来搭建和二次开发数字货币 ...

  5. [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问

    BTC钱包对接流程 一.   部署BTC钱包节点 二.   分析BTC钱包的API 三.   通过JSON-RPC访问BTC钱包API 四.   部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...

  6. [币严BIZZAN区块链]数字货币交易所钱包对接之比特币(BTC)

    在币严BIZZAN开发数字货币交易所的过程中,一共有两大难点,一个是高速撮合交易引擎,另一个是钱包对接,这两者是我们团队以前没有接触过的.这个系列的文章主要介绍数字货币交易所钱包对接实现技术.第一个要 ...

  7. 神经网络与数字货币量化交易系列(1)——LSTM预测比特币价格

    首发地址:https://www.fmz.com/digest-topic/4035 1.简单介绍 深度神经网络这些年越来越热门,在很多领域解决了过去无法解决的难题,体现了强大的能力.在时间序列的预测 ...

  8. 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用  c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网

    任何国家都无法限制数字货币.为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用  c.分布式算法的实现 d.数据存储技 ...

  9. 数字货币比特币以太坊买卖五档行情数据API接口

    数字货币比特币以太坊买卖五档行情数据API接口       数字货币一般包含比特币BTC.以太坊ETH.瑞波币XRP.泰达币USDT.比特币现金BCH.比特币SV.莱特币LTC.柚子币EOS.OKB. ...

随机推荐

  1. 【Luogu】P2567幸运数字(容斥爆搜)

    题目链接 先预处理出幸运数,把成倍数关系的剔掉,然后用容斥原理搜索一下. 这里的容斥很像小学学的那个“班上有n个同学,有a个同学喜欢数学,b个同学喜欢语文……”那样. #include<cstd ...

  2. 【Luogu】P2057善意的投票(最小割转最大流)

    题目链接 也算水题一道吧,不过Round1感性理解一下就xjb建了个图,40 Round2仔细分析了一会,理性建了个图,90 然后分析了半天……改大数组就A了…… 从S到所有值为1的点连一条inf的边 ...

  3. Spring Boot 必须先说说 Spring 框架!

    现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...

  4. BZOJ3507 [Cqoi2014]通配符匹配 【哈希 + 贪心】

    题目 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个 是星号(""'),可以匹配0个及以上的任意字符:另一个是问号(&quo ...

  5. CentOS7开启docker远程访问

    在 CentOS 中没有 /etc/default/docker,另外在 CentOS7 中也没有找到 /etc/sysconfig/docker这个配置文件. 在 /usr/lib/systemd/ ...

  6. 两个 DataTable 读取重复数据

    今天正好用到Excel 导入转换成table , 文件中数据要和数据库里数据进行比对,有重复的抛出重复数据. 和大家分享下,欢迎高手留言指点.有问题可以留言关注! /// <summary> ...

  7. 更新YUM源后的arning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY错误

    yum源更新后需要导入key值,否则报错如下,无法安装相关的包. Totalsize:42M DownloadingPackages: warning:rpmts_HdrFromFdno:Header ...

  8. Codeforces Round #442 (Div. 2) Danil and a Part-time Job

    http://codeforces.com/contest/877/problem/E 真的菜的不行,自己敲一个模板,到处都是问题.哎 #include <bits/stdc++.h> u ...

  9. 总结下web开发中基础性的常识

    一,HTML/5 1,浏览器渲染过程 主流浏览器渲染过程叫法有区别,但是主要流程还是相同的.Gecko 将视觉格式化元素组成的树称为“框架树”.每个元素都是一个框架.WebKit 使用的术语是“呈现树 ...

  10. PAT甲级练习题1001、1002

    1001 A+B Format (20 分)   Calculate a+b and output the sum in standard format -- that is, the digits ...