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

尤里是一名安全工程师,也是密码格式Formosa和SRVB的创造者, an asymmetric cryptosystem. 协议和密码学的设计和验证专家, his background spans statistics, physics, and mathematics. 尤里拥有巴西圣卡塔琳娜联邦大学计算机科学硕士学位.

Read More
Share

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

Enter Formosa这是一个功能强大的开源项目,可以生成更容易记忆的恢复密钥. Formosa is compatible with BIP39, improves security, 并提供一系列主题供用户选择. 用户可以从一个主题移动到另一个主题,而不会对现有的键造成任何风险.

让你更熟悉台湾, 我们将通过具体的恢复短语示例介绍加密钱包管理的基础知识. We will then dive deeper into a Python 教程,展示了如何利用Formosa在 security projects.

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

Crypto Wallet Management

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

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

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

每个公私密钥对生成一个用于钱包间交易的单个地址. 地址是货币的“所有者”, 并用于匿名表示货币数量上的所有权 blockchain. For the sake of security 匿名,永远不要重用加密钱包中的地址是一个很好的做法.

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

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

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

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

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

Restated mathematically: 12 words * 11 bits per word = 132 总共128位元,其中128位元产生种子. 132-128 = 4 remaining checksum bits. 如果出现转录错误, 配备BIP39输入接口,使用128位种子的钱包具有: 1/2⁴ or 6.25% 未能检测到错误的可能性.

相比之下,为了生成256位的种子,BIP39提取24个字,产生8个这样的校验和位. Restated mathematically: 24 words * 11 bits per word = 264 总共256个比特产生种子. 264-256 = 8 remaining checksum bits. 如果出现转录错误, 配备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一样,福尔摩沙钱包可以用于所有人 types of cryptocurrencies, such as Bitcoin. 就加密强度而言, 在存在或不存在校验和位的情况下,Formosa提供与BIP39相同的校验和位比和密码强度密度.

但是Formosa胜过BIP39,因为它将秘密的随机信息编码成句子 easier for us to remember 而不是标准的和完全不同的BIP39单词列表.

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

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

详细的恢复短语生成示例

下面的分步示例演示了如何生成BIP39恢复短语及其相应的Formosa恢复短语, given a specific seed. As a reminder, 您应该避免在加密钱包或其他应用程序中使用我们的任何示例密钥或种子,因为它们是发布的, therefore, are not private.

让我们选择一个16字节的十六进制种子(i.e., a seed consisting of 16*8 = 128 bits), 0 xe41feeeee282bc5411ce97df78b3660e, as our starting point. 这相当于这个二进制128位表示,加上它的四个校验和位: 11100100000111111110111011101110111000101000001010111100010101000001000111001110100101111101111101111000101100110110011000001110 0100.

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

BIP39

Formosa (Medieval Fantasy Theme)

3 x 11-bit Chunks:
Random Word

5-bit Chunk:
Verb

6-bit Chunk:
Subject

6-bit Chunk:
Object

5-bit Chunk:
Adjective

6-bit Chunk:
Wild Card

5-bit Chunk:
Place

11100100000: tomato
11111111011: youth
10111011101: roof
11100: unveil100000: king111111: wine11011: sweet101110: queen 11101: throne_room
11000101000: shallow
00101011110: cloth
00101010000: claw
11000: swing101000: ogre001010: club11110: wooden001010: cyclops10000: mountain
01000111001: elbow 11010010111: spray
11011111011: term
01000: create 111001: summoner110100: spellbook10111: secret110111: spirit11011: temple
11000101100: sheriff 11011001100: sunset 00011100100: broken 11000: swing101100: pirate110110: tankard01100: fizzy000111: buccaneer00100: brewery

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

BIP39 Final Output

Formosa Final Output

tomato youth roof

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

shallow cloth claw

食人魔挥杆独眼巨人山

elbow spray term

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

sheriff sunset broken

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

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

导致Formosa恢复键的依赖项.

  1. The first bit chunk specifies a verb:它被解释为一个数字,对应于Formosa主题JSON文件中列表中的一个条目.
  2. The second chunk specifies a subject:它被解释为一个数字,对应于前面定义的列表中的一个条目 verb.
  3. The third chunk specifies an object:它被解释为一个数字,对应于前面定义的列表中的一个条目 subject.
  4. The fourth chunk specifies an adjective:它被解释为一个数字,对应于前面定义的列表中的一个条目 object.
  5. The fifth chunk specifies a wild card:它被解释为一个数字,对应于前面定义的列表中的一个条目 subject.
  6. The sixth chunk specifies a place:它被解释为一个数字,对应于前面定义的列表中的一个条目 wild card.

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

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

Python和Formosa:加密钱包代码

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

To begin, clone the project, specifying Formosa as the project folder name. Next, run the following script in Formosa导入库并创建一个标准的BIP39助记符:

#将库导入python项目:
from formosa.src.mnemonic.mnemonic import Mnemonic

theme = "BIP39"
mnemo = Mnemonic(theme)

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

words = mnemo.generate(strength=128)
print(words)
#输出:番茄青年屋顶浅布爪肘喷任期治安官夕阳破

Given the generated word list, 我们可以计算我们的bip39格式短语的原始输入位, 格式化为十六进制字符串:

entropy = mnemo.to_entropy(words)
print(entropy.hex().upper())
#输出:E41FEEEEE282BC5411CE97DF78B3660E

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

new_words = mnemo.convert_theme(words, "medieval_fantasy", "BIP39")
我们实例化一个新的Mnemonic对象,主题为“medieval_fantasy”, and then use it to format output.
打印(助记符(“medieval_fantasy”).format_mnemonic(new_words))

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

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

original_words = mnemo.convert_theme(new_words, "BIP39", "medieval_fantasy")

In other words, using Formosa, 任何拥有BIP39密码短语的人都可以生成主题语义密码短语. 我们简洁的代码块显示了使用Formosa是多么容易.

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

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


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

Understanding the basics

  • What is BIP39?

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

  • What is a seed?

    In the context of cryptography, 种子是用于创建公私密钥对的信息块, 哪一个签名和验证交易. In most applications, 种子的目的是保密和安全存储,以便从它得到的所有信息也是保密的.

  • Does Bitcoin use BIP39?

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

  • Do all wallets use BIP39?

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

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

    Yes, when used properly, any reputable, 经过审计的开源密码管理器可以信任,以保护您的加密资产.

  • 如何存储加密密码?

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

  • Python如何用于信息安全?

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

聘请Toptal这方面的专家.
Hire Now
Yuri da Silva Villas Boas

Yuri da Silva Villas Boas

Verified Expert in Engineering

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

Member since October 29, 2016

About the author

尤里是一名安全工程师,也是密码格式Formosa和SRVB的创造者, an asymmetric cryptosystem. 协议和密码学的设计和验证专家, his background spans statistics, physics, and mathematics. 尤里拥有巴西圣卡塔琳娜联邦大学计算机科学硕士学位.

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

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

订阅意味着同意我们的 privacy policy

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

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.