以太坊账户和合约所有权指南


我们今天决定发布的材料大约在6个月前诞生,但仍然没有失去意义(也许我们不得不重新整理一下)。 然后,我们仍然对打算进行ICO的商人和初创公司感到惊讶,但同时却无法通过一次广播的转移进行交易。 今天,我们不再感到惊讶,但是这些角色并没有减少很多。


总的来说,对安全保存密钥的重要性的理解和做到这一点的能力是去中心化经济的基础,我们希望该经济将很快取代传统的集中式模型。 您需要清楚地了解到,一旦将密钥的管理权转让给某人(例如银行,证券交易所,州),那么分散化的魔力立即消失了,您可以安全地将区块链更改为Postgres,而不会失去很多含义。 简而言之,在本文中,我们将以太坊区块链为例,讨论安全存储私钥的基础知识。


如果这篇文章对您来说不是新内容-超级,我们非常高兴您进入我们的“俱乐部”。 顺便说一句,现在您可以在哪里发送所有加密新星了,这样它们就不会因愚蠢而意外丢失所有的以太币。


内容:


0.自己动手!

1.介绍性信息
1.1。 帐目
1.2。 皮夹
1.3。 合约
1.4。 Multisig钱包

2.所有权
2.1。 很安全
2.1.1。 笔记本电脑和操作系统
2.1.2。 以太坊节点
2.1.2.1在Linux上安装
2.1.2.2。 在macOS上安装
2.1.3。 开户
2.1.4。 我们在一个整体中收集签名
2.1.4.1标准MultiSig钱包
2.1.4.2 MixBytes MultiSig
2.2。 安全性稍差
2.3。 平常
2.3.1以太坊钱包
2.3.2 MEW


作者:
阿列克谢剧院马列夫
帕维尔·克鲁格洛夫
谢尔盖· 布格( Sergey Booger)


0.自己动手!


我应该信任谁来拥有和管理我在区块链上的价值? 最重要的是-为您自己。 在极端情况下,您可以将等值的钱委托给手提箱的人。 进一步的指导适用于您或您的信任的人。 只有具有适当信任级别的人员,才可能对将要进行控制的计算机/设备进行任何甚至短期访问。


为什么会这样呢? 当前的银行机制告诉我们,无论我们从网上银行丢失了多少PIN码和密码,我们总能到银行分行,出示护照,取款或开始恢复访问权限。 即使欺诈者从银行帐户中提取了资金,也有可能以某种可能性对操作提出异议。 在区块链的世界中,情况并非如此-如果一项操作(例如,汇款)完成,则将受到加密技术的全部保护。


接下来,将提供基本的背景信息以了解全局,并且在没有信息安全细节的情况下提供有关以太坊账户/合约安全所有权的建议。


1.介绍性信息


1.1。 帐目


可以在以太坊网络上拥有的基本实体是一个帐户(以太坊术语:外部帐户)-一对私钥和公钥。 私有密钥必须保密,公开(更确切地说是从中获得的地址)可以自由发布。


钱可以转移到“地址”(以太坊网络上的以太,以太)。 为了指示任何资金,合同,交易(交易的发送者)的所有权,使用地址(例如0x36c9cc925dd58747044f52d0a57917df64555a3d )。 但是,要代表您的帐户地址执行任何操作,您需要一个私钥(秘密)。 密钥的安全存储是任何加密钱包的主要功能。 钱包还使用在使用密钥进行交易签名时必须输入的密码对私钥进行加密,这时,加密钱包使用秘密密钥为交易创建签名。


要拥有帐户,您需要确切了解与特定地址相对应的密钥的存储位置和方式。 如果您输入交易所的个人帐户,并且交易所为您进行交易(即用秘密密钥对每个交易进行签名),那么它将知道该秘密密钥。 这个地址实际上并不属于您,而是属于交换所。 在集中式交换的情况下,通常对于在交换界面中看到的地址,您没有任何秘密密钥。 在分散交易的情况下,您在计算机上签名交易,并且秘密密钥不会转移到任何地方。 在这种情况下,您可以完全独立地控制帐户。


通常,帐户(地址及其秘密密钥)存储在称为密钥库的特殊文件中。 其中的秘密密钥使用密码进行加密,您每次需要签署发送到网络的交易时都会输入密码。 这意味着即使复制了文件,也很难在不知道密码的情况下从中取出密钥。 如果使用长而复杂的密码,几乎是不可能的,而如果使用像“ lena1984”这样的密码,攻击者会尝试,则容易得多。 无论如何,泄漏此文件是一个严重的问题。


除了控制访问帐户信息(在需要时解密密钥)的密码外,某些加密钱包还使用一长串称为种子的单词。


知道种子后,您可以重新创建相同的密钥。 种子是允许您从头生成新的密钥库文件并在其中设置所需密码的信息。 此密钥库文件将用于管理与上一个相同的地址。 因此,可以非常安全地存储种子,甚至可以以隐藏的硬拷贝形式存储种子。 不要使用来自文学的有意义的文本,例如“ moroz i solntse den chudesniy”作为种子,攻击者将能够比像“购物禁令”中那样有效地对这些文本进行排序。


因此请记住:


  • 种子-从头开始完全重新创建一个帐户;
  • 密码-当需要对发送到网络的交易进行签名时,解密存储在密钥库文件中的私钥。

大多数钱包可以帮助您生成可靠的种子。 对于网络钱包,通常是在浏览器中使用JavaScript严格完成生成的(程序在计算机上的浏览器内部运行,只有浏览器才能看到生成的种子)。 但是,您需要了解,如果您的计算机上正在运行特洛伊木马,或者您的浏览器具有恶意扩展,则您的种子可能会被盗。 通常在服务端生成种子(即它可以监视它)的情况是不可接受的。 即使该服务可以被信任,该服务本身也可以被黑客入侵。


帐户可以作为文件在计算机之间传输,但是,您需要知道不可能“完全”从磁盘/闪存驱动器中删除文件。 从磁盘删除时,计算机不会删除文件的所有字节,而只会将文件标记为已删除,特殊程序可以还原该文件。 如果帐户具有或将具有很大的价值,则不应在计算机和网络之间传播。 用于转移该帐户的所有驱动器和闪存驱动器必须被物理销毁或用于备份该帐户,并应与该帐户本身一样安全地存储。


1.2。 皮夹


与账户,合约和其他区块链实体一起运行的程序称为钱包或加密钱包。 钱包可以包含多个帐户,并支持与其同时工作。 钱包以常规程序的形式出现,作为单独的设备(硬件)或作为Web服务。 钱包程序不会以任何数据的形式“自己存储比特币”,而是仅存储用于管理地址的密钥,并且可以与区块链进行通信(在区块链中生成交易或搜索信息)。


1.3。 合约


合同包含将以数学精度执行的逻辑,其中包含大量矿工,其中大多数人对公平执行合同感兴趣。 合同状态的最终变更将通过加密认证并发送到以太坊通用区块链,任何参与者都可以在其中看到它们。 合同的所有权记录在合同本身中(使用所有者的地址,其帐户的地址),也就是说,它是合同逻辑或状态的一部分。 如果合同的逻辑要求来自多个所有者的交易,则称为多重签名(multi-signature,multisig)。 正是基于这种逻辑,实现了多重签名钱包合同。 多重签名不仅限于保护存储广播的合同;它还可以保护对任何合同的访问。


1.4。 Multisig钱包


不要将它们与上述钱包程序混淆。 多重签名钱包由多重签名合同和图形界面组成,可更方便地与合同进行交互。 合同中指定了多重签名参数:


  • 所有者(通常是帐户);
  • 完成操作的签名数。

有时,提取少量款项(在合同中设定了最低限额)仅需要一个所有者的签名。 例如,以太坊钱包钱包(基于Mist图形引擎工作,这就是为什么有时将其误称为Mist的原因)使您可以创建钱包多签名合同,并且使用起来很方便。 钱包程序可以管理多个multisig钱包。


不要混淆以太坊和比特币中的多重签名钱包的实现。 与以太坊不同,为了使用先前在比特币中创建的多重签名地址中的比特币,必须提前“收集”所有必要的签名并将其打包在一笔交易中,而在以太坊中,来自签名者的几笔交易可以独立进行。


2.所有权


下面介绍几种在安全性,价格和可用性之间取得平衡的方法。 以下是我们的建议。


2.1。 很安全


具有多个签名的多签名钱包,其帐户存储在不同的笔记本电脑上。 对于价值超过100,000美元的商品,则需要使用此方法。 强制签名-至少两个。 签名总数比要求的多一到两个(如果丢失或损害一个或两个签名)。 作为一种选择:总共有三个签名,其中两个是必需的(任何)。


2.1.1。 笔记本电脑和操作系统


从一家不知道笔记本电脑将用于什么用途的可靠公司购买。 该公司应该将软件/硬件“书签”集成到笔记本电脑中的动机几乎为零。 从不同公司购买的所有笔记本电脑。 铁应该可靠,正常击穿的可能性很小。 万一出现故障/问题,我们要么自己解决问题,要么取出所有硬盘驱动器进行维修,然后再将笔记本电脑用于进一步存储帐户。


操作系统:Linux或macOS。 硬件要求:SSD(必须是SSD!),256+ GB磁盘,16 + GB RAM,Intel Core i5处理器或更高版本。 便携式计算机和Internet之间(例如,路由器上)应该有防火墙。 笔记本电脑应该干净:不要安装操作系统和以太坊节点以外的任何程序,不要连接任何第三方闪存驱动器和磁盘。 没有遥控工具!


2.1.2。 以太坊节点


钱包使用以太坊节点与区块链进行交互。 我们需要所谓的完整以太坊节点。


2.1.2.1。 Linux安装


隐藏文字

我们将考虑在兼容deb的发行版(Debian,Ubuntu,CentOS)上进行安装。 我们转到https://github.com/ethereum/mist/releases并下载最新版本,在撰写本文时为0.9.3:



下载后,最好检查软件包的完整性以防止文件欺骗。 为此,该页面包含所有文件的SHA256哈希,例如,对于Ethereum-Wallet-linux64-0-9-3.deb,它是946b4b7dec1b6f2b58b6ef21d06a12dcee691fa2186baad7d99872f94240ced8


在Linux上,可以使用标准控制台实用程序sha256sum计算哈希值。 在终端窗口中,输入以下命令:


$ sha256sum ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb 

其中:


  • $ -终端提示符,表示该命令将代表用户执行(无需输入);
  • ~当前用户目录的路径;
  • ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb文件的完整路径。

作为回应,我们应该看到上面显示的哈希(对于您的文件,它可能有所不同)。 要安装软件包,请使用以下命令:


 $ sudo dpkg -i ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb 

其中:


  • sudo一个命令,允许您以超级用户(管理员)的身份执行操作;
  • dpkg用于安装deb软件包的标准实用程序;
  • -i软件包安装标志(安装)。

运行命令后,必须输入用户密码。


另一种安装方法:在图形文件管理器中双击文件,然后按照说明进行操作。


2.1.2.2。 在macOS上安装


隐藏文字

要安装,请使用同一页面https://github.com/ethereum/mist/releases ,只有我们需要带有* .dmg扩展名的文件,在撰写本文时,它是Ethereum-Wallet-macosx-0-9-3.dmg 。 下载后,通过终端检查文件的哈希值。 要在macOS上运行终端,您需要:


  1. 启动查找器。
  2. 在Finder菜单中选择“转换”项,然后选择“实用程序”。
  3. 找到“终端”图标并启动。

在终端中,输入命令:


 $ shasum -a 256 ~/Downloads/Ethereum-Wallet-macosx-0-9-2.dmg 

接下来,双击dmg文件并安装钱包。


2.1.2.3。 节点同步


在对区块链采取任何行动之前,以太坊节点应完全同步(等待直到所有同步指示符如下所示并消失)。



随着时间的流逝,区块链将“膨胀”。 要对其进行压缩(或者,如果自上次同步以来已经过了很多时间),则可以完全删除区块链(仅删除区块链!不是帐户),然后将执行快速同步。 区块链数据位于chaindata目录中,该目录位于:


  • 〜/ .ethereum / geth /在Linux上;
  • 在macOS上的〜/ Library /以太坊/ geth /中。

因此,要删除区块链数据,您只需删除chaindata目录。 最好关闭钱包,将chaindata重命名为chaindata.old,启动钱包(同步应从头开始,默认情况下不会出现主界面-因此,请单击Launch Application),确保帐户到位(如果没有,请重命名)然后,我们在重命名的目录中查找它们),然后您可以删除chaindata.old。


2.1.3。 开户


在以太坊钱包的首次启动时,请按照以下说明进行操作:



在此步骤中,为您的未来钱包提供一个复杂的密码。 之后,将创建帐户。


为了防止硬盘驱动器发生故障,请在USB闪存驱动器上备份您的帐户,并将其存储在笔记本电脑中。 即使帐户所在的空闲硬盘驱动器也应进行物理销毁。


要备份您的帐户,您需要复制位于以下位置的密钥文件:


  • 在Linux上: 〜/ .ethereum / keystore
  • 在macOS上: 〜/库/以太坊/密钥库

可以通过顶部菜单File-> Backup- > Accounts在以太坊钱包中打开相同的目录。


2.1.4。 我们在一个整体中收集签名


这里有两个子选项。 如果您拥有的资产是以太币或ERC-20令牌,并且已将其转移到您的地址(也就是说,您无需采取其他任何操作即可接收),则标准的MultiSig钱包适用。 为了保护具有多重签名的任何合同,我们根据标准之一开发了我们的解决方案。 选择哪个选项取决于需要保护的内容。


2.1.4.1。 标准MultiSig钱包


要创建多重签名,您需要做两件事:


  • 将其他已创建帐户的公共地址复制到当前笔记本电脑;
  • 主钱包上有以太币(约等于或大于0.2)以发送交易。

一旦满足条件,就可以开始创建。 在“电子钱包合同”部分中,点击添加电子钱包合同 。 输入合同名称,然后选择“多重签名钱包合同”选项。 您将看到以下消息:


这是X所有者控制的联名帐户。 您每天最多可以发送X个以太币。 超过每日限额的任何交易都需要X所有者的确认。


在此阶段,您需要选择合同钱包将拥有多少所有者,以及需要多少签名来完成超出每日限额的交易。 接下来,粘贴所有所有者帐户(我们之前在其他笔记本电脑上创建的所有者帐户)的地址,然后按CREATE



要将现有的多签名钱包添加到另一台计算机(例如,如果需要更换笔记本电脑或重新安装钱包),则需要导入现有的钱包。 在以太坊钱包主窗口中执行操作:


  1. 在“钱包”选项卡上,向下滚动到“钱包合同”部分,然后单击“ 添加钱包合同”按钮。
  2. 输入一个方便的钱包名称。
  3. 选择导入钱包
  4. 输入钱包地址。
  5. 如果您现有的帐户之一是钱包的所有者,则会出现一条绿色消息,确认这一点。
  6. 按下创建按钮。


要照常从多签名钱包转移资金,您需要转到“发送”标签,选择要从其转移的多签名钱包的地址,输入金额和密码以创建交易。 但是,输入密码后,您将看到与正常交易的区别:



在这里,您需要使用“批准”按钮批准交易。


相同的消息将显示在另一个所有者的计算机上:



并且只有在拥有最小数量的所有者批准交易之后,资金才会被转移。


2.1.4.2。 MixBytes MultiSig


要将交易发送到受MixBytes MultiSig保护的任何合约,您应按照与常规合约相同的步骤发送交易,但要在多台控制笔记本电脑上重复这些步骤。 具有所需的最小签名数。 同时,第一个请求仅记录签名的事实,最后一个签名执行操作。


我们描述了如何将交易发送到合同。 可以在以太坊钱包中管理合约,在标题的“合约”选项卡中,转到:



在这里您可以添加现有合同-单击WATCH CONTRACT 。 在显示的表单中,您需要输入合同的地址,其名称(选择任意名称-仅保留在您的钱包中)以及所谓的ABI(应用程序二进制接口,由大JSON文本表示):



ABI必须由合同制定者提供。 或者,您可以尝试在etherscan.io服务上的“合同来源”选项卡中合同地址处找到ABI(仅适用于已验证的合同):



如果一切成功,则合同将显示在钱包的合同页面上。 我们进入它:



在左侧,您可以看到合同的状态,在右侧,选择发送交易的功能(选择功能):单击“ 选择功能” ,选择所需的功能,将出现一个表单,您需要在其中填写调用参数:



填写必要的参数后,代表执行交易的帐户进行选择(“执行自”),然后按EXECUTE (您需要输入该帐户的密码)。 之后,交易进入网络并达成合同。 我们提醒您,要使MixBytes MultiSig正常工作,您将需要在两台或更多台笔记本电脑上执行类似的步骤(取决于所需的最少签名数)。 不需要发送超过必要的签名。


2.2。 安全性稍差


这些是硬件钱包。 它们是一种物理设备,无法从中提取(因此不会窃取)私钥。 为了确认交易,您必须单击设备上的物理按钮。 因此,如果黑客可以远程访问您的计算机,届时将连接硬件钱包,那么攻击者仍然无法实际按下按钮并向自己转移资金。



考虑Ledger Nano S的示例。首次将设备连接到计算机时,需要初始化设备,其中包括:


  • 设置一个8位PIN码。 每次将设备连接到计算机时以及退出睡眠模式时,系统都会询问该代码。
  • 记录一个24个单词的恢复短语(种子)。 这是一个瓶颈,在这里我们将详细介绍。 如果有人可以访问该词组-您可以告别资产。 因此,必须将其存放在安全的地方。 将其放在一张纸上并隐藏。 另外,我们建议将其存储在两个不同的位置-实际上,如果丢失,请进行备份。 有很多方法可以安全地以数字形式存储短语-部分存储,隐写术等。仅受您的想象力限制。

初始化视频教程

在此硬件钱包中,您可以存储不同的货币,它们的数量已经接近20,并且会不断更新。 Chrome应用程序用于访问各个钱包,从而解决了在不同操作系统上的访问问题。


2.3。 平常


这里有很多子选项。 考虑两个。


2.3.1。 以太坊钱包


第一个决定(“非常安全”,然后到达“我们将签名收集到一个整体”部分中)中描述了如何使用个人帐户-这是一本单独的干净笔记本电脑和以太坊钱包。


2.3.2。 喵


因为它很简单,可能是目前以太坊最受欢迎的钱包。 我们转到https://myetherwallet.com/网站,使用密钥选择文件,输入密码,并且已经可以进行交易。 在没有提升节点,下载区块链等的情况下,密钥本身不会进入站点;在浏览器中下载后,该应用程序可以自主运行。



但是存在替换站点的风险。 我们可以确保做到这一点:只需在计算机上下载该站点并在本地打开它,源代码就可以在Github上找到 。 下载具有最新版本的归档文件(在撰写本文时为etherwallet-v3.21.15.zip归档文件),将其解压缩,然后打开index.html 。 我们得到相同的MEW,但在本地。


您需要记住:尽管MEW不会存储您的秘密密钥,但是对计算机或浏览器进行黑客攻击后,您可以在输入密钥时立即找出它们。

Source: https://habr.com/ru/post/zh-CN416339/


All Articles