密钥

密钥

加密货币钱包GateHub数据遭泄露,140万账户信息被盗

资讯8btc 发表了文章 • 2019-11-20 12:49 • 来自相关话题

数据泄露索引网站“Have I Been Pwned”的安全研究员表示,有两个网站的220万用户的密码数据和个人信息被泄露。

11月19日,Ars Technica报道称,安全研究员Troy Hunt证实,被盗数据来自加密货币钱包GateHub和RuneScape机器人提供商EpicBot的账户。

Hunt表示,第一批被盗数据来自加密货币钱包GateHub的140万个用户账户的个人信息。第二批包含了自称是世界上最安全的一体化RuneScape机器人提供商EpicBot的约80万个用户账户的数据。

据报道,被盗信息包括注册的电子邮件地址、密码、双因素认证密钥、助记短语和钱包哈希。根据他们的调查结果,GateHub内部人士表示,这些钱包哈希并未被访问。

这已经不是Gatehub第一次遭遇数据泄露了。据报道,今年6月,黑客入侵了大约100个XRP Ledger钱包,导致近1000万美元的资金被盗。

同样在6月,Gatehub警告称,目前出现了针对其加密货币钱包用户的钓鱼欺诈活动。据该公司透露,GateHub的钱包用户收到了恶意邮件,地址看起来像是来自GateHub官方的:分别以“@gatehub.com”和“@gatehub.net”结尾。

去年8月下旬,Gatehub账户数据被发布到一个黑客网站上。三个月前,这家加密货币服务公司报告称,自己遭到了黑客攻击。GateHub称,攻击者窃取了——或者至少试图窃取——1.8万多个用户账户的大量敏感信息。

对此,GateHub表示,网站管理人员通知了受影响的用户,并生成了新的加密密钥和重新加密的敏感信息,比如钱包的密钥。

相比之下,本次遭泄露的数据范围更广。更重要的是,这次泄露影响了多达140万的GateHub用户,而不仅仅是18473名用户。

目前GateHub尚未就本次信息泄露发表评论。

随着技术和安全的提高,黑客们实施的欺诈和攻击手段也越来越多样化。近年来最严重的事件之一就是位于斯洛文尼亚的比特币矿场NiceHash遭遇了黑客攻击。2017年12月,一名黑客窃取了大约4700枚比特币,价值约6400万美元。该平台称这次安全漏洞是一次高度熟练和有组织的攻击,是通过复杂的社交工程进行的。


原文:https://cointelegraph.com/news/gatehub-crypto-wallet-data-breach-compromises-passwords-of-14m-users
作者:Joeri Cant
编译:Wendy 查看全部
201911200340196958.jpg


数据泄露索引网站“Have I Been Pwned”的安全研究员表示,有两个网站的220万用户的密码数据和个人信息被泄露。

11月19日,Ars Technica报道称,安全研究员Troy Hunt证实,被盗数据来自加密货币钱包GateHub和RuneScape机器人提供商EpicBot的账户。

Hunt表示,第一批被盗数据来自加密货币钱包GateHub的140万个用户账户的个人信息。第二批包含了自称是世界上最安全的一体化RuneScape机器人提供商EpicBot的约80万个用户账户的数据。

据报道,被盗信息包括注册的电子邮件地址、密码、双因素认证密钥、助记短语和钱包哈希。根据他们的调查结果,GateHub内部人士表示,这些钱包哈希并未被访问。

这已经不是Gatehub第一次遭遇数据泄露了。据报道,今年6月,黑客入侵了大约100个XRP Ledger钱包,导致近1000万美元的资金被盗。

同样在6月,Gatehub警告称,目前出现了针对其加密货币钱包用户的钓鱼欺诈活动。据该公司透露,GateHub的钱包用户收到了恶意邮件,地址看起来像是来自GateHub官方的:分别以“@gatehub.com”和“@gatehub.net”结尾。

去年8月下旬,Gatehub账户数据被发布到一个黑客网站上。三个月前,这家加密货币服务公司报告称,自己遭到了黑客攻击。GateHub称,攻击者窃取了——或者至少试图窃取——1.8万多个用户账户的大量敏感信息。

对此,GateHub表示,网站管理人员通知了受影响的用户,并生成了新的加密密钥和重新加密的敏感信息,比如钱包的密钥。

相比之下,本次遭泄露的数据范围更广。更重要的是,这次泄露影响了多达140万的GateHub用户,而不仅仅是18473名用户。

目前GateHub尚未就本次信息泄露发表评论。

随着技术和安全的提高,黑客们实施的欺诈和攻击手段也越来越多样化。近年来最严重的事件之一就是位于斯洛文尼亚的比特币矿场NiceHash遭遇了黑客攻击。2017年12月,一名黑客窃取了大约4700枚比特币,价值约6400万美元。该平台称这次安全漏洞是一次高度熟练和有组织的攻击,是通过复杂的社交工程进行的。


原文:https://cointelegraph.com/news/gatehub-crypto-wallet-data-breach-compromises-passwords-of-14m-users
作者:Joeri Cant
编译:Wendy

比特币钱包开发:通过助记词扩展子地址的原理与编码

攻略chaindesk 发表了文章 • 2018-11-28 10:41 • 来自相关话题

目标

    掌握生成助记词的原理
    掌握助记词生成种子的原理
    掌握种子生成子秘钥的原理
    编程实践:从生成助记词到子地址



前言


为了安全尽量保证比特币地址的公钥未在网络上出现过,这就需要我们每次支付时,将支付额转到一个新的账户发起转账,而收款时使用一个新账号地址。为了满足这样的场景,就需要安全管理很多的账号与对应的秘钥,这样显然是不科学的。因此,这里讲解通过助记词生成很多子地址,这样,我们只需保存一份助记词就相当于保存好了2^31个账号的私钥。


一、助记词的生成过程


BIP39是助记词标准的实现,助记词是一个随机数的字序列,用来作为种子产生一个确定性的钱包。单词序列足以重新创建种子,然后再创建钱包和所有派生的密钥。一个实现带有助记词的确定性钱包应用程序在首次创建钱包时将向用户显示12到24个单词的序列。该单词序列是钱包备份,可用于恢复和重新创建相同或任何兼容的钱包应用程序中的所有密钥。记忆单词使用户更容易备份钱包,因为与随机数字序列相比,它们易于阅读和正确地转录。所有的助记词在这里可以查看:助记词词库。

使用BIP39中定义的标准化过程,钱包自动生成助记词。钱包从一个熵源开始,添加一个校验和,然后将熵映射到一个单词列表,具体步骤如下:

    创建128到256位的随机序列(熵)。
    通过获取SHA256哈希的第一(熵长度/ 32)位来创建随机序列的校验和。
    将校验和添加到随机序列的末尾。
    将序列分成11位的部分。
    将每个11位值映射到来自2048个单词的预定义字典中的单词。
    助记词是单词序列。


生成助记词的步骤如下图。







下表描述了初始熵长度(ENT),校验和长度(CS)和单词中生成的助记词(MS)的长度之间的关系。

熵(bits)Checksum(bits)熵+Checksum(bits)助记词长度(words)128413212160516515192619818224723121256826424


二、从助记词到种子


用户可以决定用密码来保护他们的助记符。如果不存在密码短语,则使用空字符串“”。

助记词代表长度为128到256位的熵。然后使用熵通过使用密钥扩展函数PBKDF2来导出更长(512位)的种子。然后,所产生的种子用于构建确定性钱包并获得其密钥。

密钥扩展功能有两个参数:助记词和盐(salt)。密钥扩展功能中的盐的目的是使得难以构建能够进行暴力攻击的查找表。在BIP-39标准中,salt具有另一个目的 - 它允许引入密码短语作为保护种子的额外安全因子。

    PBKDF2密钥扩展功能的第一个参数是从步骤6产生的助记词。
    PBKDF2密钥扩展功能的第二个参数是salt。salt由字符串常量“mnemonic”和可选的用户提供的密码短语字符串组成。
    PBKDF2使用2048轮HMAC-SHA512哈希算法来扩展助记词和salt参数,产生512位值作为其最终输出。那个512位的值就是种子。


使用助记词来生成种子的步骤如下图。







下面演示一下助记词生成种子的实例:

12个长度的助记词,无密码生成种子






9C286891-0902-4F1D-AD31-4EB804F71DF7

12个长度的助记词,有密码生成种子






51FC2016-15A7-4641-A203-43964671B881

24个长度的助记词,无密码生成种子






DE00BE18-E081-446B-9736-69198B2524E0

24个长度的助记词,有密码生成种子






442FFE9B-0929-4C4B-B0B1-7D046B5C85FC


三、种子生成子秘钥


种子通过不可逆HMAC-SHA512算法推算出512位的哈希串,前256位是主私钥Master Private Key (m),后256位是主链码Master Chain Code(c)。

给定父扩展私钥和索引i,可以计算相应的子扩展私钥。

函数CKDpriv((kpar,cpar),i)→(ki,ci)

如果i ≥ 2^31(硬化的子密钥):让I= HMAC-SHA512(Key = cpar,Data = 0x00 || ser256(kpar)|| ser32(i))。 (注意:0x00将私钥补齐到33字节长。)

如果i<2^31(普通的子密钥):让I= HMAC-SHA512(Key = cpar,Data = serP(point(kpar))|| ser32(i))。

给定父扩展公钥和索引i,可以计算相应的子扩展公钥。它只针对未硬化的子密钥定义。

如果i ≥ 2^31(硬化子密钥):返回失败

如果i<2^31(普通子密钥):让I= HMAC-SHA512(Key = cpar, Data = serP(Kpar) || ser32(i)).

扩展私钥的前缀是xprv,如:

tprv8iGPAfgu51nkCZZtua8jFgzVoCQLqHZrLCQonxTo7qdtzutL8ZFZt1yAtpcUF8sHdNyiVhece3SSRsBvtUCKpGkRvxXgV2TMdcDbKQzstta 扩展公钥的前缀是tpub,如:

tpubDExRK5j9DPUR62bgoDoKf6ecNDvGzckkuW1b5UW6Y7SHqQ96kx5A4Wb34w6bkHUStdq5w7ZHPQHkipwRdSQMbGnqTAQj1sEBaJmL9wXvBSu

每个扩展密钥有 2^31 个普通子密钥,2^31个硬化子密钥。这些子密钥都有一个索引,普通子密钥使用索引0到2^31-1,硬化的子密钥使用索引 2^31 到 2^32-1,为了简化硬化密钥索引的符号,数字iH表示i + 2^31。

以上过程再结合BIP43,BIP44,HD钱包就实现了多币种、多账户、多用途等功能。







四、编程实践:从生成助记词到扩展子地址


代码

var bitcoin = require('bitcoinjs-lib');
var bip39 = require("bip39")
var bip32 = require("bip32")

const myNetwork = bitcoin.networks.testnet

const mnemonic = 'eternal list thank chaos trick paper sniff ridge make govern invest abandon'
// const mnemonic = bip39.generateMnemonic()
const seed = bip39.mnemonicToSeed(mnemonic, "lixu1234qwer")
const root = bip32.fromSeed(seed, myNetwork)

for(var i = 0; i < 3; i++) {
    const path = "m/44'/1'/0'/0/"+i
    console.log("路径:", path)
    const keyPair = root.derivePath(path)

    const privateKey = keyPair.toWIF()
    console.log("私钥", privateKey)

    const publicKey = keyPair.publicKey.toString("hex")
    console.log("公钥:", publicKey)

    let address = getAddress(keyPair, myNetwork)
    console.log("地址:", address, "\n")
}

function getAddress(keyPair, network) {
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network})
    return address
}



输出

    下面是在测试网络下生成的私钥、公钥、地址






    下面是在正式网络下生成的私钥、公钥、地址







验证














代码解析

    需要安装库:bitcoinjs-lib、bip39、bip32。
    bitcoin.networks.testnet:指定为测试网络,若切换到正式网络,则为bitcoin.networks.bitcoin,同时需要改变路径。
    bip39.generateMnemonic():用于生成助记词。
    bip39.mnemonicToSeed(mnemonic, "lixu1234qwer"):将助记词与密码转成种子。
    bip32.fromSeed(seed, myNetwork):将种子转为相应网络下的root。
    const path = "m/44'/1'/0'/0/"+i:指定第一个账号的第i个扩展子账号路径。若切换到正式网络,路径则是"m/44'/0'/0'/0/"+i
    root.derivePath(path):获取指定路径的keyPair。
    keyPair.toWIF():获取私钥。
    keyPair.publicKey.toString("hex"):获取公钥。
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network}):获取普通比特币地址,p2pkh这是最常见的比特币交易地址类型。可见:在测试网络中的地址是以m或n开头,在正式网络中是以1开头。



作者:黎跃春,孔壹学院、ChainDesk(http://chaindesk.cn)创始人兼CEO,前北京中油瑞飞信息技术有限公司研究院hybrid架构师,通信和信息技术区块链高级授课专家,16年创办国内区块链职业教育领先品牌孔壹学院,18年5月首创基于区块链的多相脑图分割模型学习社区ChainDesk。 查看全部
d15a22c4-5e33-44e7-997a-fd2f3acfefb6.jpeg

目标


    掌握生成助记词的原理
    掌握助记词生成种子的原理
    掌握种子生成子秘钥的原理
    编程实践:从生成助记词到子地址




前言


为了安全尽量保证比特币地址的公钥未在网络上出现过,这就需要我们每次支付时,将支付额转到一个新的账户发起转账,而收款时使用一个新账号地址。为了满足这样的场景,就需要安全管理很多的账号与对应的秘钥,这样显然是不科学的。因此,这里讲解通过助记词生成很多子地址,这样,我们只需保存一份助记词就相当于保存好了2^31个账号的私钥。


一、助记词的生成过程


BIP39是助记词标准的实现,助记词是一个随机数的字序列,用来作为种子产生一个确定性的钱包。单词序列足以重新创建种子,然后再创建钱包和所有派生的密钥。一个实现带有助记词的确定性钱包应用程序在首次创建钱包时将向用户显示12到24个单词的序列。该单词序列是钱包备份,可用于恢复和重新创建相同或任何兼容的钱包应用程序中的所有密钥。记忆单词使用户更容易备份钱包,因为与随机数字序列相比,它们易于阅读和正确地转录。所有的助记词在这里可以查看:助记词词库。

使用BIP39中定义的标准化过程,钱包自动生成助记词。钱包从一个熵源开始,添加一个校验和,然后将熵映射到一个单词列表,具体步骤如下:


    创建128到256位的随机序列(熵)。
    通过获取SHA256哈希的第一(熵长度/ 32)位来创建随机序列的校验和。
    将校验和添加到随机序列的末尾。
    将序列分成11位的部分。
    将每个11位值映射到来自2048个单词的预定义字典中的单词。
    助记词是单词序列。



生成助记词的步骤如下图。

daf87b21b5cc47648770ac2c0ce45cfd.jpg



下表描述了初始熵长度(ENT),校验和长度(CS)和单词中生成的助记词(MS)的长度之间的关系。

熵(bits)Checksum(bits)熵+Checksum(bits)助记词长度(words)128413212160516515192619818224723121256826424


二、从助记词到种子


用户可以决定用密码来保护他们的助记符。如果不存在密码短语,则使用空字符串“”。

助记词代表长度为128到256位的熵。然后使用熵通过使用密钥扩展函数PBKDF2来导出更长(512位)的种子。然后,所产生的种子用于构建确定性钱包并获得其密钥。

密钥扩展功能有两个参数:助记词和盐(salt)。密钥扩展功能中的盐的目的是使得难以构建能够进行暴力攻击的查找表。在BIP-39标准中,salt具有另一个目的 - 它允许引入密码短语作为保护种子的额外安全因子。


    PBKDF2密钥扩展功能的第一个参数是从步骤6产生的助记词。
    PBKDF2密钥扩展功能的第二个参数是salt。salt由字符串常量“mnemonic”和可选的用户提供的密码短语字符串组成。
    PBKDF2使用2048轮HMAC-SHA512哈希算法来扩展助记词和salt参数,产生512位值作为其最终输出。那个512位的值就是种子。



使用助记词来生成种子的步骤如下图。

7940906315c34475ba9b1ed27f91158c.jpg



下面演示一下助记词生成种子的实例:

12个长度的助记词,无密码生成种子

6ea8e87291814ca98732038822cee54b.jpg


9C286891-0902-4F1D-AD31-4EB804F71DF7

12个长度的助记词,有密码生成种子

5411c336ccc84b4787305c97285ababe.jpg


51FC2016-15A7-4641-A203-43964671B881

24个长度的助记词,无密码生成种子

4c4bc9aafba84ac7bcec500f6822ec10.jpg


DE00BE18-E081-446B-9736-69198B2524E0

24个长度的助记词,有密码生成种子

93bca0aa437e4b10921b86875f8b556e.jpg


442FFE9B-0929-4C4B-B0B1-7D046B5C85FC


三、种子生成子秘钥


种子通过不可逆HMAC-SHA512算法推算出512位的哈希串,前256位是主私钥Master Private Key (m),后256位是主链码Master Chain Code(c)。

给定父扩展私钥和索引i,可以计算相应的子扩展私钥。

函数CKDpriv((kpar,cpar),i)→(ki,ci)

如果i ≥ 2^31(硬化的子密钥):让I= HMAC-SHA512(Key = cpar,Data = 0x00 || ser256(kpar)|| ser32(i))。 (注意:0x00将私钥补齐到33字节长。)

如果i<2^31(普通的子密钥):让I= HMAC-SHA512(Key = cpar,Data = serP(point(kpar))|| ser32(i))。

给定父扩展公钥和索引i,可以计算相应的子扩展公钥。它只针对未硬化的子密钥定义。

如果i ≥ 2^31(硬化子密钥):返回失败

如果i<2^31(普通子密钥):让I= HMAC-SHA512(Key = cpar, Data = serP(Kpar) || ser32(i)).

扩展私钥的前缀是xprv,如:

tprv8iGPAfgu51nkCZZtua8jFgzVoCQLqHZrLCQonxTo7qdtzutL8ZFZt1yAtpcUF8sHdNyiVhece3SSRsBvtUCKpGkRvxXgV2TMdcDbKQzstta 扩展公钥的前缀是tpub,如:

tpubDExRK5j9DPUR62bgoDoKf6ecNDvGzckkuW1b5UW6Y7SHqQ96kx5A4Wb34w6bkHUStdq5w7ZHPQHkipwRdSQMbGnqTAQj1sEBaJmL9wXvBSu

每个扩展密钥有 2^31 个普通子密钥,2^31个硬化子密钥。这些子密钥都有一个索引,普通子密钥使用索引0到2^31-1,硬化的子密钥使用索引 2^31 到 2^32-1,为了简化硬化密钥索引的符号,数字iH表示i + 2^31。

以上过程再结合BIP43,BIP44,HD钱包就实现了多币种、多账户、多用途等功能。

seed.png



四、编程实践:从生成助记词到扩展子地址


代码


var bitcoin = require('bitcoinjs-lib');
var bip39 = require("bip39")
var bip32 = require("bip32")

const myNetwork = bitcoin.networks.testnet

const mnemonic = 'eternal list thank chaos trick paper sniff ridge make govern invest abandon'
// const mnemonic = bip39.generateMnemonic()
const seed = bip39.mnemonicToSeed(mnemonic, "lixu1234qwer")
const root = bip32.fromSeed(seed, myNetwork)

for(var i = 0; i < 3; i++) {
    const path = "m/44'/1'/0'/0/"+i
    console.log("路径:", path)
    const keyPair = root.derivePath(path)

    const privateKey = keyPair.toWIF()
    console.log("私钥", privateKey)

    const publicKey = keyPair.publicKey.toString("hex")
    console.log("公钥:", publicKey)

    let address = getAddress(keyPair, myNetwork)
    console.log("地址:", address, "\n")
}

function getAddress(keyPair, network) {
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network})
    return address
}




输出

    下面是在测试网络下生成的私钥、公钥、地址

A37E562F-6A7A-4471-919B-F3ED347A6A82.png


    下面是在正式网络下生成的私钥、公钥、地址

5139288B-4F69-4CDE-929E-6B2CD15088EF.png



验证


F0374899-E1A8-464B-93DA-06D7C0FF5A0B.png


23817D2B-91A9-4ADC-AAD9-FCDC9BA24B0D.png




代码解析


    需要安装库:bitcoinjs-lib、bip39、bip32。
    bitcoin.networks.testnet:指定为测试网络,若切换到正式网络,则为bitcoin.networks.bitcoin,同时需要改变路径。
    bip39.generateMnemonic():用于生成助记词。
    bip39.mnemonicToSeed(mnemonic, "lixu1234qwer"):将助记词与密码转成种子。
    bip32.fromSeed(seed, myNetwork):将种子转为相应网络下的root。
    const path = "m/44'/1'/0'/0/"+i:指定第一个账号的第i个扩展子账号路径。若切换到正式网络,路径则是"m/44'/0'/0'/0/"+i
    root.derivePath(path):获取指定路径的keyPair。
    keyPair.toWIF():获取私钥。
    keyPair.publicKey.toString("hex"):获取公钥。
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network}):获取普通比特币地址,p2pkh这是最常见的比特币交易地址类型。可见:在测试网络中的地址是以m或n开头,在正式网络中是以1开头。




作者:黎跃春,孔壹学院、ChainDesk(http://chaindesk.cn)创始人兼CEO,前北京中油瑞飞信息技术有限公司研究院hybrid架构师,通信和信息技术区块链高级授课专家,16年创办国内区块链职业教育领先品牌孔壹学院,18年5月首创基于区块链的多相脑图分割模型学习社区ChainDesk。

助记词的前世今生

攻略chaindd 发表了文章 • 2018-11-22 11:17 • 来自相关话题

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?

用过钱包的用户都知道,在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人。

对于普通用户来说,如果只是一味的向他们强调助记词重要性的结论,而不告诉背后的原因的话,是很难调动起人的底层动力的,很可能过几天就忘了助记词的重要性(小编已经看过不少在群里呼唤自己因为助记词丢失而导致破产的杯具)。

作为猎豹区块链的安全大使,今天小豹就来和大家聊聊助记词和它背后的故事。

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?


多账户需求

我们先拿现实生活的例子打一个比方,通常来说,我们存在银行的钱都会有很多账户,有的账户用来买煎饼果子的零钱账户,有的是用来对公业务的账户,有的是存大额资产的账户。这些账户只需要一个身份证就能够办理,我们用一个身份证可以在网银上登录很多账户,万一银行卡不慎丢失了,也可以通过身份证进行补办。在现实生活中,身份证是无比重要的。

而到了数字货币的世界,道理也是一样的,为了业务的方便,我们通常想要有多个账户,满足不同场景的需求。如果说每次创建账户都在公链上生成一个私钥,那就像每次办理银行卡都要记忆一长串的银行卡号一样的反人性。


降低出错概率

众所周知,在区块链世界里,只要保留了私钥,就能解锁账户,但是通常来说私钥是由64位的很长的字符串组成,如果我们想要创建100个账户,那我们就要记100个私钥,记录和保存成本是非常大的,况且,在记录海量的私钥的过程中,可能还会出现地址和私钥匹配不上的问题,或者记录时粗心大意写错字母的问题,等等,总而言之,出错的概率是很高的,由于数字货币这种“只认私钥不认人”的特点,这些小的错误很可能导致资产无法找回。 


保护隐私

由于区块链公有链的公开的特性,链上的所有转账记录任何人都可以查到,如果同一个账户关联的收入支出太多了,最终是可以摸出一些线索,把你和一些交易给匹配起来的,所以为了隐私考虑,我们的很多隐私业务通常会创建出新的账户来进行交易。

聪明的开发人员为了解决上述问题,提出了Bip39协议。Bip39协议的全称是Bitcoin protocol,最初是由比特币社区的开发者提出,后来被其他的主流区块链项目所认可,继而成为了整个行业共识和规范。

BIP39协议的核心是,由12个单词来确定自己的账户,12个单词会生成很大的种子,从2的256次方选出一个数,由于随机生成的数是很大的,所以完全不用担心生成的12个单词会重复。

12个单词生成的账户是固定的,拿到的12个单词就可以创建无数多的私钥、公钥和地址。

用公式表示他们之间的关系,可写成如下形式:

私钥=算法1(助记词)

公钥=算法2 (私钥)

公钥哈希=算法3 (公钥)

地址=算法4 (公钥哈希)

所以,地址=算法4(算法3(算法2(算法1(助记词))))


当然,算法1、2、3、4都是公开的算法。 

通过密码学的保证,生成的单词顺序和内容是不可能会重复的,通过助记词,我们可以生成任意公链的地址,需要多少的地址就能够生成有多少个地址。

大家可以通过https://iancoleman.io/bip39/生成助记词或者查看助记词对应的私钥、公钥和地址。

并且,BIP39协议几乎是支持所有公链的。






小豹拿小豹私人的Matemask的助记词做了个实验:可以看到,通过我的Matemask的助记词创建的账户地址,和网站生成的地址是一模一样的,就连顺序也是高度一致的。


技术角度理解助记词


从技术上的角度来说,BIP39 是通过12个助记词的单词序列,通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子(通常是16进制的)。

相比于BIP32协议,我们可以看出那一种备份起来更友好

//BIP32 随机数种子090ABCB3A6e1400e9345bC60c78a8BE7

//BIP39 助记词种子

candy maple cake sugar pudding cream honey rich smooth crumble sweet treat 

使用助记词作为种子其实包含2个部分:助记词生成及助记词推导出随机种子。


生成助记词

助记词生成的过程是这样的:先生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词,这个过程图示如下:






助记词推导出种子

这个过程使用密钥拉伸(Key stretching)函数,被用来增强弱密钥的安全性,PBKDF2是常用的密钥拉伸算法中的一种。

PBKDF2基本原理是通过一个为随机函数(例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。

密钥拉伸函数需要两个参数:助记词和盐。盐可以提高暴力破解的难度。 盐由常量字符串 "mnemonic" 及一个可选的密码组成,注意使用不同密码,则拉伸函数在使用同一个助记词的情况下会产生一个不同的种子,这个过程图示图下:







助记词推动了区块链的普及


有了助记词之后,任何一笔交易,我们都可以创建一个新的账户,账户里面的钱也可以进行自由转移。

在区块链世界,只需要记住12个简单的助记词,就间接记住了所有区块链上的资产,就如同现实生活中的身份证一样便捷、高效。

有了助记词之后,大大减轻了普通用户的使用成本,从体验上来说对用户是非常友好的,这拉进了区块链与普罗大众的距离,同时也满足了高端用户的隐私问题。可以这么说,BIP39协议大大的推动了区块链的普及。

可能有人会说,“我最讨厌英语啊,让我记12个英语单词,简直就是要了我的命啊!”

对于这部分用户我先不做评价,但是聪明的开发者早就想到了这一点,BIP39协议目前是支持了几大主流语言的,英语、日语、西班牙语、韩语、法语,当然也少不了中文,所以大家完全可以用12个汉字作为助记词。

如果连12个汉字都懒得记的话,那我只能说,施主,区块链世界实在与你无缘,找个好人就嫁了吧。

当然,任何事物都有两面性,助记词虽然带来了许多便利,但是,也诞生了另外的安全隐患,那就是一旦12个单词泄露,或者被黑客获取,助记词是未经加密的私钥,任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产控制权。 
在这里给大家几个建议:

(1)助记词就是你数字世界的命根,打死都不能告诉别人。

(2)一定要多次验证备份的助记词是否正确,一旦抄错一两个字母,对后续找回正确的助记词将带来巨大的困难。

(3)助记词最好是用人脑进行记忆,实在怕忘记,用物理方式进行备份,备份好了之后,务必妥善保管(千万不要用任何可联网设备存储)。
 

(作者:猎豹区块链安全;本文仅代表作者观点,不代表链得得官方立场) 查看全部
electrum.jpg

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?

用过钱包的用户都知道,在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人。

对于普通用户来说,如果只是一味的向他们强调助记词重要性的结论,而不告诉背后的原因的话,是很难调动起人的底层动力的,很可能过几天就忘了助记词的重要性(小编已经看过不少在群里呼唤自己因为助记词丢失而导致破产的杯具)。

作为猎豹区块链的安全大使,今天小豹就来和大家聊聊助记词和它背后的故事。

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?


多账户需求

我们先拿现实生活的例子打一个比方,通常来说,我们存在银行的钱都会有很多账户,有的账户用来买煎饼果子的零钱账户,有的是用来对公业务的账户,有的是存大额资产的账户。这些账户只需要一个身份证就能够办理,我们用一个身份证可以在网银上登录很多账户,万一银行卡不慎丢失了,也可以通过身份证进行补办。在现实生活中,身份证是无比重要的。

而到了数字货币的世界,道理也是一样的,为了业务的方便,我们通常想要有多个账户,满足不同场景的需求。如果说每次创建账户都在公链上生成一个私钥,那就像每次办理银行卡都要记忆一长串的银行卡号一样的反人性。


降低出错概率

众所周知,在区块链世界里,只要保留了私钥,就能解锁账户,但是通常来说私钥是由64位的很长的字符串组成,如果我们想要创建100个账户,那我们就要记100个私钥,记录和保存成本是非常大的,况且,在记录海量的私钥的过程中,可能还会出现地址和私钥匹配不上的问题,或者记录时粗心大意写错字母的问题,等等,总而言之,出错的概率是很高的,由于数字货币这种“只认私钥不认人”的特点,这些小的错误很可能导致资产无法找回。 


保护隐私

由于区块链公有链的公开的特性,链上的所有转账记录任何人都可以查到,如果同一个账户关联的收入支出太多了,最终是可以摸出一些线索,把你和一些交易给匹配起来的,所以为了隐私考虑,我们的很多隐私业务通常会创建出新的账户来进行交易。

聪明的开发人员为了解决上述问题,提出了Bip39协议。Bip39协议的全称是Bitcoin protocol,最初是由比特币社区的开发者提出,后来被其他的主流区块链项目所认可,继而成为了整个行业共识和规范。

BIP39协议的核心是,由12个单词来确定自己的账户,12个单词会生成很大的种子,从2的256次方选出一个数,由于随机生成的数是很大的,所以完全不用担心生成的12个单词会重复。

12个单词生成的账户是固定的,拿到的12个单词就可以创建无数多的私钥、公钥和地址。

用公式表示他们之间的关系,可写成如下形式:


私钥=算法1(助记词)

公钥=算法2 (私钥)

公钥哈希=算法3 (公钥)

地址=算法4 (公钥哈希)

所以,地址=算法4(算法3(算法2(算法1(助记词))))



当然,算法1、2、3、4都是公开的算法。 

通过密码学的保证,生成的单词顺序和内容是不可能会重复的,通过助记词,我们可以生成任意公链的地址,需要多少的地址就能够生成有多少个地址。

大家可以通过https://iancoleman.io/bip39/生成助记词或者查看助记词对应的私钥、公钥和地址。

并且,BIP39协议几乎是支持所有公链的。

zhujici1.jpeg


小豹拿小豹私人的Matemask的助记词做了个实验:可以看到,通过我的Matemask的助记词创建的账户地址,和网站生成的地址是一模一样的,就连顺序也是高度一致的。


技术角度理解助记词


从技术上的角度来说,BIP39 是通过12个助记词的单词序列,通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子(通常是16进制的)。

相比于BIP32协议,我们可以看出那一种备份起来更友好

//BIP32 随机数种子090ABCB3A6e1400e9345bC60c78a8BE7

//BIP39 助记词种子

candy maple cake sugar pudding cream honey rich smooth crumble sweet treat 

使用助记词作为种子其实包含2个部分:助记词生成及助记词推导出随机种子。


生成助记词

助记词生成的过程是这样的:先生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词,这个过程图示如下:

zhujici2.jpg


助记词推导出种子

这个过程使用密钥拉伸(Key stretching)函数,被用来增强弱密钥的安全性,PBKDF2是常用的密钥拉伸算法中的一种。

PBKDF2基本原理是通过一个为随机函数(例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。

密钥拉伸函数需要两个参数:助记词和盐。盐可以提高暴力破解的难度。 盐由常量字符串 "mnemonic" 及一个可选的密码组成,注意使用不同密码,则拉伸函数在使用同一个助记词的情况下会产生一个不同的种子,这个过程图示图下:

zhujici3.jpg



助记词推动了区块链的普及


有了助记词之后,任何一笔交易,我们都可以创建一个新的账户,账户里面的钱也可以进行自由转移。

在区块链世界,只需要记住12个简单的助记词,就间接记住了所有区块链上的资产,就如同现实生活中的身份证一样便捷、高效。

有了助记词之后,大大减轻了普通用户的使用成本,从体验上来说对用户是非常友好的,这拉进了区块链与普罗大众的距离,同时也满足了高端用户的隐私问题。可以这么说,BIP39协议大大的推动了区块链的普及。

可能有人会说,“我最讨厌英语啊,让我记12个英语单词,简直就是要了我的命啊!”

对于这部分用户我先不做评价,但是聪明的开发者早就想到了这一点,BIP39协议目前是支持了几大主流语言的,英语、日语、西班牙语、韩语、法语,当然也少不了中文,所以大家完全可以用12个汉字作为助记词。

如果连12个汉字都懒得记的话,那我只能说,施主,区块链世界实在与你无缘,找个好人就嫁了吧。

当然,任何事物都有两面性,助记词虽然带来了许多便利,但是,也诞生了另外的安全隐患,那就是一旦12个单词泄露,或者被黑客获取,助记词是未经加密的私钥,任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产控制权。 
在这里给大家几个建议:

(1)助记词就是你数字世界的命根,打死都不能告诉别人。

(2)一定要多次验证备份的助记词是否正确,一旦抄错一两个字母,对后续找回正确的助记词将带来巨大的困难。

(3)助记词最好是用人脑进行记忆,实在怕忘记,用物理方式进行备份,备份好了之后,务必妥善保管(千万不要用任何可联网设备存储)。
 

(作者:猎豹区块链安全;本文仅代表作者观点,不代表链得得官方立场)

美国银行获得加密秘钥设备专利,旨在降低私钥被盗风险

资讯8btc 发表了文章 • 2018-10-31 22:41 • 来自相关话题

据外媒今日报道,美国银行(Bank of America)周二获得了一项存储加密密钥的设备的专利,该专利文件的细节暗示了加密货币的应用。

美国专利商标局(U.S. patent and Trademark Office)周二授予美国银行一项专利。在这项专利中,该行概述了一种用于存储私人密钥(比如区块链平台上使用的密钥)的“强化存储设备”,并解释说,目前,大多数密钥只能存储在本地,只有密码作为保护。

专利声明说,

“在系统的特定实施例中,身份验证例程被作为加密货币交易、区块链交易或类似交易的一部分进行。”


该专利多次引用了“加密货币”,但总体而言,该文件还保留了其他类型的密钥,以应用于所提出的设备。

根据美国银行的说法,由于存储这些密钥的计算机通常连接到互联网或其他公共网络,本地存储意味着它们“一直容易被滥用。”

“因此,我们需要一种安全的方式来存储私人密码学密钥,”专利继续声明,指出这种存储方法应该“降低”用户私钥被盗的风险。

美国银行建议将其技术专利应用于加密货币和区块链领域,这并不令人惊讶,因为该公司在这一领域的专利申请非常多。

正如《财富》(Fortune) 6月份报道的那样,美国银行已经为数十项可能的应用申请了专利权,以便为未来的用途“做好准备”。

美国银行CTO Catherine Bessant在纽约的一场活动中表示:

"虽然我们还没有找到大规模的机会,但我们希望做好准备。"



原文:New Bank of America's Patent Hints at Plan to Store Cryptocurrency Keys
作者:Nikhilesh De
译者:夕雨 查看全部
201810310607441615.jpg

据外媒今日报道,美国银行(Bank of America)周二获得了一项存储加密密钥的设备的专利,该专利文件的细节暗示了加密货币的应用。

美国专利商标局(U.S. patent and Trademark Office)周二授予美国银行一项专利。在这项专利中,该行概述了一种用于存储私人密钥(比如区块链平台上使用的密钥)的“强化存储设备”,并解释说,目前,大多数密钥只能存储在本地,只有密码作为保护。

专利声明说,


“在系统的特定实施例中,身份验证例程被作为加密货币交易、区块链交易或类似交易的一部分进行。”



该专利多次引用了“加密货币”,但总体而言,该文件还保留了其他类型的密钥,以应用于所提出的设备。

根据美国银行的说法,由于存储这些密钥的计算机通常连接到互联网或其他公共网络,本地存储意味着它们“一直容易被滥用。”

“因此,我们需要一种安全的方式来存储私人密码学密钥,”专利继续声明,指出这种存储方法应该“降低”用户私钥被盗的风险。

美国银行建议将其技术专利应用于加密货币和区块链领域,这并不令人惊讶,因为该公司在这一领域的专利申请非常多。

正如《财富》(Fortune) 6月份报道的那样,美国银行已经为数十项可能的应用申请了专利权,以便为未来的用途“做好准备”。

美国银行CTO Catherine Bessant在纽约的一场活动中表示:


"虽然我们还没有找到大规模的机会,但我们希望做好准备。"




原文:New Bank of America's Patent Hints at Plan to Store Cryptocurrency Keys
作者:Nikhilesh De
译者:夕雨

加密货币钱包GateHub数据遭泄露,140万账户信息被盗

资讯8btc 发表了文章 • 2019-11-20 12:49 • 来自相关话题

数据泄露索引网站“Have I Been Pwned”的安全研究员表示,有两个网站的220万用户的密码数据和个人信息被泄露。

11月19日,Ars Technica报道称,安全研究员Troy Hunt证实,被盗数据来自加密货币钱包GateHub和RuneScape机器人提供商EpicBot的账户。

Hunt表示,第一批被盗数据来自加密货币钱包GateHub的140万个用户账户的个人信息。第二批包含了自称是世界上最安全的一体化RuneScape机器人提供商EpicBot的约80万个用户账户的数据。

据报道,被盗信息包括注册的电子邮件地址、密码、双因素认证密钥、助记短语和钱包哈希。根据他们的调查结果,GateHub内部人士表示,这些钱包哈希并未被访问。

这已经不是Gatehub第一次遭遇数据泄露了。据报道,今年6月,黑客入侵了大约100个XRP Ledger钱包,导致近1000万美元的资金被盗。

同样在6月,Gatehub警告称,目前出现了针对其加密货币钱包用户的钓鱼欺诈活动。据该公司透露,GateHub的钱包用户收到了恶意邮件,地址看起来像是来自GateHub官方的:分别以“@gatehub.com”和“@gatehub.net”结尾。

去年8月下旬,Gatehub账户数据被发布到一个黑客网站上。三个月前,这家加密货币服务公司报告称,自己遭到了黑客攻击。GateHub称,攻击者窃取了——或者至少试图窃取——1.8万多个用户账户的大量敏感信息。

对此,GateHub表示,网站管理人员通知了受影响的用户,并生成了新的加密密钥和重新加密的敏感信息,比如钱包的密钥。

相比之下,本次遭泄露的数据范围更广。更重要的是,这次泄露影响了多达140万的GateHub用户,而不仅仅是18473名用户。

目前GateHub尚未就本次信息泄露发表评论。

随着技术和安全的提高,黑客们实施的欺诈和攻击手段也越来越多样化。近年来最严重的事件之一就是位于斯洛文尼亚的比特币矿场NiceHash遭遇了黑客攻击。2017年12月,一名黑客窃取了大约4700枚比特币,价值约6400万美元。该平台称这次安全漏洞是一次高度熟练和有组织的攻击,是通过复杂的社交工程进行的。


原文:https://cointelegraph.com/news/gatehub-crypto-wallet-data-breach-compromises-passwords-of-14m-users
作者:Joeri Cant
编译:Wendy 查看全部
201911200340196958.jpg


数据泄露索引网站“Have I Been Pwned”的安全研究员表示,有两个网站的220万用户的密码数据和个人信息被泄露。

11月19日,Ars Technica报道称,安全研究员Troy Hunt证实,被盗数据来自加密货币钱包GateHub和RuneScape机器人提供商EpicBot的账户。

Hunt表示,第一批被盗数据来自加密货币钱包GateHub的140万个用户账户的个人信息。第二批包含了自称是世界上最安全的一体化RuneScape机器人提供商EpicBot的约80万个用户账户的数据。

据报道,被盗信息包括注册的电子邮件地址、密码、双因素认证密钥、助记短语和钱包哈希。根据他们的调查结果,GateHub内部人士表示,这些钱包哈希并未被访问。

这已经不是Gatehub第一次遭遇数据泄露了。据报道,今年6月,黑客入侵了大约100个XRP Ledger钱包,导致近1000万美元的资金被盗。

同样在6月,Gatehub警告称,目前出现了针对其加密货币钱包用户的钓鱼欺诈活动。据该公司透露,GateHub的钱包用户收到了恶意邮件,地址看起来像是来自GateHub官方的:分别以“@gatehub.com”和“@gatehub.net”结尾。

去年8月下旬,Gatehub账户数据被发布到一个黑客网站上。三个月前,这家加密货币服务公司报告称,自己遭到了黑客攻击。GateHub称,攻击者窃取了——或者至少试图窃取——1.8万多个用户账户的大量敏感信息。

对此,GateHub表示,网站管理人员通知了受影响的用户,并生成了新的加密密钥和重新加密的敏感信息,比如钱包的密钥。

相比之下,本次遭泄露的数据范围更广。更重要的是,这次泄露影响了多达140万的GateHub用户,而不仅仅是18473名用户。

目前GateHub尚未就本次信息泄露发表评论。

随着技术和安全的提高,黑客们实施的欺诈和攻击手段也越来越多样化。近年来最严重的事件之一就是位于斯洛文尼亚的比特币矿场NiceHash遭遇了黑客攻击。2017年12月,一名黑客窃取了大约4700枚比特币,价值约6400万美元。该平台称这次安全漏洞是一次高度熟练和有组织的攻击,是通过复杂的社交工程进行的。


原文:https://cointelegraph.com/news/gatehub-crypto-wallet-data-breach-compromises-passwords-of-14m-users
作者:Joeri Cant
编译:Wendy

比特币钱包开发:通过助记词扩展子地址的原理与编码

攻略chaindesk 发表了文章 • 2018-11-28 10:41 • 来自相关话题

目标

    掌握生成助记词的原理
    掌握助记词生成种子的原理
    掌握种子生成子秘钥的原理
    编程实践:从生成助记词到子地址



前言


为了安全尽量保证比特币地址的公钥未在网络上出现过,这就需要我们每次支付时,将支付额转到一个新的账户发起转账,而收款时使用一个新账号地址。为了满足这样的场景,就需要安全管理很多的账号与对应的秘钥,这样显然是不科学的。因此,这里讲解通过助记词生成很多子地址,这样,我们只需保存一份助记词就相当于保存好了2^31个账号的私钥。


一、助记词的生成过程


BIP39是助记词标准的实现,助记词是一个随机数的字序列,用来作为种子产生一个确定性的钱包。单词序列足以重新创建种子,然后再创建钱包和所有派生的密钥。一个实现带有助记词的确定性钱包应用程序在首次创建钱包时将向用户显示12到24个单词的序列。该单词序列是钱包备份,可用于恢复和重新创建相同或任何兼容的钱包应用程序中的所有密钥。记忆单词使用户更容易备份钱包,因为与随机数字序列相比,它们易于阅读和正确地转录。所有的助记词在这里可以查看:助记词词库。

使用BIP39中定义的标准化过程,钱包自动生成助记词。钱包从一个熵源开始,添加一个校验和,然后将熵映射到一个单词列表,具体步骤如下:

    创建128到256位的随机序列(熵)。
    通过获取SHA256哈希的第一(熵长度/ 32)位来创建随机序列的校验和。
    将校验和添加到随机序列的末尾。
    将序列分成11位的部分。
    将每个11位值映射到来自2048个单词的预定义字典中的单词。
    助记词是单词序列。


生成助记词的步骤如下图。







下表描述了初始熵长度(ENT),校验和长度(CS)和单词中生成的助记词(MS)的长度之间的关系。

熵(bits)Checksum(bits)熵+Checksum(bits)助记词长度(words)128413212160516515192619818224723121256826424


二、从助记词到种子


用户可以决定用密码来保护他们的助记符。如果不存在密码短语,则使用空字符串“”。

助记词代表长度为128到256位的熵。然后使用熵通过使用密钥扩展函数PBKDF2来导出更长(512位)的种子。然后,所产生的种子用于构建确定性钱包并获得其密钥。

密钥扩展功能有两个参数:助记词和盐(salt)。密钥扩展功能中的盐的目的是使得难以构建能够进行暴力攻击的查找表。在BIP-39标准中,salt具有另一个目的 - 它允许引入密码短语作为保护种子的额外安全因子。

    PBKDF2密钥扩展功能的第一个参数是从步骤6产生的助记词。
    PBKDF2密钥扩展功能的第二个参数是salt。salt由字符串常量“mnemonic”和可选的用户提供的密码短语字符串组成。
    PBKDF2使用2048轮HMAC-SHA512哈希算法来扩展助记词和salt参数,产生512位值作为其最终输出。那个512位的值就是种子。


使用助记词来生成种子的步骤如下图。







下面演示一下助记词生成种子的实例:

12个长度的助记词,无密码生成种子






9C286891-0902-4F1D-AD31-4EB804F71DF7

12个长度的助记词,有密码生成种子






51FC2016-15A7-4641-A203-43964671B881

24个长度的助记词,无密码生成种子






DE00BE18-E081-446B-9736-69198B2524E0

24个长度的助记词,有密码生成种子






442FFE9B-0929-4C4B-B0B1-7D046B5C85FC


三、种子生成子秘钥


种子通过不可逆HMAC-SHA512算法推算出512位的哈希串,前256位是主私钥Master Private Key (m),后256位是主链码Master Chain Code(c)。

给定父扩展私钥和索引i,可以计算相应的子扩展私钥。

函数CKDpriv((kpar,cpar),i)→(ki,ci)

如果i ≥ 2^31(硬化的子密钥):让I= HMAC-SHA512(Key = cpar,Data = 0x00 || ser256(kpar)|| ser32(i))。 (注意:0x00将私钥补齐到33字节长。)

如果i<2^31(普通的子密钥):让I= HMAC-SHA512(Key = cpar,Data = serP(point(kpar))|| ser32(i))。

给定父扩展公钥和索引i,可以计算相应的子扩展公钥。它只针对未硬化的子密钥定义。

如果i ≥ 2^31(硬化子密钥):返回失败

如果i<2^31(普通子密钥):让I= HMAC-SHA512(Key = cpar, Data = serP(Kpar) || ser32(i)).

扩展私钥的前缀是xprv,如:

tprv8iGPAfgu51nkCZZtua8jFgzVoCQLqHZrLCQonxTo7qdtzutL8ZFZt1yAtpcUF8sHdNyiVhece3SSRsBvtUCKpGkRvxXgV2TMdcDbKQzstta 扩展公钥的前缀是tpub,如:

tpubDExRK5j9DPUR62bgoDoKf6ecNDvGzckkuW1b5UW6Y7SHqQ96kx5A4Wb34w6bkHUStdq5w7ZHPQHkipwRdSQMbGnqTAQj1sEBaJmL9wXvBSu

每个扩展密钥有 2^31 个普通子密钥,2^31个硬化子密钥。这些子密钥都有一个索引,普通子密钥使用索引0到2^31-1,硬化的子密钥使用索引 2^31 到 2^32-1,为了简化硬化密钥索引的符号,数字iH表示i + 2^31。

以上过程再结合BIP43,BIP44,HD钱包就实现了多币种、多账户、多用途等功能。







四、编程实践:从生成助记词到扩展子地址


代码

var bitcoin = require('bitcoinjs-lib');
var bip39 = require("bip39")
var bip32 = require("bip32")

const myNetwork = bitcoin.networks.testnet

const mnemonic = 'eternal list thank chaos trick paper sniff ridge make govern invest abandon'
// const mnemonic = bip39.generateMnemonic()
const seed = bip39.mnemonicToSeed(mnemonic, "lixu1234qwer")
const root = bip32.fromSeed(seed, myNetwork)

for(var i = 0; i < 3; i++) {
    const path = "m/44'/1'/0'/0/"+i
    console.log("路径:", path)
    const keyPair = root.derivePath(path)

    const privateKey = keyPair.toWIF()
    console.log("私钥", privateKey)

    const publicKey = keyPair.publicKey.toString("hex")
    console.log("公钥:", publicKey)

    let address = getAddress(keyPair, myNetwork)
    console.log("地址:", address, "\n")
}

function getAddress(keyPair, network) {
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network})
    return address
}



输出

    下面是在测试网络下生成的私钥、公钥、地址






    下面是在正式网络下生成的私钥、公钥、地址







验证














代码解析

    需要安装库:bitcoinjs-lib、bip39、bip32。
    bitcoin.networks.testnet:指定为测试网络,若切换到正式网络,则为bitcoin.networks.bitcoin,同时需要改变路径。
    bip39.generateMnemonic():用于生成助记词。
    bip39.mnemonicToSeed(mnemonic, "lixu1234qwer"):将助记词与密码转成种子。
    bip32.fromSeed(seed, myNetwork):将种子转为相应网络下的root。
    const path = "m/44'/1'/0'/0/"+i:指定第一个账号的第i个扩展子账号路径。若切换到正式网络,路径则是"m/44'/0'/0'/0/"+i
    root.derivePath(path):获取指定路径的keyPair。
    keyPair.toWIF():获取私钥。
    keyPair.publicKey.toString("hex"):获取公钥。
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network}):获取普通比特币地址,p2pkh这是最常见的比特币交易地址类型。可见:在测试网络中的地址是以m或n开头,在正式网络中是以1开头。



作者:黎跃春,孔壹学院、ChainDesk(http://chaindesk.cn)创始人兼CEO,前北京中油瑞飞信息技术有限公司研究院hybrid架构师,通信和信息技术区块链高级授课专家,16年创办国内区块链职业教育领先品牌孔壹学院,18年5月首创基于区块链的多相脑图分割模型学习社区ChainDesk。 查看全部
d15a22c4-5e33-44e7-997a-fd2f3acfefb6.jpeg

目标


    掌握生成助记词的原理
    掌握助记词生成种子的原理
    掌握种子生成子秘钥的原理
    编程实践:从生成助记词到子地址




前言


为了安全尽量保证比特币地址的公钥未在网络上出现过,这就需要我们每次支付时,将支付额转到一个新的账户发起转账,而收款时使用一个新账号地址。为了满足这样的场景,就需要安全管理很多的账号与对应的秘钥,这样显然是不科学的。因此,这里讲解通过助记词生成很多子地址,这样,我们只需保存一份助记词就相当于保存好了2^31个账号的私钥。


一、助记词的生成过程


BIP39是助记词标准的实现,助记词是一个随机数的字序列,用来作为种子产生一个确定性的钱包。单词序列足以重新创建种子,然后再创建钱包和所有派生的密钥。一个实现带有助记词的确定性钱包应用程序在首次创建钱包时将向用户显示12到24个单词的序列。该单词序列是钱包备份,可用于恢复和重新创建相同或任何兼容的钱包应用程序中的所有密钥。记忆单词使用户更容易备份钱包,因为与随机数字序列相比,它们易于阅读和正确地转录。所有的助记词在这里可以查看:助记词词库。

使用BIP39中定义的标准化过程,钱包自动生成助记词。钱包从一个熵源开始,添加一个校验和,然后将熵映射到一个单词列表,具体步骤如下:


    创建128到256位的随机序列(熵)。
    通过获取SHA256哈希的第一(熵长度/ 32)位来创建随机序列的校验和。
    将校验和添加到随机序列的末尾。
    将序列分成11位的部分。
    将每个11位值映射到来自2048个单词的预定义字典中的单词。
    助记词是单词序列。



生成助记词的步骤如下图。

daf87b21b5cc47648770ac2c0ce45cfd.jpg



下表描述了初始熵长度(ENT),校验和长度(CS)和单词中生成的助记词(MS)的长度之间的关系。

熵(bits)Checksum(bits)熵+Checksum(bits)助记词长度(words)128413212160516515192619818224723121256826424


二、从助记词到种子


用户可以决定用密码来保护他们的助记符。如果不存在密码短语,则使用空字符串“”。

助记词代表长度为128到256位的熵。然后使用熵通过使用密钥扩展函数PBKDF2来导出更长(512位)的种子。然后,所产生的种子用于构建确定性钱包并获得其密钥。

密钥扩展功能有两个参数:助记词和盐(salt)。密钥扩展功能中的盐的目的是使得难以构建能够进行暴力攻击的查找表。在BIP-39标准中,salt具有另一个目的 - 它允许引入密码短语作为保护种子的额外安全因子。


    PBKDF2密钥扩展功能的第一个参数是从步骤6产生的助记词。
    PBKDF2密钥扩展功能的第二个参数是salt。salt由字符串常量“mnemonic”和可选的用户提供的密码短语字符串组成。
    PBKDF2使用2048轮HMAC-SHA512哈希算法来扩展助记词和salt参数,产生512位值作为其最终输出。那个512位的值就是种子。



使用助记词来生成种子的步骤如下图。

7940906315c34475ba9b1ed27f91158c.jpg



下面演示一下助记词生成种子的实例:

12个长度的助记词,无密码生成种子

6ea8e87291814ca98732038822cee54b.jpg


9C286891-0902-4F1D-AD31-4EB804F71DF7

12个长度的助记词,有密码生成种子

5411c336ccc84b4787305c97285ababe.jpg


51FC2016-15A7-4641-A203-43964671B881

24个长度的助记词,无密码生成种子

4c4bc9aafba84ac7bcec500f6822ec10.jpg


DE00BE18-E081-446B-9736-69198B2524E0

24个长度的助记词,有密码生成种子

93bca0aa437e4b10921b86875f8b556e.jpg


442FFE9B-0929-4C4B-B0B1-7D046B5C85FC


三、种子生成子秘钥


种子通过不可逆HMAC-SHA512算法推算出512位的哈希串,前256位是主私钥Master Private Key (m),后256位是主链码Master Chain Code(c)。

给定父扩展私钥和索引i,可以计算相应的子扩展私钥。

函数CKDpriv((kpar,cpar),i)→(ki,ci)

如果i ≥ 2^31(硬化的子密钥):让I= HMAC-SHA512(Key = cpar,Data = 0x00 || ser256(kpar)|| ser32(i))。 (注意:0x00将私钥补齐到33字节长。)

如果i<2^31(普通的子密钥):让I= HMAC-SHA512(Key = cpar,Data = serP(point(kpar))|| ser32(i))。

给定父扩展公钥和索引i,可以计算相应的子扩展公钥。它只针对未硬化的子密钥定义。

如果i ≥ 2^31(硬化子密钥):返回失败

如果i<2^31(普通子密钥):让I= HMAC-SHA512(Key = cpar, Data = serP(Kpar) || ser32(i)).

扩展私钥的前缀是xprv,如:

tprv8iGPAfgu51nkCZZtua8jFgzVoCQLqHZrLCQonxTo7qdtzutL8ZFZt1yAtpcUF8sHdNyiVhece3SSRsBvtUCKpGkRvxXgV2TMdcDbKQzstta 扩展公钥的前缀是tpub,如:

tpubDExRK5j9DPUR62bgoDoKf6ecNDvGzckkuW1b5UW6Y7SHqQ96kx5A4Wb34w6bkHUStdq5w7ZHPQHkipwRdSQMbGnqTAQj1sEBaJmL9wXvBSu

每个扩展密钥有 2^31 个普通子密钥,2^31个硬化子密钥。这些子密钥都有一个索引,普通子密钥使用索引0到2^31-1,硬化的子密钥使用索引 2^31 到 2^32-1,为了简化硬化密钥索引的符号,数字iH表示i + 2^31。

以上过程再结合BIP43,BIP44,HD钱包就实现了多币种、多账户、多用途等功能。

seed.png



四、编程实践:从生成助记词到扩展子地址


代码


var bitcoin = require('bitcoinjs-lib');
var bip39 = require("bip39")
var bip32 = require("bip32")

const myNetwork = bitcoin.networks.testnet

const mnemonic = 'eternal list thank chaos trick paper sniff ridge make govern invest abandon'
// const mnemonic = bip39.generateMnemonic()
const seed = bip39.mnemonicToSeed(mnemonic, "lixu1234qwer")
const root = bip32.fromSeed(seed, myNetwork)

for(var i = 0; i < 3; i++) {
    const path = "m/44'/1'/0'/0/"+i
    console.log("路径:", path)
    const keyPair = root.derivePath(path)

    const privateKey = keyPair.toWIF()
    console.log("私钥", privateKey)

    const publicKey = keyPair.publicKey.toString("hex")
    console.log("公钥:", publicKey)

    let address = getAddress(keyPair, myNetwork)
    console.log("地址:", address, "\n")
}

function getAddress(keyPair, network) {
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network})
    return address
}




输出

    下面是在测试网络下生成的私钥、公钥、地址

A37E562F-6A7A-4471-919B-F3ED347A6A82.png


    下面是在正式网络下生成的私钥、公钥、地址

5139288B-4F69-4CDE-929E-6B2CD15088EF.png



验证


F0374899-E1A8-464B-93DA-06D7C0FF5A0B.png


23817D2B-91A9-4ADC-AAD9-FCDC9BA24B0D.png




代码解析


    需要安装库:bitcoinjs-lib、bip39、bip32。
    bitcoin.networks.testnet:指定为测试网络,若切换到正式网络,则为bitcoin.networks.bitcoin,同时需要改变路径。
    bip39.generateMnemonic():用于生成助记词。
    bip39.mnemonicToSeed(mnemonic, "lixu1234qwer"):将助记词与密码转成种子。
    bip32.fromSeed(seed, myNetwork):将种子转为相应网络下的root。
    const path = "m/44'/1'/0'/0/"+i:指定第一个账号的第i个扩展子账号路径。若切换到正式网络,路径则是"m/44'/0'/0'/0/"+i
    root.derivePath(path):获取指定路径的keyPair。
    keyPair.toWIF():获取私钥。
    keyPair.publicKey.toString("hex"):获取公钥。
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network}):获取普通比特币地址,p2pkh这是最常见的比特币交易地址类型。可见:在测试网络中的地址是以m或n开头,在正式网络中是以1开头。




作者:黎跃春,孔壹学院、ChainDesk(http://chaindesk.cn)创始人兼CEO,前北京中油瑞飞信息技术有限公司研究院hybrid架构师,通信和信息技术区块链高级授课专家,16年创办国内区块链职业教育领先品牌孔壹学院,18年5月首创基于区块链的多相脑图分割模型学习社区ChainDesk。

助记词的前世今生

攻略chaindd 发表了文章 • 2018-11-22 11:17 • 来自相关话题

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?

用过钱包的用户都知道,在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人。

对于普通用户来说,如果只是一味的向他们强调助记词重要性的结论,而不告诉背后的原因的话,是很难调动起人的底层动力的,很可能过几天就忘了助记词的重要性(小编已经看过不少在群里呼唤自己因为助记词丢失而导致破产的杯具)。

作为猎豹区块链的安全大使,今天小豹就来和大家聊聊助记词和它背后的故事。

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?


多账户需求

我们先拿现实生活的例子打一个比方,通常来说,我们存在银行的钱都会有很多账户,有的账户用来买煎饼果子的零钱账户,有的是用来对公业务的账户,有的是存大额资产的账户。这些账户只需要一个身份证就能够办理,我们用一个身份证可以在网银上登录很多账户,万一银行卡不慎丢失了,也可以通过身份证进行补办。在现实生活中,身份证是无比重要的。

而到了数字货币的世界,道理也是一样的,为了业务的方便,我们通常想要有多个账户,满足不同场景的需求。如果说每次创建账户都在公链上生成一个私钥,那就像每次办理银行卡都要记忆一长串的银行卡号一样的反人性。


降低出错概率

众所周知,在区块链世界里,只要保留了私钥,就能解锁账户,但是通常来说私钥是由64位的很长的字符串组成,如果我们想要创建100个账户,那我们就要记100个私钥,记录和保存成本是非常大的,况且,在记录海量的私钥的过程中,可能还会出现地址和私钥匹配不上的问题,或者记录时粗心大意写错字母的问题,等等,总而言之,出错的概率是很高的,由于数字货币这种“只认私钥不认人”的特点,这些小的错误很可能导致资产无法找回。 


保护隐私

由于区块链公有链的公开的特性,链上的所有转账记录任何人都可以查到,如果同一个账户关联的收入支出太多了,最终是可以摸出一些线索,把你和一些交易给匹配起来的,所以为了隐私考虑,我们的很多隐私业务通常会创建出新的账户来进行交易。

聪明的开发人员为了解决上述问题,提出了Bip39协议。Bip39协议的全称是Bitcoin protocol,最初是由比特币社区的开发者提出,后来被其他的主流区块链项目所认可,继而成为了整个行业共识和规范。

BIP39协议的核心是,由12个单词来确定自己的账户,12个单词会生成很大的种子,从2的256次方选出一个数,由于随机生成的数是很大的,所以完全不用担心生成的12个单词会重复。

12个单词生成的账户是固定的,拿到的12个单词就可以创建无数多的私钥、公钥和地址。

用公式表示他们之间的关系,可写成如下形式:

私钥=算法1(助记词)

公钥=算法2 (私钥)

公钥哈希=算法3 (公钥)

地址=算法4 (公钥哈希)

所以,地址=算法4(算法3(算法2(算法1(助记词))))


当然,算法1、2、3、4都是公开的算法。 

通过密码学的保证,生成的单词顺序和内容是不可能会重复的,通过助记词,我们可以生成任意公链的地址,需要多少的地址就能够生成有多少个地址。

大家可以通过https://iancoleman.io/bip39/生成助记词或者查看助记词对应的私钥、公钥和地址。

并且,BIP39协议几乎是支持所有公链的。






小豹拿小豹私人的Matemask的助记词做了个实验:可以看到,通过我的Matemask的助记词创建的账户地址,和网站生成的地址是一模一样的,就连顺序也是高度一致的。


技术角度理解助记词


从技术上的角度来说,BIP39 是通过12个助记词的单词序列,通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子(通常是16进制的)。

相比于BIP32协议,我们可以看出那一种备份起来更友好

//BIP32 随机数种子090ABCB3A6e1400e9345bC60c78a8BE7

//BIP39 助记词种子

candy maple cake sugar pudding cream honey rich smooth crumble sweet treat 

使用助记词作为种子其实包含2个部分:助记词生成及助记词推导出随机种子。


生成助记词

助记词生成的过程是这样的:先生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词,这个过程图示如下:






助记词推导出种子

这个过程使用密钥拉伸(Key stretching)函数,被用来增强弱密钥的安全性,PBKDF2是常用的密钥拉伸算法中的一种。

PBKDF2基本原理是通过一个为随机函数(例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。

密钥拉伸函数需要两个参数:助记词和盐。盐可以提高暴力破解的难度。 盐由常量字符串 "mnemonic" 及一个可选的密码组成,注意使用不同密码,则拉伸函数在使用同一个助记词的情况下会产生一个不同的种子,这个过程图示图下:







助记词推动了区块链的普及


有了助记词之后,任何一笔交易,我们都可以创建一个新的账户,账户里面的钱也可以进行自由转移。

在区块链世界,只需要记住12个简单的助记词,就间接记住了所有区块链上的资产,就如同现实生活中的身份证一样便捷、高效。

有了助记词之后,大大减轻了普通用户的使用成本,从体验上来说对用户是非常友好的,这拉进了区块链与普罗大众的距离,同时也满足了高端用户的隐私问题。可以这么说,BIP39协议大大的推动了区块链的普及。

可能有人会说,“我最讨厌英语啊,让我记12个英语单词,简直就是要了我的命啊!”

对于这部分用户我先不做评价,但是聪明的开发者早就想到了这一点,BIP39协议目前是支持了几大主流语言的,英语、日语、西班牙语、韩语、法语,当然也少不了中文,所以大家完全可以用12个汉字作为助记词。

如果连12个汉字都懒得记的话,那我只能说,施主,区块链世界实在与你无缘,找个好人就嫁了吧。

当然,任何事物都有两面性,助记词虽然带来了许多便利,但是,也诞生了另外的安全隐患,那就是一旦12个单词泄露,或者被黑客获取,助记词是未经加密的私钥,任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产控制权。 
在这里给大家几个建议:

(1)助记词就是你数字世界的命根,打死都不能告诉别人。

(2)一定要多次验证备份的助记词是否正确,一旦抄错一两个字母,对后续找回正确的助记词将带来巨大的困难。

(3)助记词最好是用人脑进行记忆,实在怕忘记,用物理方式进行备份,备份好了之后,务必妥善保管(千万不要用任何可联网设备存储)。
 

(作者:猎豹区块链安全;本文仅代表作者观点,不代表链得得官方立场) 查看全部
electrum.jpg

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?

用过钱包的用户都知道,在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人。

对于普通用户来说,如果只是一味的向他们强调助记词重要性的结论,而不告诉背后的原因的话,是很难调动起人的底层动力的,很可能过几天就忘了助记词的重要性(小编已经看过不少在群里呼唤自己因为助记词丢失而导致破产的杯具)。

作为猎豹区块链的安全大使,今天小豹就来和大家聊聊助记词和它背后的故事。

助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助记词≥私钥,那么,助记词到底是从何而来,助记词到底有什么用呢?


多账户需求

我们先拿现实生活的例子打一个比方,通常来说,我们存在银行的钱都会有很多账户,有的账户用来买煎饼果子的零钱账户,有的是用来对公业务的账户,有的是存大额资产的账户。这些账户只需要一个身份证就能够办理,我们用一个身份证可以在网银上登录很多账户,万一银行卡不慎丢失了,也可以通过身份证进行补办。在现实生活中,身份证是无比重要的。

而到了数字货币的世界,道理也是一样的,为了业务的方便,我们通常想要有多个账户,满足不同场景的需求。如果说每次创建账户都在公链上生成一个私钥,那就像每次办理银行卡都要记忆一长串的银行卡号一样的反人性。


降低出错概率

众所周知,在区块链世界里,只要保留了私钥,就能解锁账户,但是通常来说私钥是由64位的很长的字符串组成,如果我们想要创建100个账户,那我们就要记100个私钥,记录和保存成本是非常大的,况且,在记录海量的私钥的过程中,可能还会出现地址和私钥匹配不上的问题,或者记录时粗心大意写错字母的问题,等等,总而言之,出错的概率是很高的,由于数字货币这种“只认私钥不认人”的特点,这些小的错误很可能导致资产无法找回。 


保护隐私

由于区块链公有链的公开的特性,链上的所有转账记录任何人都可以查到,如果同一个账户关联的收入支出太多了,最终是可以摸出一些线索,把你和一些交易给匹配起来的,所以为了隐私考虑,我们的很多隐私业务通常会创建出新的账户来进行交易。

聪明的开发人员为了解决上述问题,提出了Bip39协议。Bip39协议的全称是Bitcoin protocol,最初是由比特币社区的开发者提出,后来被其他的主流区块链项目所认可,继而成为了整个行业共识和规范。

BIP39协议的核心是,由12个单词来确定自己的账户,12个单词会生成很大的种子,从2的256次方选出一个数,由于随机生成的数是很大的,所以完全不用担心生成的12个单词会重复。

12个单词生成的账户是固定的,拿到的12个单词就可以创建无数多的私钥、公钥和地址。

用公式表示他们之间的关系,可写成如下形式:


私钥=算法1(助记词)

公钥=算法2 (私钥)

公钥哈希=算法3 (公钥)

地址=算法4 (公钥哈希)

所以,地址=算法4(算法3(算法2(算法1(助记词))))



当然,算法1、2、3、4都是公开的算法。 

通过密码学的保证,生成的单词顺序和内容是不可能会重复的,通过助记词,我们可以生成任意公链的地址,需要多少的地址就能够生成有多少个地址。

大家可以通过https://iancoleman.io/bip39/生成助记词或者查看助记词对应的私钥、公钥和地址。

并且,BIP39协议几乎是支持所有公链的。

zhujici1.jpeg


小豹拿小豹私人的Matemask的助记词做了个实验:可以看到,通过我的Matemask的助记词创建的账户地址,和网站生成的地址是一模一样的,就连顺序也是高度一致的。


技术角度理解助记词


从技术上的角度来说,BIP39 是通过12个助记词的单词序列,通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子(通常是16进制的)。

相比于BIP32协议,我们可以看出那一种备份起来更友好

//BIP32 随机数种子090ABCB3A6e1400e9345bC60c78a8BE7

//BIP39 助记词种子

candy maple cake sugar pudding cream honey rich smooth crumble sweet treat 

使用助记词作为种子其实包含2个部分:助记词生成及助记词推导出随机种子。


生成助记词

助记词生成的过程是这样的:先生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词,这个过程图示如下:

zhujici2.jpg


助记词推导出种子

这个过程使用密钥拉伸(Key stretching)函数,被用来增强弱密钥的安全性,PBKDF2是常用的密钥拉伸算法中的一种。

PBKDF2基本原理是通过一个为随机函数(例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。

密钥拉伸函数需要两个参数:助记词和盐。盐可以提高暴力破解的难度。 盐由常量字符串 "mnemonic" 及一个可选的密码组成,注意使用不同密码,则拉伸函数在使用同一个助记词的情况下会产生一个不同的种子,这个过程图示图下:

zhujici3.jpg



助记词推动了区块链的普及


有了助记词之后,任何一笔交易,我们都可以创建一个新的账户,账户里面的钱也可以进行自由转移。

在区块链世界,只需要记住12个简单的助记词,就间接记住了所有区块链上的资产,就如同现实生活中的身份证一样便捷、高效。

有了助记词之后,大大减轻了普通用户的使用成本,从体验上来说对用户是非常友好的,这拉进了区块链与普罗大众的距离,同时也满足了高端用户的隐私问题。可以这么说,BIP39协议大大的推动了区块链的普及。

可能有人会说,“我最讨厌英语啊,让我记12个英语单词,简直就是要了我的命啊!”

对于这部分用户我先不做评价,但是聪明的开发者早就想到了这一点,BIP39协议目前是支持了几大主流语言的,英语、日语、西班牙语、韩语、法语,当然也少不了中文,所以大家完全可以用12个汉字作为助记词。

如果连12个汉字都懒得记的话,那我只能说,施主,区块链世界实在与你无缘,找个好人就嫁了吧。

当然,任何事物都有两面性,助记词虽然带来了许多便利,但是,也诞生了另外的安全隐患,那就是一旦12个单词泄露,或者被黑客获取,助记词是未经加密的私钥,任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产控制权。 
在这里给大家几个建议:

(1)助记词就是你数字世界的命根,打死都不能告诉别人。

(2)一定要多次验证备份的助记词是否正确,一旦抄错一两个字母,对后续找回正确的助记词将带来巨大的困难。

(3)助记词最好是用人脑进行记忆,实在怕忘记,用物理方式进行备份,备份好了之后,务必妥善保管(千万不要用任何可联网设备存储)。
 

(作者:猎豹区块链安全;本文仅代表作者观点,不代表链得得官方立场)

美国银行获得加密秘钥设备专利,旨在降低私钥被盗风险

资讯8btc 发表了文章 • 2018-10-31 22:41 • 来自相关话题

据外媒今日报道,美国银行(Bank of America)周二获得了一项存储加密密钥的设备的专利,该专利文件的细节暗示了加密货币的应用。

美国专利商标局(U.S. patent and Trademark Office)周二授予美国银行一项专利。在这项专利中,该行概述了一种用于存储私人密钥(比如区块链平台上使用的密钥)的“强化存储设备”,并解释说,目前,大多数密钥只能存储在本地,只有密码作为保护。

专利声明说,

“在系统的特定实施例中,身份验证例程被作为加密货币交易、区块链交易或类似交易的一部分进行。”


该专利多次引用了“加密货币”,但总体而言,该文件还保留了其他类型的密钥,以应用于所提出的设备。

根据美国银行的说法,由于存储这些密钥的计算机通常连接到互联网或其他公共网络,本地存储意味着它们“一直容易被滥用。”

“因此,我们需要一种安全的方式来存储私人密码学密钥,”专利继续声明,指出这种存储方法应该“降低”用户私钥被盗的风险。

美国银行建议将其技术专利应用于加密货币和区块链领域,这并不令人惊讶,因为该公司在这一领域的专利申请非常多。

正如《财富》(Fortune) 6月份报道的那样,美国银行已经为数十项可能的应用申请了专利权,以便为未来的用途“做好准备”。

美国银行CTO Catherine Bessant在纽约的一场活动中表示:

"虽然我们还没有找到大规模的机会,但我们希望做好准备。"



原文:New Bank of America's Patent Hints at Plan to Store Cryptocurrency Keys
作者:Nikhilesh De
译者:夕雨 查看全部
201810310607441615.jpg

据外媒今日报道,美国银行(Bank of America)周二获得了一项存储加密密钥的设备的专利,该专利文件的细节暗示了加密货币的应用。

美国专利商标局(U.S. patent and Trademark Office)周二授予美国银行一项专利。在这项专利中,该行概述了一种用于存储私人密钥(比如区块链平台上使用的密钥)的“强化存储设备”,并解释说,目前,大多数密钥只能存储在本地,只有密码作为保护。

专利声明说,


“在系统的特定实施例中,身份验证例程被作为加密货币交易、区块链交易或类似交易的一部分进行。”



该专利多次引用了“加密货币”,但总体而言,该文件还保留了其他类型的密钥,以应用于所提出的设备。

根据美国银行的说法,由于存储这些密钥的计算机通常连接到互联网或其他公共网络,本地存储意味着它们“一直容易被滥用。”

“因此,我们需要一种安全的方式来存储私人密码学密钥,”专利继续声明,指出这种存储方法应该“降低”用户私钥被盗的风险。

美国银行建议将其技术专利应用于加密货币和区块链领域,这并不令人惊讶,因为该公司在这一领域的专利申请非常多。

正如《财富》(Fortune) 6月份报道的那样,美国银行已经为数十项可能的应用申请了专利权,以便为未来的用途“做好准备”。

美国银行CTO Catherine Bessant在纽约的一场活动中表示:


"虽然我们还没有找到大规模的机会,但我们希望做好准备。"




原文:New Bank of America's Patent Hints at Plan to Store Cryptocurrency Keys
作者:Nikhilesh De
译者:夕雨