Passez à la 2FA sécurisée sur la blockchain

Les SMS sont le moyen le plus populaire d'authentification à deux facteurs (2FA). Ils sont utilisés par les banques, les portefeuilles électroniques et cryptographiques, les boßtes aux lettres et divers services; le nombre d'utilisateurs de cette méthode approche 100%.

Pour moi, cette situation est rĂ©voltante, car cette mĂ©thode n'est pas sĂ©curisĂ©e. Le transfert de numĂ©ro d'une carte SIM Ă  une autre a commencĂ© au dĂ©but de l'Ăšre mobile — c'est ainsi que l'on rĂ©cupĂšre un numĂ©ro en cas de perte de la SIM. Les “spĂ©cialistes du vol numĂ©rique” ont rĂ©alisĂ© que l'option de « réécriture de la SIM » pouvait ĂȘtre utilisĂ©e dans des arnaques. En effet, celui qui contrĂŽle la SIM peut gĂ©rer les services bancaires en ligne, les portefeuilles Ă©lectroniques, et mĂȘme les cryptomonnaies. Il est possible d'obtenir le numĂ©ro d'une autre personne en soudoyant un employĂ© de tĂ©lĂ©communications, par tromperie ou avec de faux documents.

Passez à la 2FA sécurisée sur la blockchain

Des milliers de cas de SIM swapping ont Ă©tĂ© rĂ©vĂ©lĂ©s — c'est ainsi que cette arnaque a Ă©tĂ© nommĂ©e. L'ampleur du problĂšme indique que le monde va bientĂŽt abandonner la 2FA par SMS. Pourtant, cela ne se produit pas — dans une Ă©tude il est rapportĂ© que ce ne sont pas les utilisateurs qui choisissent la mĂ©thode 2FA, mais les propriĂ©taires de services.

Nous proposons d'utiliser une méthode 2FA sécurisée avec livraison de codes uniques via la blockchain, et nous expliquerons comment le propriétaire du service peut l'activer.

Il s'agit de millions

En 2019, la fraude par SIM swapping a augmenté de 63 % selon la police londonienne, et le « panier moyen » du criminel s'élÚve à 4 000 GBP. Je n'ai pas trouvé de statistiques en Russie, mais je suppose qu'elles sont encore pires.

Le SIM swapping est utilisĂ© pour voler des comptes populaires Twitter, Instagram, Facebook, VK, des comptes bancaires, et rĂ©cemment, ils se sont aussi attaquĂ©s aux cryptomonnaies — rapporte le journal Times selon l'entrepreneur Bitcoin Jobby Wicks. Des affaires trĂšs mĂ©diatisĂ©es de vol de cryptomonnaies par SIM swapping apparaissent dans la presse depuis 2016; 2019 a Ă©tĂ© l'apogĂ©e de ces affaires.

En mai, le bureau des procureurs des États-Unis dans le district est du Michigan a portĂ© des accusations contre neuf jeunes ĂągĂ©s de 19 Ă  26 ans : ils seraient membres d'un groupe de hackers appelĂ© “The Community”. Le groupe est accusĂ© de sept attaques de swapping, lors desquelles les hackers ont volĂ© des cryptomonnaies d'une valeur de plus de 2,4 millions de dollars. En avril, un Ă©tudiant californien, Joel Ortiz, a Ă©tĂ© condamnĂ© Ă  10 ans de prison pour SIM swapping; il avait volĂ© 7,5 millions de dollars en cryptomonnaies.

Passez à la 2FA sécurisée sur la blockchain
Photo de Joel Ortiz lors d'une confĂ©rence de presse Ă  l'universitĂ©. Deux ans plus tard, il sera arrĂȘtĂ© pour cybercriminalitĂ©.

Principe du SIM swapping

Le « swapping » signifie échange. Dans tous ces schémas, les criminels s'approprient le numéro de téléphone de la victime, généralement par le biais d'un nouveau tirage de la carte SIM, et l'utilisent pour réinitialiser le mot de passe. Un swapping SIM typique se présente théoriquement comme suit :

  1. Renseignement. Les fraudeurs obtiennent des donnĂ©es personnelles sur la victime : nom et tĂ©lĂ©phone. Ils peuvent les trouver dans des sources publiques (rĂ©seaux sociaux, amis) ou les obtenir d'un complice — un employĂ© d'un opĂ©rateur de tĂ©lĂ©phonie mobile.
  2. Blocage. La carte SIM de la victime est désactivée ; il suffira d'appeler le service client de l'opérateur, de donner le numéro et d'affirmer que le téléphone a été perdu.
  3. Capture, transfert du numéro vers sa propre carte SIM. Cela se fait généralement également par l'intermédiaire d'un complice dans une entreprise de télécommunications ou par falsification de documents.

Dans la rĂ©alitĂ©, c'est encore plus sĂ©vĂšre. Les malfaiteurs choisissent une victime et suivent chaque jour la localisation de son tĂ©lĂ©phone — une demande d'information sur le fait que l'abonnĂ© est en itinĂ©rance coĂ»te 1 Ă  2 centimes. DĂšs que le propriĂ©taire de la carte SIM s'en va Ă  l'Ă©tranger, ils s'arrangent avec un manager dans un magasin de tĂ©lĂ©phonie pour obtenir une nouvelle carte SIM. Cela coĂ»te environ 50 $ (j'ai trouvĂ© des informations — dans diffĂ©rents pays et chez diffĂ©rents opĂ©rateurs, de 20 $ Ă  100 $), et le manager, dans le pire des cas, sera licenciĂ© — il n'y a aucune responsabilitĂ© lĂ -dedans.

Maintenant, tous les SMS seront reçus par les criminels, et le propriĂ©taire du tĂ©lĂ©phone ne pourra rien faire Ă  ce sujet — il est Ă  l'Ă©tranger. Ensuite, les malfaiteurs accĂšdent Ă  tous les comptes de la victime et peuvent changer les mots de passe si besoin.

Chances de récupérer le vol

Les banques font parfois des efforts pour aider les victimes et annulent les transferts de leurs comptes. Ainsi, il est possible de rĂ©cupĂ©rer de l'argent fiat, mĂȘme si le criminel n'est pas retrouvĂ©. Mais avec les portefeuilles de cryptomonnaie, c'est plus compliquĂ© — tant sur le plan techniqueque lĂ©gislatif. Jusqu'Ă  prĂ©sent, aucune bourse/portefeuille n'a versĂ© de compensation aux victimes de swapping.

Si les victimes souhaitent défendre leur argent devant le tribunal, elles accusent l'opérateur : il a créé les conditions permettant le vol d'argent sur le compte. C'est exactement ce qu'a fait Michael Terpin, qui a perdu 224 millions de dollars à cause du swapping. Il poursuit actuellement la société de télécommunications AT&T.

Passez à la 2FA sécurisée sur la blockchain

Jusqu'à présent, aucun pays n'a mis en place de mécanismes opérationnels pour protéger légalement les propriétaires de cryptomonnaies. Il est impossible d'assurer son capital ou d'obtenir une compensation en cas de perte. Par conséquent, prévenir une attaque par échange SIM est plus facile que de lutter contre ses conséquences. Le moyen le plus évident est d'utiliser un "deuxiÚme facteur" plus fiable pour la 2FA.

L'échange SIM n'est pas le seul problÚme de la 2FA par SMS.

Les codes de confirmation par SMS ne sont pas sĂ©curisĂ©s d'un point de vue technique. Les messages peuvent ĂȘtre interceptĂ©s en raison de vulnĂ©rabilitĂ©s irrĂ©mĂ©diables dans le systĂšme de signalisation Signaling System 7 (SS7). La 2FA par SMS est officiellement reconnue comme non sĂ©curisĂ©e (l'Institut national des standards et technologies des États-Unis en parle dans son Guide sur l'authentification numĂ©rique.).

De plus, la présence de la 2FA donne souvent à l'utilisateur un faux sentiment de sécurité, ce qui l'incite à choisir un mot de passe plus simple. Ainsi, cette authentification ne complique pas l'accÚs, mais le facilite pour l'intrus.

De plus, les SMS arrivent souvent avec un grand retard ou ne parviennent pas du tout.

D'autres méthodes de 2FA

Évidemment, les smartphones et les SMS ne constituent pas les seules options. Il existe d'autres mĂ©thodes de 2FA. Par exemple, les codes TAN Ă  usage unique : mĂ©thode simple mais fonctionnelle - elle est encore utilisĂ©e dans certaines banques. Il y a des systĂšmes utilisant des donnĂ©es biomĂ©triques : empreintes digitales, scans de rĂ©tine. Une autre option, qui semble ĂȘtre un compromis raisonnable entre commoditĂ©, fiabilitĂ© et prix, est l'utilisation d'applications spĂ©ciales pour la 2FA : RSA Token, Google Authenticator. Il existe aussi des clĂ©s physiques et d'autres mĂ©thodes.

En théorie, tout semble logique et fiable. Mais dans la pratique, les solutions 2FA modernes rencontrent des problÚmes, ce qui fait que la réalité diffÚre des attentes.

Selon une Ă©tude, l'utilisation de la 2FA est en principe une gĂȘne, et la popularitĂ© de la 2FA par SMS s'explique par le "moindre inconvĂ©nient par rapport Ă  d'autres mĂ©thodes" - obtenir des codes Ă  usage unique est comprĂ©hensible pour l'utilisateur.

De nombreux utilisateurs associent les mĂ©thodes 2FA Ă  la peur de perdre l'accĂšs. Une clĂ© physique ou une liste de mots de passe TAN peut ĂȘtre perdue ou volĂ©e. Personnellement, j'ai eu une mauvaise expĂ©rience avec Google Authenticator. Mon premier smartphone avec cette application est tombĂ© en panne — pensez Ă  tous mes efforts pour rĂ©tablir l'accĂšs Ă  mes comptes. Un autre problĂšme est la transition vers un nouvel appareil. Google Authenticator ne permet pas l'exportation pour des raisons de sĂ©curitĂ© (si les clĂ©s peuvent ĂȘtre exportĂ©es, oĂč est la sĂ©curitĂ© ?). Une fois, j'ai transfĂ©rĂ© les clĂ©s manuellement, puis j'ai dĂ©cidĂ© qu'il Ă©tait plus simple de garder mon ancien smartphone dans une boĂźte sur une Ă©tagĂšre.

La mĂ©thode 2FA doit ĂȘtre :

  • SĂ»re — seuls vous devez avoir accĂšs au compte, pas des malfaiteurs
  • Fiable — vous devez accĂ©der au compte chaque fois que nĂ©cessaire
  • Pratique et accessible — l'utilisation de la 2FA doit ĂȘtre claire et prendre un minimum de temps
  • Peu coĂ»teuse

Nous pensons que la blockchain est une solution appropriée.

Utilisez la 2FA sur la blockchain

Pour l'utilisateur, la 2FA sur la blockchain ressemble à la réception de codes temporaires par SMS. La seule différence est le canal de livraison. La maniÚre de recevoir le code 2FA dépend de ce que propose la blockchain. Dans notre projet (les informations sont dans mon profil), c'est une application Web, Tor, iOS, Android, Linux, Windows, MacOS.

Le service génÚre un code temporaire et l'envoie dans un messager sur la blockchain. Ensuite, comme d'habitude : l'utilisateur saisit le code reçu dans l'interface du service et s'authentifie.

Passez à la 2FA sécurisée sur la blockchain

Dans l'article Comment fonctionne un messager décentralisé sur la blockchain j'ai écrit que la blockchain garantit la sécurité et la confidentialité de la transmission des messages. En ce qui concerne l'envoi des codes 2FA, je mettrai en avant :

  • Un clic pour crĂ©er un compte — pas de tĂ©lĂ©phones ni de courriels.
  • Tous les messages contenant les codes 2FA sont chiffrĂ©s End-to-End avec curve25519xsalsa20poly1305.
  • Les attaques MITM sont exclues — chaque message contenant un code 2FA est une transaction sur la blockchain et est signĂ© avec Ed25519 EdDSA.
  • Le message avec le code 2FA est intĂ©grĂ© dans son bloc. La sĂ©quence et le timestamp des blocs ne peuvent pas ĂȘtre modifiĂ©s, par consĂ©quent, l'ordre des messages non plus.
  • Il n'y a pas de structure centrale qui vĂ©rifie la "fiabilitĂ©" des messages. Cela est rĂ©alisĂ© par un systĂšme de nƓuds distribuĂ©s basĂ© sur un consensus, et il appartient aux utilisateurs.
  • L'impossibilitĂ© de dĂ©sactiver - les comptes ne peuvent pas ĂȘtre bloquĂ©s, et les messages ne peuvent pas ĂȘtre supprimĂ©s.
  • AccĂšs aux codes 2FA depuis n'importe quel appareil Ă  tout moment.
  • Confirmation de la livraison du message avec le code 2FA. Le service envoyant le mot de passe unique sait exactement qu'il a Ă©tĂ© dĂ©livrĂ©. Pas de bouton « Renvoi ».

Pour comparer certains autres méthodes 2FA, j'ai préparé un tableau :

Passez à la 2FA sécurisée sur la blockchain

Un compte dans un messager blockchain pour recevoir des codes utilisateur est créé en une seconde - pour se connecter, il suffit d'utiliser la phrase secrĂšte. C'est pourquoi les moyens d'application peuvent ĂȘtre variĂ©s : on peut utiliser un seul compte pour recevoir des codes pour tous les services, ou crĂ©er un compte distinct pour chaque service.

Il y a aussi un inconvénient - le compte doit avoir au moins une transaction. Pour que l'utilisateur reçoive un message crypté avec le code, il faut connaßtre sa clé publique, qui n'apparaßt sur la blockchain qu'aprÚs la premiÚre transaction. Nous avons contourné ce problÚme en donnant la possibilité de recevoir des jetons gratuits dans le portefeuille. Cependant, une solution plus appropriée serait de nommer le compte d'aprÚs la clé publique. (Pour comparaison, notre numéro de compte U1467838112172792705 est dérivé de la clé publique cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Pour le messager, c'est plus pratique et lisible, mais pour le systÚme d'envoi des codes 2FA, c'est une limitation). Je pense qu'à l'avenir, quelqu'un proposera une telle solution et traduira « Commodité et accessibilité » dans la zone verte.

Le coût de l'envoi du code 2FA est vraiment bas - 0,001 ADM, ce qui correspond actuellement à 0,00001 USD. Encore une fois, il est possible de créer votre propre blockchain et de rendre le coût nul.

Comment connecter 2FA sur la blockchain Ă  votre service

J'espÚre avoir pu intéresser quelques lecteurs pour ajouter l'authentification blockchain à leurs services.

Je vais expliquer comment le faire sur l'exemple de notre messager, et par analogie, vous pouvez utiliser une autre blockchain. Dans l'application de démonstration 2FA, nous utilisons postgresql10 pour stocker les informations sur les comptes.

Étapes de connexion :

  1. Créer un compte sur la blockchain à partir duquel vous enverrez les codes 2FA. Vous obtiendrez une phrase secrÚte, qui est utilisée comme clé privée pour crypter les messages avec les codes et pour signer les transactions.
  2. Ajoutez un script à votre serveur pour générer des codes 2FA. Si vous utilisez déjà un autre méthode 2FA avec l'envoi de mots de passe temporaires, cette étape est déjà complétée.
  3. Ajoutez un script Ă  votre serveur pour envoyer des codes Ă  l'utilisateur via une messagerie blockchain.
  4. Créez une interface utilisateur pour l'envoi et la saisie du code 2FA. Si vous utilisez déjà un autre méthode 2FA avec l'envoi de mots de passe temporaires, cette étape est déjà complétée.

1 Création d'un compte

La création d'un compte sur la blockchain consiste à générer une clé privée, une clé publique et une adresse dérivée de celle-ci.

Passez à la 2FA sécurisée sur la blockchain

Tout d'abord, une phrase mnĂ©monique BIP39 est gĂ©nĂ©rĂ©e, Ă  partir de laquelle un hachage SHA-256 est calculĂ©. Ce hachage est utilisĂ© pour gĂ©nĂ©rer la clĂ© privĂ©e ks et la clĂ© publique kp. À partir de la clĂ© publique, en appliquant le mĂȘme SHA-256 avec inversion, nous obtenons une adresse sur la blockchain.

Si vous souhaitez envoyer des codes 2FA chaque fois Ă  partir d'un nouveau compte, le code pour crĂ©er le compte devra ĂȘtre ajoutĂ© au serveur :

import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()




import * as bip39 from 'bip39'
import crypto from 'crypto'

adamant.createPassphraseHash = function (passphrase) {
  const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
  return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}




import sodium from 'sodium-browserify-tweetnacl'

adamant.makeKeypair = function (hash) {
  var keypair = sodium.crypto_sign_seed_keypair(hash)
  return {
    publicKey: keypair.publicKey,
    privateKey: keypair.secretKey
  }
}




import crypto from 'crypto'

adamant.getAddressFromPublicKey = function (publicKey) {
  const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
  const temp = Buffer.alloc(8)
  for (var i = 0; i < 8; i++) {
    temp[i] = publicKeyHash[7 - i]
  }
  return 'U' + bignum.fromBuffer(temp).toString()
}

Dans l'application de dĂ©monstration, nous avons simplifiĂ© — nous avons créé un seul compte dans l'application web, et nous envoyons des codes depuis celui-ci. Dans la plupart des cas, cela est plus pratique pour l'utilisateur : il sait que le service envoie les codes 2FA depuis un compte spĂ©cifique et peut le nommer.

Passez à la 2FA sécurisée sur la blockchain

2 Génération de codes 2FA

Un code 2FA doit ĂȘtre gĂ©nĂ©rĂ© pour chaque connexion de l'utilisateur. Nous utilisons la bibliothĂšque speakeasy, mais vous pouvez choisir n'importe laquelle d'autre.

const hotp = speakeasy.hotp({
  counter,
  secret: account.seSecretAscii,
});

Vérification de la validité du code 2FA saisi par l'utilisateur :

se2faVerified = speakeasy.hotp.verify({
  counter: this.seCounter,
  secret: this.seSecretAscii,
  token: hotp,
});

3 Envoi du code 2FA

Pour envoyer un code 2FA, vous pouvez utiliser l'API du nƓud de la blockchain, la bibliothùque JS API ou la console. Dans cet exemple, nous utilisons la console — c'est une interface en ligne de commande, un utilitaire qui simplifie l'interaction avec la blockchain. Pour envoyer un message contenant le code 2FA, vous devez utiliser la commande send message de la console.

const util = require('util');
const exec = util.promisify(require('child_process').exec);




const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);

Une méthode alternative pour envoyer des messages consiste à utiliser la méthode send dans la bibliothÚque JS API.

4 Interface utilisateur

L'utilisateur doit avoir la possibilitĂ© d'entrer le code 2FA, ce qui peut ĂȘtre fait de diffĂ©rentes maniĂšres selon la plateforme de votre application. Dans notre exemple, il s'agit de Vue.

Passez à la 2FA sécurisée sur la blockchain

Le code source de l'application de dĂ©monstration de l'authentification Ă  deux facteurs sur la blockchain peut ĂȘtre consultĂ© dans GitHub. Dans le Readme, il y a un lien vers la dĂ©mo en direct, pour essayer.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster