如何生成地址?什麼是非對稱加密?
生成地址的步驟#
- 隨機生成一個 256 位的私鑰(32 字節)
- 通過橢圓曲線加密獲取公鑰
- 公鑰經過兩次 hash 函數生成 20 字節的地址
橢圓曲線#
其中私鑰 K, 公鑰 P。
在曲線上隨機取一點 A (x,y),計算 Kx+Ky 等於 P。即 KA=P,其實 P 就是曲線上的一個坐標點。Bitcoin 中有一個公認的點 G 扮演點 A 的角色,也就是說隨機點是公開的,G 相當於一個常數。
消息加密#
NP 問題:給定 P 和 G 很難求出 K,但是根據 K 和 G 可以很快驗證 P 是正確的
有兩個人 Alice,Bob 他們分別有自己的公鑰私鑰
- Alice:Pa Ka
- Bob: Pb Kb
Pa = Ka * G
Pb = Kb * G
其中公鑰是公開的。也就說兩人還能知道另一個信息
- Alice: Ka * Pb = Ka * Kb * G
- Bob : Kb * Pa = Kb * Ka * G
這兩個信息是相等的,相當於這兩個人的相同的 key,這個 key 就可以相當於是只屬於這兩個人的對稱密鑰。
當 Alice 想給 Bob 寫信,用 Pb 加密信息,Bob 用 Kb 解密,即做一個可逆運算。
數字簽名#
m:message
Alice 用 Ka 對 m 簽名,m * Ka = N ,類似用私鑰生成公鑰(m 為 G)
對方想要驗證這句話是 Alice 說的
m * Pa = m * G * Ka , 即 = G * N,由於 G 是公開的,所以很快就能驗證 m 是否是 Alice 說的