Por qué falla una contraseña de preventa «correcta»
Miles de propietarios de la preventa de Ethereum de 2014 introducen la contraseña de la que están seguros, pero el monedero permanece bloqueado. La contraseña suele ser correcta; lo que falla son los bytes. Este es el análisis de cómo ocurre esto, elaborado a partir del código original de la preventa y de la propia investigación de la Fundación Ethereum.
Esta guía sirve de referencia para recuperar el acceso a tu propio monedero de preventa. Cada punto que aparece a continuación describe cómo una contraseña introducida correctamente podría haber sido alterada por el software entre el teclado y la función de derivación de claves. Nada de esto debilita ni rompe la criptografía subyacente, que sigue siendo sólida; la recuperación solo funciona si se reproduce sin errores la contraseña que realmente utilizaste.
Cómo encripta la preventa tu contraseña
Según la implementación de referencia canónica de pyethsaletool, el proceso es breve: tu contraseña se procesa con PBKDF2-HMAC-SHA256 durante 2.000 rondas (truncadas a 16 bytes) para generar una clave; esa clave descifra el «encseed» mediante AES; el resultado se somete a un hash para obtener una clave privada y su dirección se compara con la «ethaddr» del archivo. Solo una contraseña correcta da como resultado una dirección coincidente. Este es el modo 16300 de hashcat.
Hay tres mitos que conviene aclarar, ya que las páginas de recuperación los repiten: la preventa no utiliza scrypt (ese es el almacén de claves V3 posterior, modo 15700); el recuento de iteraciones es deliberadamente bajo (2.000), lo que hace que los barridos de candidatos sean manejables; y la contraseña no se saltea con un valor aleatorio, sino que se saltea por sí misma. Este último detalle es el motivo por el que un pequeño cambio en la entrada produce un resultado completamente diferente.
La causa principal: «crear» frente a «descifrar»
La idea que subyace a casi todos los errores. El monedero se creó con JavaScript de los navegadores de 2014 (cadenas UTF-16, gestión de bytes al estilo CryptoJS) y hoy en día se descifra con software moderno (normalmente UTF-8). La derivación de la clave aplica un hash a los bytes de la contraseña, tal cual. Por lo tanto, si tu contraseña contiene algún carácter no ASCII, los bytes almacenados en 2014 pueden diferir de los que genera una herramienta moderna, y la contraseña correcta se considera errónea. Las contraseñas compuestas exclusivamente por caracteres ASCII son inmunes a este problema, ya que son idénticas en todas las codificaciones.
Errores de codificación y normalización
- La normalización Unicode (NFC frente a NFD): la causa principal. Un mismo carácter puede ser un punto de código (NFC: é = U+00E9) o una letra más un signo combinatorio (NFD: e + U+0301). macOS proporciona a las aplicaciones texto en formato NFD en muchos contextos; Linux y Windows utilizan NFC. Si se crea de una forma y se vuelve a escribir de otra, el resultado es erróneo. Probar las cuatro formas (NFC, NFD, NFKC, NFKD) resuelve una gran parte de los casos.
- Diferencias entre UTF-8, Latin-1 y UTF-16 en cuanto a los bytes. Es posible que el tratamiento que el navegador da a una diéresis haya generado bytes bajos en Latin-1 o unidades UTF-16 sin procesar, y no el formato UTF-8 que una herramienta moderna da por supuesto.
- Codificación doble / caracteres corruptos (por ejemplo, «ä» se convierte en «Ã¤») debido a una ruta de «crear y luego almacenar» decodificada incorrectamente.
- Transliteración. Un usuario escribe un carácter nacional de una forma y lo recuerda de otra: en alemán, ä ↔ ae, ß ↔ ss; en sueco , å ↔ aa; en noruego, ø ↔ o/oe; en español, ñ ↔ n, y así sucesivamente.
- Sustitución de homógrafos. Cuando se utiliza una distribución cirílica o griega, un carácter que en pantalla parece latino ( la «а» cirílica, que corresponde a la «a») corresponde en realidad a un punto de código totalmente distinto.
Peculiaridades de la entrada en macOS
- Comillas y guiones «inteligentes». macOS sustituye automáticamente las comillas rectas ‘ “ por comillas curvas ‘’“”, y los guiones – por –—. La contraseña tiene el mismo aspecto, pero los bytes son diferentes.
- «Acentos atascados» en las teclas muertas. En macOS, una tecla muerta de acento agudo, diéresis o grave, si va seguida de una letra que no sea la base, emite el diacrítico sin la letra; así, una palabra como «café » podría haberse guardado como «caf´e».
- Menú de acentos al mantener pulsado y ergonomía del bloqueo de mayúsculas. El selector de acentos y el bloqueo de mayúsculas activado (sin un LED visible en algunos Mac) generan variantes de mayúsculas y acentos que el usuario nunca ha pretendido.
Configuración del teclado y configuración regional
- Reasignación completa de la distribución del teclado: el mecanismo más evidente que se ha podido constatar en la propia investigación de la Fundación. Si el idioma de entrada del sistema operativo no era el inglés en el momento de la introducción o transferencia de datos, el sistema reasignaba las teclas, de modo que los caracteres que llegaban al campo no eran los que figuraban en las teclas.
- Errores de QWERTZ (y/z ) y otros cambios en la distribución del teclado entre el momento de la creación y el de la reentrada.
- El problema de eliminación de caracteres no ASCII en la consola de Geth. Si posteriormente se importaba a Geth un monedero de preventa, la consola omitía sin avisar los caracteres por encima del punto de código 127 en algunas configuraciones regionales; esto podía provocar que una contraseña que contuviera caracteres especiales se viera reducida o quedara vacía. (Se trata de un error específico de la ruta, no de los navegadores de 2014).
Errores de entrada, de hardware y de archivos
- El «desliz» de la fase de entropía. La preventa recopilaba entropía inicial a partir del movimiento del ratón, y el campo de la contraseña no siempre estaba desactivado durante ese paso: una pulsación accidental mientras se movía el ratón podía añadir un carácter que el usuario nunca había pretendido introducir y que no recordaría. Este problema es específico de la experiencia de usuario (UX) de la preventa.
- Espacios en blanco y saltos de línea procedentes del pegado (un espacio al principio o al final, o un \n/\r\n capturado al pegar en el campo).
- Las teclas que se atascan o rebotan provocan que se escriba un carácter doble de forma involuntaria.
- Truncamiento tras la validación / contraseña vacía: el campo se ha modificado después de haber superado la comprobación del formulario.
- Diferencias en el recifrado. Al importar el monedero a MyEtherWallet, Mist o Geth, este se recifraba con material nuevo; es posible que una copia se abra mientras que otra no, y una reimportación dañada puede quedar bloqueada de forma permanente. Guarda y comprueba todas las copias.
- Descarga incompleta / integridad del archivo. Una descarga interrumpida en una conexión lenta podría dejar el archivo cifrado incompleto; en ese caso, ninguna contraseña podrá descifrarlo jamás. Comprueba el archivo antes de dedicarle tiempo.
Qué significa esto para la recuperación
El resultado práctico es alentador: si recuerdas tu contraseña, recuperar un monedero de preventa consiste básicamente en enumerar estas transformaciones de una cadena conocida, y no en adivinar millones de contraseñas. Un orden razonable:
- Busca todas las copias del archivo JSON: te lo enviaron por correo electrónico durante la preventa; revisa tus correos antiguos, unidades de almacenamiento, copias de seguridad en la nube y ordenadores antiguos. Las copias volver a cifradas son diferentes, así que cuantas más copias haya, más posibilidades tendrás.
- Comprueba que cada archivo sea válido (JSON válido, longitud de «encseed» adecuada) antes de dedicarle tiempo.
- Comprueba si en tu gestor de contraseñas hay alguna entrada de 2014 relacionada con la venta colectiva de Ethereum, así como su historial de contraseñas, ya que el valor almacenado podría haber sido modificado posteriormente.
- Prueba tu mejor candidato con las variantes de codificación y peculiaridades de entrada mencionadas anteriormente, adaptándolas al sistema operativo y al teclado que utilizaste en ese momento.
Si el archivo en sí se ha perdido, nadie puede ayudarte; pero si aún lo tienes, las posibilidades son mucho mayores de lo que la mayoría de los propietarios creen. Este es nuestro trabajo; consulta nuestra guía de recuperación de preventas de Ethereum.
Fuentes
Este catálogo se ha elaborado a partir de fuentes primarias, más que de opiniones: la implementación de referencia canónica ethereum/pyethsaletool y el front-end de preventa (ethereum/www); la propia investigación de la Fundación Ethereum sobre el error de «contraseña incorrecta» (el hilo del problema n.º 3513 de Mist y los informes relacionados); los problemas de go-ethereum relacionados con la codificación y el manejo de entradas en la consola; la implementación del modo 16300 de hashcat; y ethereum2john de John the Ripper. Los comportamientos mencionados anteriormente están documentados allí y en los relatos de los participantes que se quedaron sin acceso.
Preguntas frecuentes
¿Por qué no funciona mi contraseña correcta para la preventa de Ethereum?
Casi siempre se debe a que los bytes han cambiado, no a que la contraseña haya cambiado. El monedero se cifró mediante JavaScript de un navegador de 2014 y hoy se descifra con software moderno; cualquier carácter no ASCII (una diéresis, un acento) puede almacenarse con bytes diferentes a los que genera una herramienta moderna. La contraseña es correcta; lo que difiere es la codificación. Las contraseñas en ASCII puro son inmunes a esto.
¿Cuál es la causa más habitual de que falle una contraseña de preventa?
Normalización Unicode: un mismo carácter visible puede corresponder a un punto de código (NFC) o a una letra más un signo combinatorio (NFD). macOS suele proporcionar a las aplicaciones texto en formato NFD, mientras que Linux y Windows utilizan NFC, por lo que una contraseña creada en un sistema y reintroducida en otro genera hash de bytes diferentes. Comprobar todas las formas de normalización resuelve muchos de estos casos.
¿La recuperación de una contraseña de preventa compromete la criptografía de Ethereum?
No. Estas técnicas reproducen cómo tu propia contraseña, tecleada de forma honesta, podría haber sido alterada por el software entre el teclado y la función de derivación de claves. La recuperación solo tiene éxito cuando una transformación reproduce exactamente la contraseña que utilizaste. Los algoritmos subyacentes AES y PBKDF2 siguen siendo sólidos y nunca se han visto comprometidos.
¿Qué se necesita para recuperar una cartera de preventa?
El archivo JSON de preventa (con el campo «encseed» y tu «ethaddr») y el recuerdo de la contraseña. Si tienes una buena candidata, la recuperación consiste principalmente en enumerar las transformaciones de codificación y las peculiaridades de entrada de esa cadena concreta, más que en adivinarla. Si se pierde el archivo en sí, la recuperación no es posible.
¿Una contraseña de preventa que no se puede descifrar?
Envíanos el archivo JSON de preventa y todo lo que recuerdes sobre la contraseña —especialmente el sistema operativo, el idioma y el teclado que utilizaste en 2014—. Te daremos una valoración sincera en un plazo de 24 horas y solo pagarás si tenemos éxito.