作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
尤里·达·席尔瓦,维拉斯·博阿斯的头像

尤里是一名安全工程师,也是密码格式福尔摩沙和SRVB的创造者, 非对称密码系统. 协议和密码学的设计和验证专家, 他的背景涉及统计学, 物理, 和数学. 尤里拥有巴西圣卡塔琳娜联邦大学计算机科学硕士学位.

分享

加密货币钱包管理依赖于加密恢复密钥——用户用来保护和恢复钱包的秘密单词或表达式. 的 BIP39 恢复键实现支持关键字选项,这些关键字选项比过去的随机字母数字字符串键更容易调用. 出于这个原因, BIP39被认为对加密用户体验产生了深远而积极的影响. 但是记住一个BIP39恢复键仍然不是一件容易的事.

输入 福尔摩沙这是一个功能强大的开源项目,可以生成更容易记忆的恢复密钥. 福尔摩沙兼容BIP39, 提高了安全性, 并提供一系列主题供用户选择. 用户可以从一个主题移动到另一个主题,而不会对现有的键造成任何风险.

让你更熟悉台湾, 我们将通过具体的恢复短语示例介绍加密钱包管理的基础知识. 然后我们将更深入地研究 Python 教程,展示了如何利用福尔摩沙在 安全项目.

注意: 不要在任何加密钱包中使用我们的示例福尔摩沙密钥或种子,因为它们在这里的发布会损害它们的保密性.

加密钱包管理

加密钱包管理指的是钱包的创建, 复苏, 以及接收和交换硬币的一般功能. 这些高级用例依赖于钱包实例化时创建的关联种子.

种子结构、安全性和恢复:BIP39视角

对于一个 加密钱包按预期功能运行,则需要一个唯一且私有的种子. 种子应该保密,永远不要分享. 这样的种子是创建公私密钥对的基础, 哪些用于签署和验证交易.

每个公私密钥对生成一个用于钱包间交易的单个地址. 地址是货币的“所有者”, 并用于匿名表示货币数量上的所有权 区块链. 为 为了安全 匿名,永远不要重用加密钱包中的地址是一个很好的做法.

任何加密钱包都可以从任何种子生成或恢复公私密钥对和相关地址. 与bip39兼容的钱包提供了一种机制,可以输入我们的恢复词列表,并在该平台或设备上实例化我们的相关密钥和地址.

这个加密货币钱包系统的美妙之处在于, 用户应该失去对加密钱包的访问权限吗, 他们可以简单地将给定的种子或其恢复短语输入到任何实现bip39的钱包中, 他们将在哪里重新获得他们的货币, 把钱包和种子联系起来就是每笔交易.

那么这些种子是如何从技术角度发挥作用的呢? 种子的强度随着它所包含的比特数呈指数增长——通常是128位或256位.

BIP39 从列表中提取 2048个单词. 因为 2,048 = 2¹¹, 对所有2进行一一映射,将所有可能的11位序列转换为048个BIP39字很简单:我们使用二进制表示法(因此可以任意选择2),048)为每个单词分配代表其在BIP39单词列表中的位置的位序列.

由于每个字占用11位,我们将使用12个恢复字来生成128位的种子. 精明的读者会注意到,12字序列产生132位——比达到128位安全标准所需的多4位. 这四个是校验和位, used to check for data errors; they provide a layer of protection for when these 单词 are typed either by a user from memory or through transcription.

在数学上重申: 12 单词 * 11 每字位数 = 132 总共128位元,其中128位元产生种子. 132-128 = 4 剩余校验和位. 如果出现转录错误, 配备BIP39输入接口,使用128位种子的钱包具有: 1/2⁴ or 6.25% 未能检测到错误的可能性.

相比之下,为了生成256位的种子,BIP39提取24个字,产生8个这样的校验和位. 在数学上重申: 24 单词 * 11 每字位数 = 264 总共256个比特产生种子. 264-256 = 8 剩余校验和位. 如果出现转录错误, 配备BIP39输入接口和256位种子的钱包 1/2⁸ or ≅ 0.4% 未能检测到错误的可能性.

BIP39的另一个相关特性是其英文单词列表中每个单词的前四个字符是唯一的. 这允许高效的自动完成接口, 以及将所有单词的前四个字符连接起来的BIP39密码格式. 如果种子单词只有三个字母(最小单词长度), 连字符作为它的第四个字符被附加,以使三个字母的单词不显眼. 在这种情况下,我们会得到一致的比率 11/4 = 2.75 如果排除校验和位,则每个数字的随机数位,或者 (132-4)/(4*12) = 128/48 = 8/3 = 2.67 如果包含校验和位,则为每位.

恢复句更好:台湾视角

福尔摩沙提供BIP39所做的一切,甚至更多. 像BIP39一样,福尔摩沙钱包可以用于所有人 加密货币的类型,例如 比特币. 就加密强度而言, 在存在或不存在校验和位的情况下,福尔摩沙提供与BIP39相同的校验和位比和密码强度密度.

但是福尔摩沙胜过BIP39,因为它将秘密的随机信息编码成句子 我们更容易记住 而不是标准的和完全不同的BIP39单词列表.

另一个有用的福尔摩沙特性是它的主题功能. 提供一个令人印象深刻的和不断增长的主题集合.g., 童话故事, 旅游), 福尔摩沙使我们能够找到与我们选择的主题相关的短语, 使这些短语具有凝聚力和记忆性. 在不影响安全性的情况下,可以在福尔摩沙主题之间转换短语.

我们可以在福尔摩沙和BIP39种子之间进行往返转换——所有这些都不会失去安全性. 我们可能希望从BIP39转换到福尔摩沙的一个常见原因是获得更难忘的恢复短语选项,同时保留我们现有的加密帐户地址. 从人的角度来看, 可能没有从福尔摩沙转换到BIP39的用例, 但我们确实需要我们的接口在每次输入福尔摩沙恢复短语并访问我们现有的BIP39加密帐户地址时执行此类转换.

详细的恢复短语生成示例

下面的分步示例演示了如何生成BIP39恢复短语及其相应的福尔摩沙恢复短语, 给定一个特定的种子. 提醒一下, 您应该避免在加密钱包或其他应用程序中使用我们的任何示例密钥或种子,因为它们是发布的, 因此, 不是私有的.

让我们选择一个16字节的十六进制种子(i.e.由…组成的种子 16*8 = 128 位), 0 xe41feeeee282bc5411ce97df78b3660e,作为我们的起点. 这相当于这个二进制128位表示,加上它的四个校验和位: 11100100000111111110111011101110111000101000001010111100010101000001000111001110100101111101111101111000101100110110011000001110 0100.

BIP39将这个132位的结果拆分为11位的随机单词. 福尔摩沙, 另一方面, 将二进制132位字符串拆分为四个33位字符串(如下表中的四行所示). 然后,福尔摩沙将每个33位的数组拆分为固定模式的5位或6位块,用于形成短语:

BIP39

福尔摩沙(中世纪奇幻主题)

3个11位块:
随机的词

位块:
动词

6-bit块:
主题

6-bit块:
Object

位块:
形容词

6-bit块:
外卡

位块:
的地方

11100100000:番茄
11111111011:青年
10111011101:屋顶
11100年:推出100000:王111111:酒11011:甜101110:女王 11101: throne_room
11000101000:浅
00101011110:布
00101010000:爪
11000:摇摆101000:食人魔001010:俱乐部11110:木001010:独眼巨人10000:山
01000111001:肘 11010010111:喷雾
11011111011:项
01000:创建 111001:召唤者110100:法术书10111:秘密110111:精神11011:寺庙
11000101100:警长 11011001100:日落 00011100100:破 11000:摇摆101100:海盗110110:大啤酒杯01100:碳酸000111:海盗00100:啤酒

组成福尔摩沙恢复关键短语的单词之间存在的关联提供了以故事为中心的BIP39短语替代方案, 使输出更令人难忘:

最终输出

台塑最终输出

番茄青年屋顶

国王揭开甜酒皇后的宝座室

浅布爪

食人魔挥杆独眼巨人山

肘形喷雾期限

召唤师创造秘密魔法书灵魂神庙

警长日落破碎

海盗摇摆舞起泡的大啤酒厂

考虑下面的图,它显示了导致福尔摩沙恢复键的依赖关系:

导致福尔摩沙恢复键的依赖项.

  1. 第一个位块指定a 动词:它被解释为一个数字,对应于福尔摩沙主题JSON文件中列表中的一个条目.
  2. 第二个块指定a 主题:它被解释为一个数字,对应于前面定义的列表中的一个条目 动词.
  3. 第三个块指定一个 object:它被解释为一个数字,对应于前面定义的列表中的一个条目 主题.
  4. 第四个块指定一个 形容词:它被解释为一个数字,对应于前面定义的列表中的一个条目 object.
  5. 第五个块指定a 外卡:它被解释为一个数字,对应于前面定义的列表中的一个条目 主题.
  6. 第六个块指定a 的地方:它被解释为一个数字,对应于前面定义的列表中的一个条目 外卡.

以第一个33位字符串为例, 第一个块索引动词“揭开”,,它与64个可能的主题有关. 第二个块索引主题“king”,,它与64个可能的对象和64个可能的通配符相关联. 第三块索引单词“wine”,,它与32个可能的形容词有关, 选择了“甜蜜”这个词,,它不与其他列表相关联. 第五个块索引单词“queen”,,它与32个可能的位置有关, 第六个块索引两个单词的表达式“throne_room”.”

在这种情况下,我们最终得到这个序列: 国王揭开甜酒皇后的宝座室. 为了帮助记忆助记符,使用者可以调用语法和辅助词性: “[国王]向[在]王座厅里的]王后揭开甜酒的面纱。” or “[国王]在[王后]的王座厅里揭开甜酒的面纱。” 是我们序列的一个例子短语吗. 我们的最终结果是一个令人难忘的视觉场景.

Python和福尔摩沙:加密钱包代码

我们已经介绍了加密钱包安全和使用的基础知识, 并分享了一个将一组随机比特转换成恢复短语的例子. 现在让我们用一个简单的 Python项目 其中我们将创建一个种子,然后在BIP39和福尔摩沙之间转换它.

首先, 克隆项目,指定 福尔摩沙 作为项目文件夹名称. 接下来,运行以下脚本 福尔摩沙导入库并创建一个标准的BIP39助记符:

#将库导入python项目:
从福尔摩沙.src.助记符.导入助记符

主题= "BIP39"
助记符(主题)

mnemo.生成 方法被设计为绘制随机位,如果多次运行脚本,输出将有所不同. 现在我们将生成一个BIP39单词列表,它的强度(位数)是32的倍数,介于32到256之间:

单词= mnemo.生成(强度= 128)
打印(单词)
#输出:番茄青年屋顶浅布爪肘喷任期治安官夕阳破

给定生成的单词列表, 我们可以计算我们的bip39格式短语的原始输入位, 格式化为十六进制字符串:

熵= mnemo.to_entropy(单词)
print(熵.十六进制().上())
#输出:E41FEEEEE282BC5411CE97DF78B3660E

给定单词列表和两个主题名称,也可以将一个助记主题转换为另一个助记主题. 让我们把我们的BIP39短语转换成中世纪幻想主题中的福尔摩萨短语:

New_单词= mnemo.convert_theme(单词, "medieval_fantasy", "BIP39")
我们实例化一个新的Mnemonic对象,主题为“medieval_fantasy”, 然后使用它来格式化输出.
打印(助记符(“medieval_fantasy”).format_助记符 (new_单词))

#输出:
# password = kiunswwiquthogswwoclcymosucrsespsptepiswfitabubr
# formosa_sentence =国王揭开甜酒皇后的宝座室
#食人魔秋千木棒独眼巨人山
召唤师创造秘密魔法书灵魂神庙
#海盗摇摆冒泡的大啤酒厂

使用同样的方法,我们也可以转换回原来的BIP39主题:

Original_单词= mnemo.convert_theme(new_单词, "BIP39", "medieval_fantasy")

换句话说, 使用福尔摩沙, 任何拥有BIP39密码短语的人都可以生成主题语义密码短语. 我们简洁的代码块显示了使用福尔摩沙是多么容易.

福尔摩沙:升级你的加密货币钱包

BIP39钱包在加密领域比比皆是, 并与福尔摩沙恢复短语无缝集成,以改善加密货币用户体验. 许多 cryptocurrency用户 谁已经有一个回收词表和相应的地址可以保留和提高他们目前的地址采用台塑. 福尔摩沙是在无缝改善加密货币用户人机界面方面迈出的重要一步.


Toptal工程博客的编辑团队向 Edson Cilos Vargas Júnior 查看本文中提供的代码示例和其他技术内容.

了解基本知识

  • 什么是BIP39?

    BIP39是一个被广泛认可的比特币改进提案(BIP),集成到大多数加密货币钱包中. BIP39规范了使用助记短语作为钱包恢复的一种方法. BIP39的一个主要组成部分是将随机信息编码为单词序列的格式.

  • 什么是种子??

    在密码学的背景下, 种子是用于创建公私密钥对的信息块, 哪一个签名和验证交易. 在大多数应用中, 种子的目的是保密和安全存储,以便从它得到的所有信息也是保密的.

  • 比特币使用BIP39吗?

    是的,自2013年发布以来,几乎所有的比特币钱包都使用BIP39. 然而,BIP39的使用并不是强制性的.

  • 所有的钱包都使用BIP39吗?

    没有,但绝大多数钱包使用BIP39. 就像BIP39一样, 许多其他bip不是特定于货币的,而是与不同的货币兼容——甚至是加密货币之外的货币.

  • 密码管理器对加密安全吗?

    是的, 如果使用得当, 任何有信誉的, 经过审计的开源密码管理器可以信任,以保护您的加密资产.

  • 如何存储加密密码?

    的re are many different ways to manage both the seeds and encryption keys (pass单词) of a cryptocurrency wallet: Memorizing the pass单词; storing pass单词 in a password manager; or deriving pass单词 algorithmically from other pass单词.

  • Python如何用于信息安全?

    Python有许多信息安全用途,如恶意软件检测、分析和加密. 在福尔摩沙和BIP39的背景下, Python被用来在用户的人类记忆和他们的数字加密密钥之间创建一个有效的接口.

就这一主题咨询作者或专家.
预约电话
尤里·达·席尔瓦,维拉斯·博阿斯的头像

位于 马里诺,意大利罗马大都会

成员自 2016年10月29日

作者简介

尤里是一名安全工程师,也是密码格式福尔摩沙和SRVB的创造者, 非对称密码系统. 协议和密码学的设计和验证专家, 他的背景涉及统计学, 物理, 和数学. 尤里拥有巴西圣卡塔琳娜联邦大学计算机科学硕士学位.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.