Manejo seguro de llaves privadas en proyectos blockchain con .env
Clase 12 de 24 • Curso de Dapps: Introducción al Desarrollo de Aplicaciones Descentralizadas
Resumen
¿Por qué son importantes las llaves privadas en blockchain?
La importancia de las llaves privadas en el entorno blockchain radica en su papel determinante para la seguridad y autenticación de transacciones y contratos inteligentes. En la web 3.0, tu identidad está definida por tu firma digital y se genera a través de tu llave privada. Usualmente, cuando se realiza un despliegue de contratos inteligentes o se efectúan transferencias de valor, se necesita firmar una transacción mediante un proceso criptográfico que valida la autenticidad del remitente.
- Función de las llaves privadas:
- Validan la autenticidad de las transacciones.
- Permiten firmar transacciones que después pueden enviarse a la blockchain.
El problema de compartir una clave privada es que cualquiera que la posea puede firmar transacciones en tu nombre. Este potencial riesgo de seguridad hace esencial protegerla en todo momento.
¿Cómo manejar de manera segura las llaves privadas?
Proteger las llaves privadas y otros datos sensibles dentro de un proyecto es crucial para evitar hackeos o robos. Una forma efectiva de hacerlo es mediante el uso de archivos .env
, que almacenan información sensible localmente sin ser incluidos en repositorios públicos.
Implementación con .env
Para ocultar la información sensible en tu código, puedes seguir los siguientes pasos utilizando la librería .env
:
-
Instalación de la librería
.env
:yarn add dotenv --dev
Esta herramienta te permite leer variables del entorno e insertarlas en tu código JavaScript.
-
Creación de archivo
.env
:- Crea un archivo
.env
para almacenar las llaves privadas y otros datos confidenciales, como el Infura Project ID.
DEPLOYER_SIGNER_PRIVATE_KEY=tu_llave_privada INFURA_PROJECT_ID=tu_id_de_infura
- Crea un archivo
-
Ejemplo y exclusión del archivo en Git:
- Para dar una referencia a otros desarrolladores sin compartir datos sensibles, crea un archivo
.env.example
con las claves pero sin valores reales. - Asegúrate de que el archivo
.env
está ignorado por Git agregándolo a.gitignore
.
- Para dar una referencia a otros desarrolladores sin compartir datos sensibles, crea un archivo
-
Configura la librería en tu proyecto: Dentro de tu archivo de configuración o script de despliegue, carga las variables de ambiente usando
dotenv
:require('dotenv').config(); const infuraProjectID = process.env.INFURA_PROJECT_ID; const privateKey = process.env.DEPLOYER_SIGNER_PRIVATE_KEY;
Reemplazar datos sensibles en el código
Para integrar las variables obtenidas del archivo .env
en tu código de manera segura, puedes utilizar la interpolación de strings en JavaScript para sustituir directamente los valores privados en las configuraciones de conexión.
const providerURL = `https://mainnet.infura.io/v3/${infuraProjectID}`;
const wallet = new ethers.Wallet(privateKey, providerURL);
¿Qué otras alternativas existen para manejar llaves privadas?
Aunque el uso de .env
es una estándar popular, no es la única forma de proteger la información sensible. Existen otras técnicas y herramientas que puedes explorar:
- Vaults de secretos: Servicios de seguridad que almacenan y gestionan información sensible de forma centralizada.
- Hardware Wallets: Dispositivos físicos que almacenan de forma segura las claves privadas fuera de línea, brindando una capa adicional de protección.
Proteger adecuadamente las llaves privadas y otros datos confidenciales es un paso vital en el desarrollo seguro de contratos inteligentes en blockchain. ¡Continúa explorando para encontrar las mejores prácticas y alternativas que se adapten a tus necesidades!