EUR | USD

Desarrollar seguridad en aplicaciones de cadena de bloques: Parte 2: implementación rápida con una solución llave en mano

Por Stephen Evanczuk

Colaboración de Editores de Digi-Key de América del Norte

Nota del editor: Los detalles de la tecnología de cadena de bloques y sus métodos de transacción son complejos. La parte 1 de esta serie de dos partes proporciona una visión general de la estructura de la cadena de bloques y su proceso de transacción. Esto ofrece el contexto para comprender por qué la protección de las claves privadas se encuentra en el núcleo de la seguridad de la cadena de bloques y conduce a la introducción de una solución llave en mano para asegurar las claves privadas. Esta parte 2 mostrará cómo los desarrolladores pueden proteger más fácilmente las transacciones de la cadena de bloques con esta solución llave en mano basada en hardware.

Más allá de su uso familiar en las criptomonedas, la tecnología de cadena de bloques puede ofrecer a los desarrolladores una infraestructura segura con una amplia aplicabilidad. Su arquitectura descentralizada elimina la necesidad de una autoridad central, confiando en cambio en claves privadas y métodos de criptografía para proteger los activos y su intercambio entre las partes. En consecuencia, la seguridad de un sistema de cadena de bloques depende de manera crítica de la seguridad de las claves y su uso adecuado en algoritmos robustos.

Aunque los algoritmos apropiados están fácilmente disponibles, la implementación requiere una gran competencia y experiencia para desarrollar una solución segura e integrarla en la aplicación de destino. Sin las herramientas adecuadas para construir una cadena de bloques en el núcleo de su aplicación, los desarrolladores pueden encontrar sus esfuerzos estancados o incluso estar vulnerables a delincuentes cibernéticos.

Este artículo muestra cómo los desarrolladores pueden proteger más fácilmente las transacciones de cadena de bloques al utilizar una solución llave en mano basada en hardware para la seguridad de dicha cadena por parte de Infineon Technologies.

Seguridad de clave privada

Las cadenas de bloques eliminan la necesidad de una autoridad central para la aprobación de transacciones. En cambio, esta tecnología se basa en mecanismos de consenso para mantener la integridad de una cadena de bloques continuamente extendida con un conjunto de transacciones firmadas y verificadas mediante la criptografía y un par de claves privadas o públicas. De hecho, las claves privadas sirven como credenciales de propiedad en los sistemas cadena de bloques. La pérdida o exposición por accidente o robo de estas ya ha resultado en pérdidas significativas de criptomonedas. Como resultado, la seguridad de las claves privadas es de suma importancia en la implementación de aplicaciones de cadena de bloques.

Los enfoques anteriores basados en software o seguridad de hardware limitada pueden dejar las claves privadas vulnerables a una amplia gama de ataques. En contraste, las soluciones más robustas se basan en controladores de seguridad diseñados con una protección profunda contra diversas amenazas directas e indirectas. Al usar una solución basada en este tipo de controlador de seguridad, el kit de inicio Blockchain Security 2Go de Infineon (BLOCKCHAINSTARTKITTOBO1) proporciona la protección profunda requerida para la seguridad del sistema de cadena de bloques.

En lugar de enfrentar los desafíos de implementar su propia solución, los desarrolladores pueden proporcionar a los usuarios tarjetas inteligentes sin contacto con soporte incorporado para mecanismos de seguridad de la cadena de bloques, incluida la firma de transacciones, el primer paso crítico para extender una cadena (Figura 1).

Diagrama de la tarjeta inteligente Blockchain Security 2Go de InfineonFigura 1: La tarjeta inteligente Blockchain Security 2Go de Infineon simplifica la implementación de la seguridad de la cadena de bloques con soporte incorporado para mecanismos de las mismas cadenas, incluida la firma de transacciones utilizada para extenderlas. (Fuente de la imagen: Infineon Technologies)

Plataforma segura

El kit de inicio Blockchain Security 2Go de Infineon proporciona a los integradores de sistemas de cadena de bloques una solución de seguridad llave en mano que elimina la necesidad de acuerdos de no divulgación que generalmente se requieren para adquirir dispositivos de seguridad.

Diseñado para una implementación rápida utilizando el software de código abierto de Infineon, el kit incluye cinco tarjetas inteligentes que implementan mecanismos de cadena de bloques cruciales que abarcan la generación segura de claves, creación de firmas y autenticación de PIN. El paquete de 10 tarjetas Security 2Go de Infineon relacionado (BLOCKCHAIN10CARDSTOBO1) proporciona a los desarrolladores una fuente adicional de estas tarjetas inteligentes.

Las tarjetas cumplen con el estándar ISO/IEC 7810 ID-1 utilizado para tarjetas de pago convencionales y tarjetas de identidad en algunas regiones. Para la conectividad, las tarjetas inteligentes integran una antena de Clase 1 basada en ISO/IEC 14443 para tarjetas sin contacto que utilizan comunicación de campo cercano (NFC).

Un controlador de seguridad, integrado en cada tarjeta, proporciona seguridad basada en hardware para la creación y el almacenamiento de hasta 255 pares de claves privadas o públicas, así como la ejecución del algoritmo de la criptografía. Junto con un generador integrado de números aleatorios verdaderos (TRNG), las tarjetas admiten algoritmos tanto para la criptografía simétrica usando el estándar de cifrado avanzado (AES) de 256 bits como para la criptografía asimétrica usando la criptografía de curva elíptica (ECC) de 256 bits, precargada con la curva ECC secp256k1 típicamente utilizada en criptomonedas como Bitcoin y Ethereum.

Con su soporte especializado para los mecanismos de seguridad de cadena de bloques, las tarjetas proporcionan una solución inmediata para asegurar las transacciones de cadena de bloques. En lugar de perder tiempo en crear métodos de firma seguros, los integradores de sistemas pueden simplemente entregar tarjetas inteligentes a los usuarios para que las usen cuando interactúen con el sistema de cadena de bloques implementado.

Interacciones más simples

Para los usuarios, las tarjetas inteligentes proporcionan un método sencillo para realizar transacciones de cadena de bloques mientras aseguran completamente sus claves privadas. Las tarjetas están diseñadas para funcionar con un software que se ejecuta en un dispositivo de interfaz, como un teléfono inteligente NFC o una computadora equipada con un lector de tarjetas inteligentes NFC independiente. Mientras ejecutan su aplicación de cadena de bloques, los usuarios activan las funciones de la tarjeta colocando la tarjeta en el dispositivo de interfaz (Figura 2).

Imagen del lector NFC en la parte posterior de un teléfono inteligente Google PixelFigura 2: Los usuarios utilizan la funcionalidad de la tarjeta inteligente acercándola a la antena del lector NFC, en este caso el área brillante en la parte posterior de un teléfono inteligente Google Pixel, como se muestra aquí. (Fuente de la imagen: Infineon Technologies)

Para la evaluación inmediata de las tarjetas inteligentes Security 2Go, Infineon proporciona una aplicación móvil de Android que demuestra su uso en situaciones típicas. Después de iniciarse en un teléfono inteligente compatible con NFC, la aplicación móvil invita al usuario a colocar la tarjeta en el área de la antena NFC del teléfono inteligente, lo que permite la interfaz completa de la aplicación móvil (Figura 3).

Diagrama de Coinfinity GmbH para el kit de inicio Blockchain Security 2GoFigura 3: Desarrollado por Coinfinity GmbH para el kit de inicio Blockchain Security 2Go, una aplicación de Android preconstruida muestra cómo, después de que la tarjeta solicita contacto con la tarjeta inteligente (izquierda), utiliza las funciones de esta para demostrar diferentes situaciones de uso (derecha). (Fuente de la imagen: Tecnologías Infineon)

En el trasfondo de esta aplicación móvil y de otras implementaciones, el software que se ejecuta en el teléfono inteligente u otro dispositivo de interfaz emite comandos para realizar funciones como generar un nuevo par de claves u obtener información sobre un par ya existente. A lo largo de estas y otras secuencias de comandos, la clave privada nunca abandona la tarjeta inteligente. En respuesta a los comandos que involucran claves privadas, la tarjeta inteligente, como máximo, devuelve un identificador de clave al dispositivo de interfaz. A su vez, el software del dispositivo de interfaz utiliza ese controlador para ejecutar comandos relacionados, como recuperar la clave pública emparejada con una clave privada particular (Figura 4).

Con este enfoque, el software que se ejecuta en la interfaz puede completar del todo las operaciones necesarias para interactuar con el sistema de cadena de bloques sin comprometer los datos secretos.

Diagrama de la solicitud de generación de clave a una tarjeta inteligente Blockchain Security 2Go de InfineonFigura 4: Un dispositivo de interfaz, como un teléfono inteligente o un lector de tarjetas inteligentes, emite comandos como esta solicitud de generación de clave a una tarjeta inteligente Blockchain Security 2Go de Infineon, que crea un par de claves, una pública y una privada, y devuelve la clave pública sin revelar la clave privada. (Fuente de la imagen: Infineon Technologies)

El software del dispositivo de interfaz conserva la responsabilidad de realizar funciones específicas de la aplicación, como la transformación de la clave pública en la dirección de la cadena de bloques (típicamente única) utilizada para cada transacción. Por ejemplo, una dirección de Bitcoin usa la clave pública como entrada para un algoritmo de hash unidireccional, el cual genera una dirección que depende de la clave pública pero que no puede usarse para recrearla.

Para firmar una solicitud de transacción, la interfaz también emite un comando y el resultado de hash que lo acompaña hasta la tarjeta inteligente. En respuesta, la tarjeta inteligente devuelve la firma al dispositivo de interfaz (Figura 5).

Diagrama de la firma de la tarjeta inteligente Blockchain Security 2Go de InfineonFigura 5: La firma de una transacción requiere el uso de una clave privada, pero, con la tarjeta inteligente Blockchain Security 2Go de Infineon, un dispositivo de interfaz recibe la firma sin exponer la clave privada más importante. (Fuente de la imagen: Infineon)

Unidades de datos del protocolo de aplicación

Para cada comando y respuesta, un dispositivo de interfaz y una tarjeta inteligente interactúan usando las unidades de datos de protocolo de aplicación (APDU), definidas en la parte 4 del estándar ISO/IEC 7816. Para cada interacción con la tarjeta inteligente, el dispositivo de interfaz emite solicitudes de servicio en el formato APDU del estándar ISO/IEC-7816 y recibe respuestas (opcionales) en el formato APDU de respuesta estándar (Figura 6).

Tabla de formatos estándar ISO/IEC 7816 para APDU de comando y APDU de respuestaFigura 6: Los formatos estándar ISO/IEC 7816 para APDU de comando y APDU de respuesta forman la base de las comunicaciones entre dispositivos de interfaz y tarjetas inteligentes conformes, como la tarjeta inteligente Blockchain Security 2Go de Infineon. (Fuente de la imagen: Infineon Technologies)

Dentro de una APDU de comando, el proveedor de tarjetas inteligentes define las instrucciones y los parámetros admitidos de conformidad con los estándares de la industria utilizados en el área de aplicación de destino. Para sus tarjetas inteligentes Blockchain Security 2Go, Infineon define un conjunto básico de comandos necesarios para aprovechar las capacidades funcionales de la tarjeta inteligente (Tabla 1).

Tabla de comandos establecida para la tarjeta inteligente Blockchain Security 2Go de InfineonTabla 1: Comando configurado para la tarjeta inteligente Blockchain Security 2Go de Infineon. (Fuente de la tabla: creado por Digi-Key Electronics a partir de datos de Infineon Technologies)

Por ejemplo, para comenzar una nueva sesión, el software del dispositivo de interfaz construye el APDU del comando “SELECT APPLICATION” con un valor de datos para el identificador de aplicación fija (AID) proporcionado por Infineon para el kit de inicio Blockchain Security 2Go. Después de recibir esa APDU de comando, la tarjeta inteligente se inicializa para una nueva sesión y transmite el APDU de respuesta correspondiente, que incluye algunos metadatos de la tarjeta inteligente (Figura 7).

Tabla de valores específicos de campo APDU de Infineon necesarios para los comandosFigura 7: Para su tarjeta inteligente Blockchain Security 2Go, Infineon proporciona los valores de campo APDU específicos necesarios para los comandos y esperados en las respuestas y códigos de error como este conjunto para inicializar la tarjeta inteligente, que incluye el identificador de aplicación fijo (AID) proporcionado por Infineon. (Fuente de la imagen: Infineon Technologies)

Software personalizado

Los desarrolladores no necesitan trabajar en este bajo nivel para crear nuevas aplicaciones cuando usan las tarjetas inteligentes Blockchain Security 2Go. En su repositorio GitHub Blockchain Security 2Go, Infineon proporciona aplicaciones de muestra y documentación sobre el uso de tarjetas inteligentes.

Incluye el código fuente Java completo para su aplicación móvil Android en su repositorio GitHub de código Android BlockchainSecurity2Go. Al explorar esta base de código, los programadores de software pueden aprender rápidamente los patrones de diseño de claves, incluyendo la inicialización de una sesión de tarjeta inteligente (selectApplication ()), leer una clave pública desde una tarjeta inteligente (readPublicKeyFromCard ()) y crear un nuevo par de claves (generateNewSecp256K1Keypair ()) si no existe una clave pública en la tarjeta (Listado 1).

Copy     /**      * Read public key from card, or create a new one if it doesn't exist yet.
*      * @param card nfc card      * @return public key as hexadecimal String      * @throws IOException      on communication errors      * @throws NfcCardException when card returns something other than 0x9000 or 0x61XX      */     public static GetKeyInfoResponseApdu readPublicKeyOrCreateIfNotExists(NfcTranceiver card, int keyIndex)             throws IOException, NfcCardException {         try {             selectApplication(card);             // try to read public key             return readPublicKeyFromCard(card, keyIndex);         } catch (NfcCardException e) {             // if Public key is not available yet (Status words: 0x6A88)             if (e.getSw1Sw2() == SW_KEY_WITH_IDX_NOT_AVAILABLE) {                 int newKeyIndex;                 do {                     // create a new keypair                     newKeyIndex = generateNewSecp256K1Keypair(card);                 } while (newKeyIndex <= keyIndex);                 // and ask for the pubkey of the newly created keypair                 return readPublicKeyFromCard(card, newKeyIndex);             } else {                 // throw all other exceptions to our caller                 throw e;             }         }     } 

Listado 1: Infineon proporciona el código fuente completo para su aplicación de Android de Blockchain Security 2Go, que demuestra interacciones básicas, como leer una clave pública o crear un nuevo par de claves privada/pública. (Código fuente: Infineon Technologies)

Las clases de utilidad en la base del código Java implementan interacciones detalladas, como la creación de la APDU SELECT APPLICATION. Las rutinas que llaman a la función miembro que se muestra en el Listado 2 (a continuación) pasan un parámetro de ayuda que contiene el AID de Blockchain Security 2Go de Infineon, que se declara anteriormente en el paquete de la siguiente manera:

Copy         public static final byte[] AID_INFINEON_BLOCKCHAIN2GO = fromHexString("D2760000041502000100000001");   public class SelectApplicationApdu extends BaseCommandApdu {       /**      * Instruction byte for SELECT APPLICATION operation.
*/     private static final int INS_SELECT_APPLICATION = 0xA4;       /**      * Constructs a SELECT APPLICATION command apdu.
*/     public SelectApplicationApdu(byte[] aid) {         this.ins = INS_SELECT_APPLICATION;         this.p1 = 0x04;         this.setData(aid);         this.leIncluded = true;     }   } 

Listado 2: La distribución fuente de la aplicación de Android Blockchain Security 2Go de Infineon ilustra la creación de un APDU de comando para inicializar la tarjeta inteligente. (Código fuente: Infineon Technologies)

Para un desarrollo rápido, Infineon también proporciona una biblioteca de Python de Blockchain Security 2Go y una interfaz de línea de comando construida sobre esta biblioteca. Al igual que con la versión de Java, el código de Python demuestra el patrón de diseño simple requerido para ejecutar operaciones de la tarjeta inteligente, como generar un par de claves (Listado 3).

Copy def select_app(reader):     “"" Sends command to select the Blockchain Security2GO application       Needs to be called after reset to allow for access to     blockchain commands.
Returns:         : obj: `tuple`: (pin_active, card_id, version).
pin_active:             bool: True if PIN is set on the card                 card_id:             bytes: 10 byte unique card identifier                 version:             str: card firmware version, following             semantic versioning.
Raises:         CardError: If card indicates a failure.
Any exceptions thrown by the reader wrapper are passed through.
“""     logger.debug('SELECT Blockchain Security 2Go starter kit')     aid = bytes.fromhex('D2760000041502000100000001')     r = reader.transceive(b'\x00\xA4\x04\x00', aid).check()       pin_active = True if r.resp[0] == 1 else False     card_id = r.resp[1:11]     version = r.resp[11:].decode('ASCII')     return (pin_active, card_id, version)   def generate_keypair(reader):     “"" Sends command to generate new keypair       A new keypair is generated and stored. The ID identifying this     keypair is returned. A key using the `secp256k1`_ curve is generated.
Args:         reader (:obj:): object providing reader communication       Returns:         int: ID of the just generated keypair, to be used e.g. for         future signatures using ``generate_signature``         Raises:         CardError: If card indicates a failure, e.g. if card is full..
Any exceptions thrown by the reader wrapper are passed through.
.. _secp256k1:         http://www.secg.org/sec2-v2.pdf     """     logger.debug('GENERATE KEYPAIR')     r = reader.transceive(b'\x00\x02\x00\x00').check()       key_id = int(r.resp[0])     logger.debug('generated key %d', key_id)     return key_id 

Listado 3: La biblioteca de Python de Blockchain Security 2Go de Infineon y la interfaz de línea de comandos que la acompaña ayudan a un rápido desarrollo con un conjunto completo de rutinas de servicio, como la función select_app () para inicializar una tarjeta inteligente Blockchain Security 2Go y generate_keypair (), que muestran patrones de diseño básicos para la interacción de la tarjeta inteligente. (Código fuente: Infineon Technologies)

De una manera característica de Python, la biblioteca de Python de Blockchain Security 2Go se basa en módulos de terceros fácilmente disponibles. En particular, la biblioteca de Infineon usa el popular módulo pyscard, que envuelve sus funciones en su propia definición de clase. Por ejemplo, la biblioteca de Python de Blockchain Security 2Go comienza una sesión de tarjeta inteligente al encontrar un lector de computadora personal o tarjeta inteligente (PC/SC). Para el módulo blocksec2go primario de la biblioteca de Python de Blockchain Security 2Go, este descubrimiento ocurre usando la función open_psycard(), que es una función miembro en una clase de biblioteca que envuelve las funciones de pyscard (Listado 4).

Copyclass PySCardReader:    """ Wrapper to use PyScard with blocksec2go        Abstracts communication into a simple function    """    def __init__(self, connection):        self.connection = connection        self.connection.connect()        def transceive(self, header, data = b'', le = -1):        apdu = Apdu(header, data, le)        logger.debug(apdu)        resp = self._transceive(bytes(apdu))        logger.debug(resp)        return resp     def _transceive(self, data):        resp, sw1, sw2 = self.connection.transmit(array.array('b', data).tolist())        return ApduResponse(array.array('B', resp).tobytes(), (sw1 << 8) + sw2)

Listado 4: La biblioteca de Python de Blockchain Security 2Go de Infineon envuelve las interacciones con el módulo pyscard de terceros en esta clase, utilizando sus funciones miembro para invocar las funciones de pyscard. (Código fuente: Infineon Technologies)

Conclusión

La tecnología de cadena de bloques ofrece un marco que amplía la accesibilidad a la información sin comprometer su integridad o autenticidad. En lugar de depender de una autoridad central, un sistema de cadena de bloques usa criptografía para verificar transacciones y protegerlas de modificaciones. Para este enfoque, son esenciales las claves privadas, que necesitan de mecanismos de seguridad robustos para evitar la pérdida de control de las transacciones de los usuarios y el compromiso del sistema de cadena de bloques.

Como se muestra, con su software de código abierto adjunto, el kit de inicio Blockchain Security 2Go de Infineon proporciona a los integradores de sistemas de cadena de bloques una solución de seguridad inmediata y brinda a los usuarios un método más simple y seguro para ejecutar transacciones de cadenas de bloques.

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Información sobre el autor

Stephen Evanczuk

Stephen Evanczuk tiene más de 20 años de experiencia escribiendo para y sobre la industria de electrónica en un amplio rango de temas, entre ellos hardware, software, sistemas y aplicaciones, que incluyen IoT. Se doctoróen neurociencias (redes neuronales) y trabajó en la industria aeroespacial en sistemas seguros con distribución masiva y métodos de aceleración de algoritmos. Actualmente, cuando no escribe artículos sobre tecnología e ingeniería, trabaja en aplicaciones de aprendizaje profundo sobre sistemas de reconocimiento y recomendaciones.

Información sobre la editorial

Editores de Digi-Key de América del Norte