KDF:函數(shù)推導(dǎo)區(qū)塊鏈密鑰區(qū)塊鏈
目前,最重要的并不是數(shù)字?jǐn)?shù)量的可能性。現(xiàn)在是攻擊者需要成功破解你的密鑰時(shí),現(xiàn)在就是KDF(KeyDerivationFunction)真正進(jìn)入技術(shù)的地方。
KDF或密鑰推導(dǎo)函數(shù)是一種強(qiáng)大的密鑰,即使你的熵很低。
想象一下,你想生成一顆種子,攻擊者知道有10,000,000種可能性。這種類型的種子通常很容易被攻破。
但是如果你可以讓枚舉變慢呢的方法呢?
KDF是一種散列函數(shù),有意浪費(fèi)計(jì)算資源。
這里是一個(gè)例子:
var derived = SCrypt.BitcoinComputeDerivedKey("hello", new byte[] { 1, 2, 3 });
RandomUtils.AddEntropy(derived);
即使你的攻擊者知道你的熵源是5個(gè)字母,他也需要運(yùn)行Scrypt來(lái)檢查每個(gè)可能性,這可能也需要5秒鐘去破解。
不信任PRNG沒(méi)有任何偏執(zhí),并且可以通過(guò)添加熵和使用KDF來(lái)緩解攻擊。
請(qǐng)記住,攻擊者可以通過(guò)收集有關(guān)您或您的系統(tǒng)的信息來(lái)減少熵。如果您使用時(shí)間戳作為熵源,那么攻擊者可以通過(guò)知道您上周生成密鑰來(lái)降低熵,并且您只在上午9點(diǎn)至下午6點(diǎn)之間使用計(jì)算機(jī)。
在上一部分中,簡(jiǎn)要地談了一個(gè)叫做Scrypt的特殊KDF。 正如所說(shuō),KDF的目標(biāo)是使暴力成本高昂。因此,對(duì)于您而言,已經(jīng)存在一個(gè)使用KDF用密碼加密私鑰的標(biāo)準(zhǔn)并不令人感到意外。 這就是BIP38。
這里是一個(gè)例子:
var privateKey = new Key();
var bitcoinPrivateKey = privateKey.GetWif(Network.Main);
Console.WriteLine(bitcoinPrivateKey);
// L1tZPQt7HHj5V49YtYAMSbAmwN9zRjajgXQt9gGtXhNZbcwbZk2rBitcoinEncryptedSecret encrypted
BitcoinPrivateKey = bitcoinPrivateKey.Encrypt("password");
Console.WriteLine(encryptedBitcoinPrivateKey);
// 6PYKYQQgx947Be41aHGypBhK6TA5Xhi9TdPBkatV3fHbbKrdDoBoXFCyLKvar decrypted
BitcoinPrivateKey = encryptedBitcoinPrivateKey.GetSecret("password");
Console.WriteLine(decryptedBitcoinPrivateKey);
// L1tZPQt7HHj5V49YtYAMSbAmwN9zRjajgXQt9gGtXhNZbcwbZk2r
Console.ReadLine();
這種加密用于兩種不同的情況:
你不相信你的存儲(chǔ)提供商(他們可能會(huì)被黑客攻擊)
您代表其他人存儲(chǔ)密鑰(并且您不想知道密鑰)
如果你擁有你的存儲(chǔ),那么在數(shù)據(jù)庫(kù)級(jí)別進(jìn)行加密可能就足夠了。
如果您的服務(wù)器負(fù)責(zé)解密密鑰,請(qǐng)小心,攻擊者可能會(huì)嘗試通過(guò)強(qiáng)制解密許多密鑰來(lái)對(duì)服務(wù)器執(zhí)行DDOS操作。盡可能將解密委托給最終用戶。
首先,為什么要生成幾個(gè)密鑰?
主要原因是隱私。 由于您可以看到所有地址的余額,所以最好為每筆交易使用一個(gè)新地址。
但是,實(shí)際上,您也可以為每個(gè)聯(lián)系人生成密鑰,這使得您可以輕松識(shí)別付款人而不會(huì)泄露太多隱私。
您可以生成一個(gè)密鑰,就像您在開(kāi)始時(shí)所做的那樣:
var privateKey = new Key()
但是,你有兩個(gè)問(wèn)題:
當(dāng)您生成新密鑰時(shí),您擁有的所有錢包備份將變得過(guò)時(shí)。
您不能將地址創(chuàng)建過(guò)程委派給不受信任的對(duì)等方。
如果您正在開(kāi)發(fā)Web錢包并代表您的用戶生成密鑰,并且一名用戶被黑客入侵,他們將立即開(kāi)始懷疑您。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來(lái)源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請(qǐng)轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來(lái)源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。