有啲好奇點解你會出post講
因為我覺得最有效既學習方法,就係講番一次出黎教人
agger
有啲好奇點解你會出post講
因為我覺得最有效既學習方法,就係講番一次出黎教人
強post, it 白痴留名
有個位諗唔通就係究竟點樣去交易少於1 個bitcoin 係咪之後會講?
50年前d 人點將5仙買個白飯?
要交易五仙首先要有五仙嘅幣存在
依家香港已經唔存在五仙幣所以我地最少都要交易一毫。 bitcoin掘出嚟就係1蚊所以先問點樣去交易少於1 個bitcoin
事實上我都幾訝異會有咁嘅程度嘅回應
唔係想罵戰
但邊個話bitcoin 係"一蚊一蚊咁掘"?
再加上, digital 既野......要有返"5仙" 有難度?
我都唔想罵戰
無奈閣下個例子真係完全講唔到重點
用數學既方法黎表示上面兩個特質:
x1, x2係input
y1, y2係output
Hiding:given y1, 好難好難好難搵到x1 such that SHA256(x1) = y1
collision resistance:好難好難好難搵到x1, x2 such that SHA256(x1) = SHA256(x2)
數學家發明既hash function有好多款
但就唔係款款hash function都符合到上面兩個要求
例如SHA family入面既SHA1(output length: 160 bit)
美國政府起1995年發表SHA1, 所有科技巨頭包括Apple Google Microsoft 當時都用左呢個cryptographic hash function
用暴力破解SHA1既話計2^80次先會搵到一對input導致collision
直到2005年,一個中國女數學家-王小雲 發現左個方法,只需要計2^63次就會搵到collision input
注意王小雲只係諗到個方法,但係果時佢都未真係搵到x1,x2 such that SHA1(x1)=SHA1(x2)
要再隔多12年,即係2017年既二月, Google先成功製造到兩份唔同既PDF file , 佢地既SHA1 output係一樣既
所以而家SHA1已經無資格做cryptographic hash function, 只能夠做一個普通hash function
如果大家有留意chrome既新聞,應該聽過chrome由v.56開始唔再支援SHA1生成既certificate
就係因為google知道chrome已經唔再安全,通過到SHA1認證都唔代表乜野
唔係話SHA完全無用,例如git而家仲用緊SHA1黎做file integrity check
只係大家已經唔可以倚靠呢個function黎保護系統
hash function仲有好多值得講既topic
例如birthday attack: 160bit output length既hash function點解只需要2^80步就可以暴力破解到collision,而唔係2^160步?
點為知好難好難好難搵到?有無單手游出公海咁難?
講左咁耐,究竟hash function同bitcoin有咩關係?
SHA256正正係所有礦工日計夜計既數:Find x such that SHA256(x) < target
而且成條blockchain之所以安全,之所以無可能被篡改,都係多得SHA2既collision resistance property
詳情就留番後面既chapter先講
點解 160個位但係暴力破解2^80就可以破? 20^80係平均次數?
因為birthday attack
e.g. 20人有人同一日生日既機率係
1-(365/365)(364/365)...(346/365)
=1- prod(1-i/365) from i=0 to 19
generalise完會得到
搵到collision既機會大約係=n(n-1)/(2m)
n係試既次數, m係output size
當n=sqrt(m), 個機率大約係1/2
所以when m=2^160, n=2^80
2^80係平均數
我就咁話「破解到」可能係有少少misleading, 其實都係得50%機會
不過已經好犀利
就算要去到99%都唔洗好多(相對於2^160黎講)
用番Birthday problem黎講
假設唔係潤年,要100%肯定搵到collision就要搵366個人
如果我只係要50%機會搵到collision,咁要搵幾多個人?答案:23個
點計?
由base case開始睇
P(兩個人,而且發生collision)
=1-P(兩個人,而且無發生collision)
=1-(365/365 * 364/365)
第一個人邊一日生日都無所謂
第二個人只要同第一個人唔撞就得,所以第二個人有364個選擇
P(三個人,而且發生collision)
=1-P(三個人,而且無發生collision)
=1-(365/365 * 364/365 * 363/365)
第一個人邊一日生日都無所謂
第二個人只要同第一個人唔撞就得,所以第二個人有364個選擇
第三個人只要同第一/二個人唔撞就得,所以第三個人有363個選擇
general formula係
P(k個人,而且發生collision)
=1- (365/365 * 364/365 * ... * (365-k+1)/365)
=1- (365*364...*(365-k+1))/365^k
sub k=23去上面條式
就計到
P(23個人,而且發生collision) = 50.7%
呢個結果都幾得意
原來facebook fd list只要有23個人,就有一半機會有一pair fd同一日生日
比多幾個數:
只需要70個人,已經有99.9%發生collision
100個人已經有99.99997%機會發生
不如樓主唔好覆住 出咗下篇文先
用數學既方法黎表示上面兩個特質:
x1, x2係input
y1, y2係output
Hiding:given y1, 好難好難好難搵到x1 such that SHA256(x1) = y1
collision resistance:好難好難好難搵到x1, x2 such that SHA256(x1) = SHA256(x2)
數學家發明既hash function有好多款
但就唔係款款hash function都符合到上面兩個要求
例如SHA family入面既SHA1(output length: 160 bit)
美國政府起1995年發表SHA1, 所有科技巨頭包括Apple Google Microsoft 當時都用左呢個cryptographic hash function
用暴力破解SHA1既話計2^80次先會搵到一對input導致collision
直到2005年,一個中國女數學家-王小雲 發現左個方法,只需要計2^63次就會搵到collision input
注意王小雲只係諗到個方法,但係果時佢都未真係搵到x1,x2 such that SHA1(x1)=SHA1(x2)
要再隔多12年,即係2017年既二月, Google先成功製造到兩份唔同既PDF file , 佢地既SHA1 output係一樣既
所以而家SHA1已經無資格做cryptographic hash function, 只能夠做一個普通hash function
如果大家有留意chrome既新聞,應該聽過chrome由v.56開始唔再支援SHA1生成既certificate
就係因為google知道chrome已經唔再安全,通過到SHA1認證都唔代表乜野
唔係話SHA完全無用,例如git而家仲用緊SHA1黎做file integrity check
只係大家已經唔可以倚靠呢個function黎保護系統
hash function仲有好多值得講既topic
例如birthday attack: 160bit output length既hash function點解只需要2^80步就可以暴力破解到collision,而唔係2^160步?
點為知好難好難好難搵到?有無單手游出公海咁難?
講左咁耐,究竟hash function同bitcoin有咩關係?
SHA256正正係所有礦工日計夜計既數:Find x such that SHA256(x) < target
而且成條blockchain之所以安全,之所以無可能被篡改,都係多得SHA2既collision resistance property
詳情就留番後面既chapter先講
點解 160個位但係暴力破解2^80就可以破? 20^80係平均次數?
因為birthday attack
e.g. 20人有人同一日生日既機率係
1-(365/365)(364/365)...(346/365)
=1- prod(1-i/365) from i=0 to 19
generalise完會得到
搵到collision既機會大約係=n(n-1)/(2m)
n係試既次數, m係output size
當n=sqrt(m), 個機率大約係1/2
所以when m=2^160, n=2^80
2^80係平均數
我就咁話「破解到」可能係有少少misleading, 其實都係得50%機會
不過已經好犀利
就算要去到99%都唔洗好多(相對於2^160黎講)
用番Birthday problem黎講
假設唔係潤年,要100%肯定搵到collision就要搵366個人
如果我只係要50%機會搵到collision,咁要搵幾多個人?答案:23個
點計?
由base case開始睇
P(兩個人,而且發生collision)
=1-P(兩個人,而且無發生collision)
=1-(365/365 * 364/365)
第一個人邊一日生日都無所謂
第二個人只要同第一個人唔撞就得,所以第二個人有364個選擇
P(三個人,而且發生collision)
=1-P(三個人,而且無發生collision)
=1-(365/365 * 364/365 * 363/365)
第一個人邊一日生日都無所謂
第二個人只要同第一個人唔撞就得,所以第二個人有364個選擇
第三個人只要同第一/二個人唔撞就得,所以第三個人有363個選擇
general formula係
P(k個人,而且發生collision)
=1- (365/365 * 364/365 * ... * (365-k+1)/365)
=1- (365*364...*(365-k+1))/365^k
sub k=23去上面條式
就計到
P(23個人,而且發生collision) = 50.7%
呢個結果都幾得意
原來facebook fd list只要有23個人,就有一半機會有一pair fd同一日生日
比多幾個數:
只需要70個人,已經有99.9%發生collision
100個人已經有99.99997%機會發生
但係你講緊”暴力破解“, 就應該係講緊有一個特定既file 要撞開, 而唔係好似birthday question 咁隨便咪埋眼搵2個相同既hash出黎。咁既情況之下仍然係需要撞2^160次
不如樓主唔好覆住 出咗下篇文先
聽晚12點前出chapter 2
Lm
-----前方有進階數學-----
如果用上面既方法黎生成 public key, 就死梗
識少少數學既話你一睇就知可以調番轉佢黎計
即係拎住public key可以derive番private key出黎
因為elliptic curve on real plane係唔cryptographic secure
bitcoin真係用既elliptic curve其實又唔憜圓又唔係曲線
而係一堆點,條式係
y^2 === (x^3 + 7) mod p, where p = 2^256-2^32-2^9-2^8-2^7-2^6-2^4-1, 係一個超級大既質數
mod既意思係同餘,例如38===14 (mod 12), 因為38除12餘數係2, 14除12餘數又係2
所以38同14係同餘over 12
plot呢堆點出黎好似一堆symmetric noise咁:
https://image.ibb.co/n9ftkQ/discrete_elliptic_curve.png
起呢一大堆點上面計P點+Q點要點做呢?
淨係劃一條線連起P同Q點係唔夠既
要畫(ax+by+c) mod p === 0, 係一堆平行線
起呢堆平行線之間搵出第三點再水平翻轉(概念同curve既情況一樣)
因為加左mod operator, 而且係一個超級大既質數
要起上面reverse engineer番條private key係好難好難好難既事
即係
given public key, G點: find private key such that: public key = private key * G點
咁你可能會話好簡單者,private key = public key / G點
elliptic curve上面既除法,又叫做discrete logarithm
問題黎喇,某種條件下既discrete logarithm係難到連數學家都諗唔到快既方法做
discrete log既難度係直情超越左RSA (based on large integer factorization)
即係話唔洗用咁多既bit數都提供到同樣既安全程度
就係因為discrete log係咁難解
我地先可以好安全咁比人知我地個public key,咁放心比人睇我地個簽名
同時又唔擔心佢地會估得番條private key出黎