Intégrer la sécurité dans les applications de blockchain – 2e partie : déploiement rapide avec une solution clés en main

Par Stephen Evanczuk

Avec la contribution de Rédacteurs nord-américains de DigiKey

Note de l'éditeur : Les détails de la technologie blockchain et ses méthodes de transaction sont complexes. La 1re partie de cette série en deux parties fournit une présentation de la structure de la blockchain et de son processus de transaction. Elle permet ainsi de comprendre pourquoi la protection des clés privées constitue la base de la sécurité de la blockchain. Elle présente ensuite une solution clés en main pour la sécurisation des clés privées. Cette 2e partie explique comment les développeurs peuvent simplifier la protection des transactions de blockchain à l'aide de cette solution matérielle clés en main.

Au-delà de son utilisation bien connue dans le domaine des cryptomonnaies, la technologie blockchain peut offrir aux développeurs une infrastructure sécurisée dotée d'une applicabilité étendue. Son architecture décentralisée ne nécessite aucune autorité centrale et se base plutôt sur des clés privées et des méthodes cryptographiques pour protéger les ressources et leur échange entre les parties. Par conséquent, la sécurité d'un système de blockchain dépend essentiellement de la sécurité des clés et de leur utilisation adaptée dans des algorithmes fiables.

Même s'il est facile de trouver des algorithmes adaptés, leur implémentation nécessite une expertise et une expérience considérables pour développer une solution sécurisée et l'intégrer dans l'application cible. Sans les outils appropriés pour créer une blockchain au cœur de leur application, les développeurs risquent de voir leurs efforts réduits à néant et d'exposer leur système aux attaques de pirates informatiques.

Cet article montre comment les développeurs peuvent protéger plus facilement les transactions de blockchain à l'aide d'une solution matérielle clés en main pour la sécurité des blockchains d'Infineon Technologies.

Sécurité des clés privées

Les blockchains n'ont pas besoin d'une autorité centrale pour l'approbation des transactions. Au lieu de cela, cette technologie repose sur des mécanismes consensuels visant à maintenir l'intégrité d'une blockchain étendue en permanence avec un ensemble de transactions signées et vérifiées au moyen de la cryptographie et d'une paire de clés privée/publique. En fait, les clés privées sont utilisées en tant qu'informations d'identification de propriété dans les systèmes de blockchain. Leur perte ou exposition, accidentelle ou à la suite d'un vol, a déjà provoqué des pertes de cryptomonnaies considérables. De ce fait, la sécurité des clés privées est d'une importance primordiale dans le déploiement d'applications de blockchain.

Les approches antérieures basées sur un logiciel ou sur une sécurité matérielle limitée peuvent rendre les clés privées vulnérables à un large éventail d'attaques. En revanche, il existe des solutions plus robustes, basées sur des contrôleurs de sécurité conçus avec une protection renforcée contre diverses menaces directes et indirectes. Grâce à une solution basée sur ce type de contrôleur de sécurité, le kit de démarrage Blockchain Security 2Go d'Infineon (BLOCKCHAINSTARTKITTOBO1) fournit la protection renforcée requise par la sécurité de blockchains.

Plutôt que de se lancer dans l'implémentation complexe de leur propre solution, les développeurs peuvent fournir aux utilisateurs des cartes à puce sans contact avec une prise en charge intégrée des mécanismes de sécurité de blockchain, notamment la signature des transactions, qui constitue la première étape essentielle dans l'extension d'une blockchain (Figure 1).

Schéma de la carte à puce Blockchain Security 2Go d'InfineonFigure 1 : La carte à puce Blockchain Security 2Go d'Infineon simplifie le déploiement de sécurité de blockchain avec une prise en charge intégrée des mécanismes de blockchain, notamment la signature des transactions utilisées pour étendre une blockchain. (Source de l'image : Infineon Technologies)

Plateforme sécurisée

Le kit de démarrage Blockchain Security 2Go d'Infineon fournit aux intégrateurs de système de blockchain une solution de sécurité clés en main permettant d'éliminer le recours à des accords de non-divulgation qui sont généralement requis pour l'acquisition de dispositifs de sécurité.

Conçu pour un déploiement rapide à l'aide d'un logiciel open-source d'Infineon, le kit inclut cinq cartes à puce qui implémentent des mécanismes de blockchain clés, notamment la génération de clés sécurisées, la création d'une signature et l'authentification par code PIN. De même, le lot de 10 cartes Security 2Go d'Infineon (BLOCKCHAIN10CARDSTOBO1) permet aux développeurs d'avoir des cartes à puce supplémentaires.

Les cartes sont conformes à la norme ISO/CEI 7810 ID-1 utilisée pour des cartes de paiement traditionnelles et pour les cartes d'identité dans certaines régions. Pour la connectivité, les cartes à puce intègrent une antenne de classe 1 basée sur la norme ISO/CEI 14443 pour les cartes sans contact utilisant la communication en champ proche (NFC).

Un contrôleur de sécurité intégré dans chaque carte fournit la sécurité matérielle pour créer et stocker jusqu'à 255 paires de clés privées/publiques, et exécuter un algorithme de cryptographie. En plus d'un générateur de nombres véritablement aléatoires (TRNG) intégré, les cartes prennent en charge des algorithmes pour la cryptographie symétrique de type AES (norme de cryptage avancé) à 256 bits et pour la cryptographie asymétrique de type ECC (cryptographie à courbe elliptique) à 256 bits, préchargés avec la courbe ECC secp256k1 généralement utilisée dans les cryptomonnaies, notamment Bitcoin et Ethereum.

Avec leur prise en charge dédiée des mécanismes de sécurité de blockchain, les cartes fournissent une solution immédiate pour la sécurisation des transactions de blockchain. Plutôt que de perdre du temps à créer des méthodes de signature sécurisées, les intégrateurs de système de blockchain peuvent tout simplement fournir aux utilisateurs des cartes à puce à utiliser pour interagir avec le système de blockchain déployé.

Interactions plus simples

Pour les utilisateurs, les cartes à puce fournissent une méthode simple permettant d'effectuer des transactions de blockchain tout en sécurisant entièrement leurs clés privées. Les cartes sont conçues pour fonctionner avec un logiciel qui s'exécute sur un dispositif d'interface, comme un smartphone ou un ordinateur NFC équipé d'un lecteur de carte à puce NFC autonome. Pendant qu'ils exécutent leur application de blockchain, les utilisateurs activent les fonctionnalités de la carte en la plaçant sur le dispositif d'interface (Figure 2).

Image d'un lecteur NFC au dos d'un smartphone Google PixelFigure 2 : Les utilisateurs font appel aux fonctionnalités de la carte à puce en la plaçant à proximité de l'antenne du lecteur NFC, comme la zone brillante au dos d'un smartphone Google Pixel, comme illustré ici. (Source de l'image : Infineon Technologies)

Pour une évaluation immédiate des cartes à puce Security 2Go, Infineon propose une application mobile Android qui explique leur utilisation dans des scénarios typiques. Une fois que l'application est lancée sur un smartphone compatible NFC, elle invite l'utilisateur à placer la carte contre la zone de l'antenne NFC du smartphone, ce qui active entièrement l'interface de l'application mobile (Figure 3).

Schéma de Coinfinity GmbH pour le kit de démarrage Blockchain Security 2GoFigure 3 : Développée par Coinfinity GmbH pour le kit de démarrage Blockchain Security 2Go, une application Android pré-conçue montre comment, après la demande de contact avec la carte à puce (à gauche), elle utilise les fonctionnalités de la carte à puce pour expliquer différents scénarios d'utilisation (à droite). (Source de l'image : Infineon Technologies)

Derrière cette application mobile et d'autres déploiements, un logiciel exécuté sur le smartphone ou sur un autre dispositif d'interface émet des commandes pour effectuer des actions comme la génération d'une paire de clés ou l'obtention d'informations concernant une paire de clés existante. Pendant ces séquences de commandes (et d'autres commandes disponibles), la clé privée ne quitte jamais la carte à puce. En réponse aux commandes qui impliquent des clés privées, la carte à puce renvoie tout au plus un descripteur de clé au dispositif d'interface. À son tour, le logiciel du dispositif d'interface utilise ce descripteur pour exécuter les commandes associées, comme la récupération de la clé publique associée à une clé privée en particulier (Figure 4).

Grâce à cette approche, le logiciel exécuté sur l'interface peut effectuer entièrement les opérations requises pour interagir avec le système de blockchain sans compromettre les données confidentielles.

Schéma de la demande de génération de clé envoyée à une carte à puce Blockchain Security 2Go d'InfineonFigure 4 : Un dispositif d'interface comme un smartphone ou un lecteur de carte à puce émet des commandes comme cette demande de génération de clé. Cette demande est envoyée à une carte à puce Blockchain Security 2Go d'Infineon, ce qui permet de créer une paire de clés privée/publique et de renvoyer la clé publique sans révéler la clé privée. (Source de l'image : Infineon Technologies)

Le logiciel du dispositif d'interface est responsable de l'exécution des fonctions spécifiques à l'application, comme la transformation de la clé publique en adresse de blockchain (généralement unique) utilisée pour chaque transaction. Par exemple, une adresse Bitcoin utilise la clé publique comme entrée vers un algorithme de hachage unidirectionnel, qui génère une adresse qui dépend de la clé publique, mais qui ne peut pas être utilisée pour la recréer.

Pour signer une demande de transaction, l'interface émet de la même façon une commande et un résultat de hachage associé, et envoie le tout à la carte à puce. En réponse, la carte à puce renvoie la signature au dispositif d'interface (Figure 5).

Schéma de la signature de la carte à puce Blockchain Security 2Go d'InfineonFigure 5 : La signature d'une transaction nécessite l'utilisation d'une clé privée, mais avec la carte à puce Blockchain Security 2Go d'Infineon, un dispositif d'interface reçoit la signature sans exposer la clé privée cruciale. (Source de l'image : Infineon)

Messages APDU

Pour chaque commande et chaque réponse, un dispositif d'interface et une carte à puce interagissent à l'aide de messages APDU (unité de données de protocole d'application), définis dans la section 4 de la norme ISO/CEI 7816. Pour chaque interaction avec la carte à puce, le dispositif d'interface émet des demandes de service au format APDU de commande conforme à la norme ISO/CEI-7816 et reçoit (facultativement) des réponses au format APDU de réponse conforme à cette même norme (Figure 6).

Tableau des formats ISO/CEI 7816 pour les messages APDU de commande et de réponseFigure 6 : Les formats conformes à la norme ISO/CEI 7816 pour les messages APDU de commande et de réponse forment la base des communications entre les dispositifs d'interface et les cartes à puce compatibles, comme la carte à puce Blockchain Security 2Go d'Infineon. (Source de l'image : Infineon Technologies)

Dans un message APDU de commande, les instructions et paramètres pris en charge sont définis par le fournisseur de la carte à puce conformément aux normes du secteur utilisées dans le domaine d'application cible. Pour ses cartes à puce Blockchain Security 2Go, Infineon définit un ensemble principal de commandes requises pour tirer parti des capacités fonctionnelles des cartes à puce (Tableau 1).

Tableau d'ensemble de commandes pour la carte à puce Blockchain Security 2Go d'InfineonTableau 1 : Ensemble de commandes pour la carte à puce Blockchain Security 2Go d'Infineon. (Source du tableau : tableau créé par DigiKey Electronics à partir de données d'Infineon Technologies)

Par exemple, pour démarrer une nouvelle session, le logiciel du dispositif d'interface construit le message APDU de commande SELECT APPLICATION avec une valeur de données pour l'identifiant d'application (AID) fixe fourni par Infineon pour le kit de démarrage Blockchain Security 2Go. Après avoir reçu ce message APDU de commande, la carte à puce s'initialise pour une nouvelle session et transmet le message APDU de réponse correspondant, qui inclut des métadonnées concernant la carte à puce (Figure 7).

Tableau des valeurs de champ de messages APDU spécifiques d'Infineon nécessaires pour les commandesFigure 7 : Pour sa carte à puce Blockchain Security 2Go, Infineon fournit les valeurs de champ de messages APDU spécifiques nécessaires pour les commandes et attendues dans les réponses ainsi que les codes d'erreur, comme cet ensemble pour l'initialisation de la carte à puce, qui inclut l'identifiant d'application (AID) fixe fourni par Infineon. (Source de l'image : Infineon Technologies)

Logiciel personnalisé

Les développeurs n'ont pas besoin d'effectuer tout ce travail de base de création d'applications utilisant des cartes à puce Blockchain Security 2Go. Dans son référentiel GitHub pour Blockchain Security 2Go, Infineon fournit des applications d'exemple et des documents sur l'utilisation de cartes à puce.

Infineon inclut le code source Java complet pour son application mobile Android dans son référentiel GitHub de code Android pour Blockchain Security 2Go. En explorant cette base de code, les programmeurs logiciels peuvent apprendre rapidement des modèles de conception de clés, mais également initialiser une session de carte à puce (selectApplication()), lire une clé publique à partir d'une carte à puce (readPublicKeyFromCard()) et créer une paire de clés (generateNewSecp256K1Keypair()) s'il n'existe pas encore de clé publique sur la carte (Liste 1).

Copier /** * 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; } } } 

Liste 1 : Infineon fournit le code source complet pour son application Android pour Blockchain Security 2Go, qui explique les interactions de base, comme la lecture d'une clé publique ou la création d'une paire de clés privée/publique. (Source du code : Infineon Technologies)

Les classes utilitaires dans la base de code Java implémentent des interactions détaillées, comme la création du message APDU SELECT APPLICATION. Les routines qui font appel à la fonction membre indiquée dans la Liste 2 (ci-dessous) transfèrent un paramètre aid contenant l'identifiant AID de la carte Blockchain Security 2Go d'Infineon, qui est déclaré plus tôt dans le pack, comme suit :

Copier 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; } } 

Liste 2 : La distribution du code source de l'application Android pour Blockchain Security 2Go d'Infineon illustre la création d'un message APDU de commande pour l'initialisation de la carte à puce. (Source du code : Infineon Technologies)

Pour un développement rapide, Infineon propose également une bibliothèque Python pour Blockchain Security 2Go et une interface de ligne de commande intégrée à cette bibliothèque. Comme avec la version Java, le code Python montre le modèle de conception simple requis pour exécuter des opérations de carte à puce, comme la génération d'une paire de clés (Liste 3).

Copier 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 

Liste 3 : La bibliothèque Python pour Blockchain Security 2Go d'Infineon et l'interface de ligne de commande qui l'accompagne contribuent à un développement rapide grâce à un ensemble complet de routines de service comme la fonction select_app() pour l'initialisation d'une carte à puce Blockchain Security 2Go et la fonction generate_keypair(), qui montrent chacune les modèles de conception de base pour une interaction avec la carte à puce. (Source du code : Infineon Technologies)

En utilisant les caractéristiques spécifiques à Python, la bibliothèque Python pour Blockchain Security 2Go repose sur des modules tiers facilement accessibles. En particulier, la bibliothèque d'Infineon utilise le module pyscard populaire, en englobant ses fonctions dans sa propre définition de classe. Par exemple, la bibliothèque Python pour Blockchain Security 2Go démarre une session de carte à puce en cherchant un lecteur d'ordinateur personnel/carte à puce (PC/SC). Pour le module principal blocksec2go de la bibliothèque Python pour Blockchain Security 2Go, cette détection se fait à l'aide de la fonction open_psycard(), qui est une fonction membre dans une classe de la bibliothèque qui englobe les fonctions pyscard (Liste 4).

Copier class 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) 

Liste 4 : La bibliothèque Python pour Blockchain Security 2Go d'Infineon englobe les interactions avec le module tiers pyscard dans cette classe, en utilisant ses fonctions membres pour faire appel à des fonctions pyscard. (Source du code : Infineon Technologies)

Conclusion

La technologie blockchain offre une architecture qui permet d'étendre l'accessibilité aux informations sans compromettre leur intégrité ni leur authenticité. Plutôt que de reposer sur une autorité centrale, un système de blockchain utilise la cryptographie pour vérifier les transactions et les protéger contre les modifications. Au cœur de cette approche, les clés privées nécessitent des mécanismes de sécurité robustes pour éviter que les utilisateurs perdent le contrôle des transactions et que le système de blockchain soit compromis.

Comme expliqué ici, grâce au logiciel open-source qui l'accompagne, le kit de démarrage Blockchain Security 2Go d'Infineon fournit aux intégrateurs de système de blockchain une solution de sécurité immédiate et offre aux utilisateurs une méthode plus simple et plus sécurisée pour exécuter des transactions de blockchain.

DigiKey logo

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.

À propos de l'auteur

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk affiche plus de 20 ans d'expérience dans la rédaction de contenu pour et sur l'industrie électronique, couvrant un large éventail de sujets, notamment le matériel, les logiciels, les systèmes et les applications, y compris l'IoT. Il a obtenu son doctorat (Ph.D.) en neurosciences sur les réseaux neuronaux et a travaillé dans l'industrie aérospatiale sur les systèmes sécurisés massivement distribués et les méthodes d'accélération par algorithmes. Actuellement, lorsqu'il n'écrit pas d'articles techniques, il travaille sur l'application de l'apprentissage approfondi pour les systèmes de reconnaissance et de recommandation.

À propos de l'éditeur

Rédacteurs nord-américains de DigiKey