私鑰是一個256位的隨機數(shù),介于0到22??-1之間考廉。除了隨機生成外秘豹,也可以采用特定算法由一個的輸入得出32字節(jié)輸出。如采用SHA256的一種實現(xiàn):privateKey = SHA256(input)昌粤。比如你可以將你的生日加上名字作為輸入既绕。這種方式可以防止私鑰丟失,只要記住輸入就可以得到私鑰涮坐。但是因為輸入集合太小凄贩,易被構(gòu)造常見組合的彩虹表暴力破解。
公鑰是私鑰通過SECP256K1橢圓曲線算法生成袱讹,目前公鑰無法反推出私鑰疲扎。公鑰分壓縮格式和非壓縮格式。早期比特幣均使用非壓縮公鑰捷雕,后來大家發(fā)現(xiàn)其實公鑰的左右兩個32字節(jié)是有關(guān)聯(lián)的椒丧,左側(cè)(X)可以推出右側(cè)(Y)的平方值,有左側(cè)(X)就可以了【认铮現(xiàn)大部分客戶端已默認(rèn)使用壓縮公鑰壶熏。兩種公鑰的首個字節(jié)為標(biāo)識位,壓縮為33字節(jié)浦译,非壓縮為65字節(jié)棒假。以0x04開頭為非壓縮,0x02/0x03開頭為壓縮公鑰精盅,0x02/0x03的選取由右側(cè)Y開方后的奇偶決定帽哑。壓縮形式可以減小交易和區(qū)塊的體積,每個交易輸入(交易輸入解鎖腳本里有公鑰)減少32字節(jié)叹俏。
-
比特幣地址
- 比特幣地址為什么不直接使用公鑰呢妻枕?
有人認(rèn)為是公鑰太長了,轉(zhuǎn)換之后可以有效減少長度她肯。但更重要的原因是未來量子計算機可以破解橢圓曲線數(shù)字簽名算法(也就是說佳头,給定一個公鑰,量子計算機可以相當(dāng)快速的找到對應(yīng)的私鑰)晴氨,但它很難逆轉(zhuǎn)哈希算法康嘉,也就很難由比特幣地址逆運算出公鑰。因此一旦量子計算機出現(xiàn)籽前,至少未花費過的地址上的比特幣是安全的亭珍。
- 比特幣地址為什么不直接使用公鑰呢妻枕?
比如我給小明轉(zhuǎn)賬敷钾。因為在交易輸入中的解鎖腳本里是包含我的公鑰的,因此這筆交易后我這個地址上面的比特幣就不安全了肄梨。
所以我會選擇一個新的地址作為找零地址阻荒,剩余的比特幣將會被轉(zhuǎn)移到新的地址上了。而找零地址和小明的地址所對應(yīng)的公鑰都是沒有暴露的众羡,所以還是安全的侨赡。
- 生成地址
首先對公鑰進(jìn)行SHA256和RIPEMD160運算得到公鑰哈希,再對把版本號和公鑰哈希放在一起做兩次SHA256粱侣,取其前4個字節(jié)做為校驗碼羊壹,然后將版本號、公鑰哈希和校驗碼放在一起做Base58編碼生成比特幣地址齐婴,(可以理解為58進(jìn)制油猫,使地址更短,相對于Base64柠偶,Base58不使用數(shù)字"0"情妖,字母大寫"O",字母大寫"I"诱担,和字母小寫"l"毡证,以及"+"和"/"符號,因為這些符號肉眼不容易辨別该肴。)
-
私鑰能被破解碼
- 暴力破解
私鑰共有2^256 個情竹,大概是10^77 , 這個數(shù)字有多大呢?到目前為止匀哄,人類可觀測的宇宙中的原子數(shù)約為10^80個,通過遍歷的方式來暴力破解私鑰基本上是不可能的雏蛮,所以私鑰在密碼學(xué)上安全的涎嚼。但事實上有些錢包在生成私鑰時隨機程度有限,從而大大降低了私鑰的安全性挑秉。 - 量子計算機
量子計算機可以由公鑰推出私鑰法梯,那么一旦公鑰暴露,私鑰就面臨著被破解的危險犀概。所以目前最好的方式是每次支付時立哑,將支付余額轉(zhuǎn)到一個新的地址,廢棄舊地址姻灶。因為新地址的公鑰是沒有暴露的铛绰。當(dāng)然也不要太過擔(dān)心,首先量子計算機依然遙遙無期产喉,其次比特幣也會做出相應(yīng)的改變以應(yīng)對量子計算機捂掰,比如將私鑰的位數(shù)增加到512位敢会、1024位或者更高。
- 暴力破解