英文授课嘛,总有些词需要查。 百度百科上给的解释是这样的
加密货币(英文:Cryptocurrency,常常用复数Cryptocurrencies,又译密码货币,密码学货币)
是一种使用密码学原理来确保交易安全及控制交易单位创造的交易媒介。
加密货币是数字货币(或称虚拟货币)的一种 。
比特币在2009年成为第一个去中心化的加密货币,这之后加密货币一词多指此类设计。
自此之后数种类似的加密货币被创造,它们通常被称作altcoins。
加密货币基于去中心化的共识机制 ,与依赖中心化监管体系的银行金融系统相对。
而BitCoin呢?
BitCoin:A Peer-toPeer Electronic Cash System
也就是一种对等电子现金系统
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。
而比特币就是和哈希函数 y = h ( x ) y=h(x) y=h(x) 密切相关的
它的输入是任意长度的位串,输出则是固定长度的位串(没错没错压缩映射,而且只能由input到output,output推不出来input)
很难通过一个给定的哈希值y来找到原像x
如果有n位输入,那么时间复杂度为 O ( 2 n ) O(2^n) O(2n)
很难找到两个不同的值 x x x 和 x ′ x' x′ 使得 h ( x ) = h ( x ′ ) h(x) = h(x') h(x)=h(x′)
这个名字还挺可爱的,因为来源于一个生日的例子
生日悖论是指,如果一个房间里有23个或23个以上的人,
那么至少有两个人的生日相同的概率要大于50%。
这就意味着在一个典型的标准小学班级(30人)中,
存在两人生日相同的可能性更高。
对于60或者更多的人,这种概率要大于99%。
P r ( r i = r j ∣ i ≠ j ) = 1 − P r ( r i ≠ r j ∣ i ≠ j , ∀ i , ∀ j ) = 1 − N − 1 N … N − ( n − 1 ) N = 1 − ∑ i = 1 n − 1 ( 1 − i N ) ≥ 1 − Π i = 1 n − 1 e − i N = 1 − e − ( n 2 2 N ) P_r(r_i=r_j|i\not = j) = 1 - P_r(r_i\not = r_j|i\not = j,\forall i,\forall j)=1-\frac{N-1}{N}\dots\frac{N-(n-1)}{N} = 1-\sum_{i=1}^{n-1}(1-\frac{i}{N})\ge 1 - \Pi_{i=1}^{n-1} e^{-\frac{i}{N}} =1 - e^{-(\frac{n^2}{2N})} Pr(ri=rj∣i=j)=1−Pr(ri=rj∣i=j,∀i,∀j)=1−NN−1…NN−(n−1)=1−∑i=1n−1(1−Ni)≥1−Πi=1n−1e−Ni=1−e−(2Nn2)
总之就是当N很大的时候概率很接近于1
虽然有,但是找到的很慢。
比方说每秒计算 300 × 1 0 1 5 300\times 10^15 300×1015 个hash,使用SHA-256,那么需要 2 128 300 ∗ 1 0 15 ∗ 365 ∗ 24 ∗ 60 ∗ 60 = 3.6 ∗ 1 0 13 \frac{2^{128}}{300*10^{15}*365*24*60*60} = 3.6*10^{13} 300∗1015∗365∗24∗60∗602128=3.6∗1013 年
总之很恐怖
找到两个不同的值 x x x 和 x ′ x' x′ 使得 h ( x ) = h ( x ′ ) h(x) = h(x') h(x)=h(x′) 所需要的时间复杂度是 O ( 2 n ) O(2^n) O(2n)
SHA有很多,其中SHA-256输出有256bits
SHA-256在bitcoins中的应用
总之就是用来验证计算和创建地址的。
公钥加密(public key cryptography)总是需要数字签名
( s k , p k ) = ( s e c r e t / p r i v a t e k e y , p u b l i c k e y ) (sk,pk)=(secret/private ~~key,public ~~key) (sk,pk)=(secret/private key,public key)
比如说
已知一个整数a,它被整数b除,得到余数c,这很容易。但是反过来,已知b和c,想要求出a,则是不可能的,只能去一个数一个数的去猜。a是私钥,c是公钥,这样就实现了单向加密。
如我们有整数0-9,对10取模。
例:
椭圆曲线: q y 2 + d y = r x 3 + c x 2 + a x + b qy^2+dy=rx^3+cx^2+ax+b qy2+dy=rx3+cx2+ax+b
由此可以定义点的加减法,在次之上,点的乘法为
Q = k G = G + G + G + . . . + G ( 共 k 个 ) Q=kG = G+G+G+...+G(共k个) Q=kG=G+G+G+...+G(共k个)
y 2 m o d p = x 3 + a x + b m o d p y^2~~ mod~~p ~=~x^3+ax+b ~~mod~~p y2 mod p = x3+ax+b mod p