Cuenta de Ethereum y Guía de propiedad del contrato


El material que decidimos publicar hoy nació hace unos 6 meses y aún no ha perdido su relevancia (tal vez tuvimos que actualizarlo un poco). Entonces todavía pudimos sorprendernos al ver a empresarios y nuevas empresas con la intención de realizar ICO, pero al mismo tiempo no pudimos hacer una transacción con la transferencia de una transmisión. Hoy hemos dejado de sorprendernos, pero tales personajes no se volvieron mucho menos.


En general, la comprensión de la importancia de mantener seguras sus claves secretas y la capacidad de hacerlo es la base de una economía descentralizada, que, esperamos, pronto desplazará sustancialmente al modelo centralizado clásico. Debe comprender claramente que tan pronto como transfiera la administración de su clave secreta a alguien, por ejemplo, un banco, una bolsa de valores, un estado, entonces la magia de la descentralización desaparecerá de inmediato y podrá cambiar de forma segura la cadena de bloques a Postgres sin mucha pérdida de significado. En resumen, en este artículo hablaremos sobre los conceptos básicos del almacenamiento seguro de claves privadas utilizando la cadena de bloques Ethereum como ejemplo.


Si este artículo no es nuevo para usted, super, estamos muy contentos de que esté en nuestro "club". Y, por cierto, ahora tienes dónde enviar a todos los cripto-neófitos, para que no pierdan accidentalmente todos sus éteres por estupidez.


Contenido:


0. ¡Hazlo tú mismo!

1. Información introductoria
1.1. Cuentas
1.2. Carteras
1.3. Contratos
1.4. Carteras Multisig

2. Propiedad
2.1. Bastante seguro
2.1.1 Laptop y sistema operativo
2.1.2. Nodo Ethereum
2.1.2.1 Instalación en Linux
2.1.2.2. Instalar en macOS
2.1.3. Cuenta
2.1.4. Recolectamos firmas en un solo conjunto
2.1.4.1 Monedero MultiSig estándar
2.1.4.2 MixBytes MultiSig
2.2. Ligeramente menos seguro
2.3. De costumbre
2.3.1 Cartera Ethereum
2.3.2 MEW


Autores
Alexey therealal Makeev
Pavel pkruglov Kruglov
Sergey BoogerWooger Prilutsky


0. ¡Hazlo tú mismo!


¿En quién debo confiar para poseer y administrar mis valores en blockchain? Lo mejor de todo, para ti. En un caso extremo, a una persona a quien le puede confiar una maleta con dinero de valor equivalente. Más orientación está dirigida a usted o su gente de confianza. Cualquier acceso, incluso a corto plazo, a computadoras / equipos desde los cuales se llevará a cabo el control es posible solo para personas con un nivel adecuado de confianza.


¿Por qué es esto así? La mecánica actual de los bancos nos ha enseñado que no importa cuántos códigos PIN y contraseñas de la banca por Internet perdamos, siempre podemos acudir a una sucursal bancaria, mostrar un pasaporte y retirar dinero, o comenzar a restaurar el acceso. Incluso si los estafadores retiraron dinero de una cuenta bancaria, es posible disputar la operación con cierta probabilidad. En el mundo de blockchain, esto no es así: si se completa una operación (por ejemplo, transferencia de dinero), está protegida por todo el poder de las tecnologías criptográficas.


A continuación, se proporcionará información básica básica para comprender el panorama general y, sin detalles de seguridad de la información, recomendaciones para la propiedad segura de cuentas / contratos en Ethereum.


1. Información introductoria


1.1. Cuentas


La entidad básica que puede ser propiedad de la red Ethereum es una cuenta (en términos de ethereum: cuenta externa): un par de claves privadas y públicas. La clave privada debe mantenerse en secreto, el público (más precisamente, la dirección obtenida de él) se puede publicar libremente.


El dinero se puede transferir a la "dirección" (en la red Ethereum - ether, ether). Para indicar la propiedad de los fondos, contratos, transacciones (el remitente de la transacción), se utiliza la dirección (por ejemplo, 0x36c9cc925dd58747044f52d0a57917df64555a3d ). Sin embargo, para realizar cualquier acción en nombre de la dirección de su cuenta, necesita una clave privada (secreta). El almacenamiento seguro de claves secretas es la función principal de cualquier billetera criptográfica. Las billeteras también cifran la clave privada con una contraseña que debe ingresarse durante el uso de la clave para firmar transacciones, es en este momento que la billetera criptográfica usa la clave secreta para crear una firma para la transacción.


Para tener una cuenta, debe comprender exactamente dónde y cómo se almacena la clave secreta correspondiente a una dirección específica. Si ingresa la cuenta personal del intercambio y el intercambio realiza transacciones por usted (es decir, firma cada una de ellas con una clave secreta), entonces conoce la clave secreta. Y esta dirección en realidad no te pertenece a ti, sino al intercambio. En el caso de intercambios centralizados, a menudo no tiene ninguna clave secreta para las direcciones que ve en la interfaz de intercambio. En el caso de intercambios descentralizados, usted firma la transacción en su máquina y la clave secreta no se transfiere a ningún lado. En este caso, usted controla su cuenta de manera completamente independiente.


Por lo general, las cuentas (direcciones y sus claves secretas) se almacenan en un archivo especial llamado almacén de claves. Las claves secretas que contiene están encriptadas con una contraseña que ingresará cada vez que necesite firmar una transacción enviada a la red. Esto significa que incluso si se copia su archivo, será muy difícil extraer la clave secreta sin conocer la contraseña. Es casi imposible si usa una contraseña larga y compleja, y mucho más fácil si usa una contraseña como "lena1984", que los atacantes prueban. De todos modos, filtrar este archivo es un problema grave.


Además de la contraseña que controla el acceso a la información de la cuenta (descifrando la clave secreta cuando es necesaria), algunas billeteras criptográficas usan una larga cadena de palabras llamada semilla.


Conociendo la semilla, puedes recrear esa misma clave secreta. La semilla es información que le permite generar un nuevo archivo de almacén de claves desde cero y establecer una contraseña que desee. Este archivo de almacén de claves se usará para administrar las mismas direcciones que la anterior. Por lo tanto, almacene la semilla de forma muy segura, tal vez incluso en forma de una copia impresa bien oculta. No use textos significativos de la literatura, como "moroz i solntse den chudesniy" para los atacantes de semillas, los atacantes podrán clasificar estos textos con más eficiencia que un conjunto aleatorio de palabras como "truco de prohibición de compras chrome bunny york".


Entonces recuerda:


  • semilla - para recrear completamente una cuenta desde cero;
  • contraseña: para descifrar la clave privada almacenada en el archivo de almacén de claves cuando se requiere firmar la transacción enviada a la red.

La mayoría de las billeteras lo ayudan a generar una semilla confiable. En el caso de las billeteras web, generalmente la generación se realiza estrictamente en su navegador usando JavaScript (el programa se ejecuta en su computadora, dentro de su navegador, y solo su navegador ve la semilla generada). Pero debe comprender que si un troyano se está ejecutando en su computadora, o si su navegador tiene una extensión maliciosa, su semilla puede ser robada. La situación cuando la semilla se genera en el lado del servicio (es decir, puede espiarla) generalmente es inaceptable. Incluso si se puede confiar en el servicio, el servicio en sí puede ser pirateado.


Las cuentas se pueden transferir entre computadoras como archivos, sin embargo, debe saber que es imposible eliminar "completamente" un archivo de un disco / unidad flash. Cuando se elimina de un disco, la computadora no elimina todos los bytes del archivo, sino que solo marca el archivo como eliminado, los programas especiales pueden restaurar dicho archivo. Si una cuenta tiene o será de gran valor, no debe viajar a través de computadoras y redes. Todas las unidades y unidades flash que se usaron para transferirlo deben destruirse físicamente o usarse para hacer una copia de seguridad de la cuenta y almacenarse de manera tan segura como la cuenta misma.


1.2. Carteras


Un programa que opera con cuentas, contratos y otras entidades de blockchain se llama billetera o billetera criptográfica. Una billetera puede contener varias cuentas y respaldar el trabajo simultáneo con ellas. Las billeteras vienen en forma de programas convencionales, como un dispositivo separado (hardware) o como un servicio web. El programa de billetera no "almacena bitcoins en sí mismo" en forma de ningún dato, sino que almacena solo claves para administrar direcciones y puede comunicarse con la cadena de bloques (generar transacciones o buscar información en la cadena de bloques).


1.3. Contratos


Los contratos contienen lógica que se ejecutará con precisión matemática, con un gran número de mineros, la mayoría de los cuales están interesados ​​en la ejecución justa del contrato. Los cambios resultantes en el estado del contrato se certificarán criptográficamente y se enviarán a la cadena de bloques general de Ethereum, donde cualquier participante puede verlos. La propiedad del contrato se registra en el mismo contrato (utilizando las direcciones de los propietarios, las direcciones de sus cuentas), es decir, es parte de la lógica o el estado del contrato. Si la lógica del contrato requiere transacciones de varios propietarios, se llama firma múltiple (firma múltiple, firma múltiple). Es sobre la base de esta lógica que se implementan los contratos de billetera multigrado. La firma múltiple no se limita a proteger los contratos que almacenan transmisiones; puede proteger el acceso a cualquier contrato.


1.4. Carteras Multisig


No los confunda con los programas de billetera descritos anteriormente. Una billetera multigrado consta de un contrato de firma múltiple y una interfaz gráfica para una interacción más conveniente con el contrato. Los parámetros de firma múltiple se especifican en el contrato:


  • propietarios (generalmente son cuentas);
  • El número de firmas para completar la acción.

A veces, la retirada de pequeñas cantidades (el umbral se establece en el contrato) requiere la firma de un solo propietario. Por ejemplo, la billetera Ethereum Wallet (funciona sobre la base del motor gráfico Mist, por lo que a veces se la llama erróneamente Mist) le permite crear un contrato multigrado de billetera y es conveniente trabajar con él. El programa de billetera puede administrar múltiples billeteras multisig.


No confunda la implementación de billeteras multigrado en Ethereum y en Bitcoin. A diferencia de Ethereum, para usar bitcoins de una dirección multigrado previamente creada en Bitcoin, todas las firmas necesarias deben "recopilarse" por adelantado y empaquetarse en una transacción, mientras que en Ethereum pueden realizarse de forma independiente varias transacciones de los firmantes.


2. Propiedad


A continuación se describen varios métodos con diferentes equilibrios de seguridad, precio y usabilidad. Todo lo siguiente es nuestra recomendación.


2.1. Bastante seguro


Una billetera multigrado con varias firmas, cuyas cuentas se almacenan en diferentes computadoras portátiles. Para valores de más de $ 100,000, se necesita este método. Firmas obligatorias: al menos dos. El número total de firmas es una o dos más de lo requerido (en caso de pérdida / compromiso de una o dos firmas). Como opción: hay tres firmas en total, dos son obligatorias (cualquiera).


2.1.1 Laptop y sistema operativo


Comprado en una compañía confiable que no tiene idea de para qué se usará la computadora portátil. La compañía debe tener un motivo casi nulo para integrar "marcadores" de software / hardware en la computadora portátil. Todas las computadoras portátiles compradas a diferentes compañías. El hierro debe ser confiable y tener una mínima posibilidad de un colapso normal. En caso de avería / problema, lo solucionamos nosotros mismos o sacamos todos los discos duros y los entregamos para su reparación, después de lo cual NO utilizamos la computadora portátil para un mayor almacenamiento de cuentas.


Sistema operativo: Linux o macOS. Requisitos de hardware: SSD (¡necesariamente SSD!), Disco de más de 256 GB, 16+ GB de RAM, procesador Intel Core i5 o mejor. Debe haber un firewall entre la computadora portátil e Internet, por ejemplo, en un enrutador. La computadora portátil debe estar limpia: no instale ningún programa que no sea el sistema operativo y los nodos Ethereum, no conecte unidades flash y discos de terceros. ¡Sin herramientas de control remoto!


2.1.2. Nodo Ethereum


Las billeteras usan el nodo Ethereum para interactuar con la cadena de bloques. Necesitamos el llamado nodo Ethereum completo.


2.1.2.1. Instalación de Linux


Texto oculto

Consideraremos la instalación en distribuciones compatibles con deb (Debian, Ubuntu, CentOS). Vamos a https://github.com/ethereum/mist/releases y descargamos la última versión, al momento de escribir este artículo era 0.9.3:



Después de la descarga, es bueno verificar la integridad del paquete para evitar la suplantación de archivos. Para esto, la página contiene hash SHA256 de todos los archivos, por ejemplo, para Ethereum-Wallet-linux64-0-9-3.deb es 946b4b7dec1b6f2b58b6ef21d06a12dcee691fa2186baad7d99872f94240ced8 .


En Linux, el hash se puede calcular utilizando la utilidad de consola estándar sha256sum . En la ventana de terminal, ingrese el siguiente comando:


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

Donde:


  • $ - terminal prompt, lo que significa que el comando se ejecutará en nombre del usuario (no es necesario ingresar);
  • ~ - ruta al directorio de usuario actual;
  • ~/Downloads/Ethereum-Wallet-linux64-0-9-2.deb : ruta completa al archivo.

En respuesta, deberíamos ver el hash que se muestra arriba (para su archivo puede ser diferente). Para instalar el paquete, use el comando:


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

Donde:


  • sudo : un comando que le permite realizar una acción como root (administrador);
  • dpkg : una utilidad estándar para instalar un paquete deb;
  • -i : indicador de instalación del paquete (instalar).

Después de ejecutar el comando, debe ingresar la contraseña de usuario.


Otro método de instalación: haga doble clic en el archivo en el administrador de archivos gráficos y siga las instrucciones.


2.1.2.2. Instalar en macOS


Texto oculto

Para instalar, use la misma página https://github.com/ethereum/mist/releases , solo que necesitamos un archivo con la extensión * .dmg, al momento de escribir este artículo es Ethereum-Wallet-macosx-0-9-3.dmg . Después de la descarga, verifique el hash del archivo a través del terminal. Para ejecutar el terminal en macOS necesitas:


  1. Lanza Finder.
  2. Seleccione el elemento "Transición" en el menú Finder, luego - "Utilidades".
  3. Encuentra el ícono "Terminal" y ejecútalo.

En la terminal, ingrese el comando:


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

Luego, haga doble clic en el archivo dmg e instale la billetera.


2.1.2.3. Sincronización de nodos


Antes de cualquier acción en la cadena de bloques, el nodo Ethereum debe estar completamente sincronizado (espere hasta que todos los indicadores de sincronización como el siguiente hayan terminado y desaparezcan).



Con el tiempo, la cadena de bloques se "hinchará". Para comprimirlo (o si ha pasado mucho tiempo desde la última sincronización), puede eliminar por completo la cadena de bloques (¡solo blockchain! No es una cuenta), luego se realizará una sincronización rápida. Los datos de blockchain se encuentran en el directorio chaindata , que se puede encontrar:


  • en ~ / .ethereum / geth / en Linux;
  • en ~ / Library / Ethereum / geth / en macOS.

Para eliminar datos de blockchain, por lo tanto, simplemente puede eliminar el directorio chaindata . Es mejor cerrar la billetera, cambiar el nombre de chaindata a chaindata.old, iniciar la billetera (la sincronización debe comenzar desde cero y la interfaz principal no aparecerá de forma predeterminada; por lo tanto, haga clic en Iniciar aplicación), asegúrese de que las cuentas estén en su lugar (si no, cambie el nombre de algo luego, los buscamos en el directorio renombrado), después de lo cual puede eliminar chaindata.old.


2.1.3. Cuenta


En el primer inicio de Ethereum Wallet, siga las instrucciones:



En este paso, encuentre una contraseña compleja para su billetera futura. Después de eso, se creará la cuenta.


Para protegerse contra fallas del disco duro, haga una copia de seguridad de su cuenta en una unidad flash USB, almacénela con su computadora portátil. Incluso el disco duro inactivo en el que se encontraba la cuenta debe destruirse físicamente.


Para hacer una copia de seguridad de su cuenta, debe copiar el archivo de clave ubicado en:


  • en Linux: ~ / .ethereum / keystore
  • en macOS: ~ / Library / Ethereum / keystore

Los mismos directorios se pueden abrir en Ethereum Wallet a través del menú superior Archivo -> Copia de seguridad -> Cuentas .


2.1.4. Recolectamos firmas en un solo conjunto


Hay dos subopciones aquí. El MultiSig Wallet estándar es adecuado si el activo que posee es tokens ether o ERC-20, y se transfiere a su dirección (es decir, no se requieren acciones adicionales de su parte para recibir). Para proteger cualquier contrato con firma múltiple, hemos desarrollado nuestra solución basada en la estándar. Cuál de las opciones para elegir depende de lo que necesita ser protegido.


2.1.4.1. Billetera MultiSig estándar


Para crear un multisig necesita hacer dos cosas:


  • copie las direcciones públicas de otras cuentas creadas en la computadora portátil actual;
  • tener éter (aproximadamente 0.2 o más) en la billetera principal para enviar transacciones.

Una vez que se cumplen las condiciones, puede comenzar a crear. En la sección Contratos de billetera, haga clic en AGREGAR CONTRATO DE BILLETERA . Ingrese un nombre para el contrato y seleccione la opción Contrato de billetera de múltiples firmas. Verá el siguiente mensaje:


Esta es una cuenta conjunta controlada por X propietarios. Puede enviar hasta X éter por día. Cualquier transacción que supere ese límite diario requiere la confirmación de X propietarios.


En esta etapa, debe elegir cuántos propietarios tendrá la billetera del contrato y cuántas firmas se necesitan para completar la transacción que supere el límite diario. Luego, pegue las direcciones de todas las cuentas de propietarios (las que creamos anteriormente en diferentes computadoras portátiles) y presione CREAR .



Para agregar una billetera multi-firma existente a otra computadora (por ejemplo, si la computadora portátil necesita ser reemplazada o reinstalar la billetera) necesita importar una billetera existente. Las acciones se realizan en la ventana principal de Ethereum Wallet:


  1. En la pestaña WALLETS, desplácese hacia abajo hasta la sección Contratos de Wallet y haga clic en el botón AGREGAR CONTRATO DE WALLET .
  2. Ingrese un nombre de billetera conveniente.
  3. Seleccione IMPORTAR MONEDERO .
  4. Ingrese la dirección de la billetera.
  5. Si una de sus cuentas existentes es el propietario de la billetera, aparecerá un mensaje verde que lo confirma.
  6. Presione el botón CREAR .


Para transferir fondos desde una billetera multigrado, como de costumbre, debe ir a la pestaña ENVIAR, seleccionar la dirección de la billetera multigrado desde la que transferirá, ingresar el monto y la contraseña para crear una transacción. Sin embargo, después de ingresar la contraseña, verá las diferencias con una transacción normal:



Aquí debe aprobar la transacción con el botón APROBAR .


El mismo mensaje se mostrará en la computadora de otro propietario:



Y solo después de que el número mínimo requerido de propietarios apruebe la transacción, los fondos serán transferidos.


2.1.4.2. MixBytes MultiSig


Para enviar una transacción a cualquier contrato protegido por MixBytes MultiSig, debe seguir los mismos pasos para enviar una transacción que para un contrato normal, pero repítalos desde varias computadoras portátiles de control. Con tantas firmas mínimas requeridas. Al mismo tiempo, las primeras solicitudes solo registran el hecho de la firma, y ​​la última firma realiza la acción.


Describimos cómo enviar transacciones al contrato. Los contratos se pueden administrar en Ethereum Wallet, en el encabezado está la pestaña Contratos, vaya a ella:



Aquí puede agregar un contrato existente: haga clic en VER CONTRATO . En el formulario que aparece, debe ingresar la dirección del contrato, su nombre (seleccione cualquiera, solo permanece en su billetera), así como el llamado ABI (interfaz binaria de la aplicación, representada por un texto JSON grande):



ABI debe ser proporcionado por el desarrollador del contrato. O puede intentar encontrar ABI en el servicio etherscan.io en la dirección del contrato en la pestaña Origen del contrato (solo para contratos verificados):



Si todo tiene éxito, el contrato aparecerá en la página de contratos en la billetera. Entramos en eso:



A la izquierda, puede ver el estado del contrato y, a la derecha, seleccionar la función para enviar la transacción (Seleccionar función): haga clic en Seleccionar una función , seleccione la función deseada, aparecerá un formulario donde debe completar los parámetros de la llamada:



Cuando se completen los parámetros necesarios, seleccione en nombre de qué cuenta ejecutar la transacción (Ejecutar desde), presione EJECUTAR (deberá ingresar la contraseña para la cuenta). Después de eso, la transacción va a la red y llega al contrato. Le recordamos que para que MixBytes MultiSig funcione, deberá realizar un procedimiento similar en dos o más computadoras portátiles (dependiendo del número mínimo requerido de firmas). No es necesario enviar firmas que excedan las necesarias.


2.2. Ligeramente menos seguro


Estas son billeteras de hardware. Son un dispositivo físico del que es imposible extraer (y, por lo tanto, no robar) una clave privada. Y para confirmar la transacción, debe hacer clic en el botón físico del dispositivo. Por lo tanto, si un hacker obtiene acceso remoto a su computadora, a la cual se conectará una billetera de hardware en ese momento, un atacante aún no podrá presionar físicamente un botón y transferirse dinero a sí mismo.



Considere el ejemplo de Ledger Nano S. Cuando conecta el dispositivo por primera vez a la computadora, debe inicializar el dispositivo, esto incluye:


  • Establecer un PIN de 8 dígitos. Se le pedirá el código cada vez que el dispositivo se conecte a la computadora, así como cuando salga del modo de suspensión.
  • Registre una frase de recuperación (semilla) de 24 palabras. Este es un cuello de botella, y aquí nos detendremos con más detalle. Si alguien tiene acceso a la frase, puede despedirse de los activos. Por lo tanto, es imperativo cuidar su almacenamiento en un lugar seguro. Póngalo en un pedazo de papel y escóndelo. Además, recomendamos almacenarlo en dos lugares diferentes; de hecho, haga una copia de seguridad en caso de pérdida. Hay muchas maneras de almacenar de forma segura una frase en forma digital: almacenamiento en partes, esteganografía, etc. Limitado solo por su imaginación.

Video tutorial de inicialización

En esta billetera de hardware, puede almacenar diferentes monedas, su número ya se acerca a veinte y se actualiza constantemente. Las aplicaciones de Chrome se utilizan para acceder a billeteras individuales, resolviendo así el problema de acceso en diferentes sistemas operativos.


2.3. De costumbre


Hay muchas subopciones aquí. Considera dos.


2.3.1. Cartera Ethereum


La forma de trabajar con cuentas individuales se describe en la primera decisión ("Bastante seguro", antes de llegar a la sección "Recopilamos firmas en un solo todo"): se trata de una computadora portátil limpia separada y de Ethereum Wallet.


2.3.2. MEW


Probablemente la billetera más popular para Ethereum en este momento, porque es simple. Vamos al sitio https://myetherwallet.com/ , seleccionamos el archivo con la clave, ingresamos la contraseña y ya podemos realizar transacciones. Sin abrir un nodo, descargar una cadena de bloques, etc., las claves en sí mismas no van al sitio; después de descargar en el navegador, la aplicación funciona de forma autónoma.



Pero existe el riesgo de que el sitio sea reemplazado. Podemos asegurarnos de esto: simplemente descargue el sitio en su computadora y ábralo localmente, el código fuente está disponible en Github . Descargue el archivo con la última versión (al momento de escribirlo era el archivo etherwallet-v3.21.15.zip ), descomprímalo y simplemente abra index.html . Obtenemos el mismo MEW, pero localmente.


Debe recordar: a pesar de que MEW no almacena sus claves secretas, piratear su computadora o navegador le permitirá descubrir las claves secretas en el momento en que las ingrese.

Source: https://habr.com/ru/post/es416339/


All Articles