Beweeg om 2FA op die blokketting te beveilig

SMS-boodskappe is die gewildste twee-faktor-verifikasie (2FA) metode. Dit word gebruik deur banke, elektroniese en kripto-beursies, posbusse en allerhande dienste; die aantal gebruikers van die metode nader 100%.

Hierdie belyning van gebeure veroorsaak verontwaardiging by my, want hierdie metode is onveilig. Die hertoewysing van 'n nommer van een SIM-kaart na 'n ander het aan die begin van die mobiele era begin - dit is hoe die nommer herstel word wanneer 'n SIM-kaart verloor word. Die "spesialiste in die neem van digitale geld" het besef dat die "herskryf SIM-kaart"-opsie in bedrieglike skemas gebruik kan word. Die een wat die SIM-kaart beheer, kan immers iemand anders se aanlynbankdienste, en elektroniese beursies, en selfs kripto-geldeenheid bestuur. En jy kan die nommer van 'n ander persoon in besit neem deur 'n telekommunikasiewerknemer om te koop, bedrog of vals dokumente te gebruik.

Beweeg om 2FA op die blokketting te beveilig

Duisende episodes van SIM-omruiling is ontbloot – dit is hoe hierdie bedrogskema genoem is. Die omvang van die ramp dui daarop dat die wêreld binnekort 2FA oor SMS sal laat vaar. Maar dit gebeur nie - studie hulle sê dat dit nie gebruikers is wat die 2FA-metode kies nie, maar dienseienaars.

Ons stel voor om 'n veilige 2FA-metode te gebruik met die aflewering van eenmalige kodes via die blokketting, en ons sal jou vertel hoe om dit vir die eienaar van die diens te aktiveer.

Die rekening gaan in die miljoene

In 2019 het SIM-ruilbedrog volgens die Londense polisie met 63% toegeneem, en die “gemiddelde tjek” van die aanvaller is 4,000 XNUMX GBP. Ek het nie statistieke in Rusland gekry nie, maar ek neem aan dat dit nog erger is.

SIM-omruiling word gebruik om gewilde Twitter-, Instagram-, Facebook-, VK-rekeninge, bankrekeninge te steel, en het onlangs kripto-geldeenhede gekry - The Times berig Volgens bitcoin entrepreneur Joby Wicks. Hoëprofiel-gevalle van diefstal van kripto-geldeenhede met behulp van SIM-omruiling het sedert 2016 in die pers verskyn; 2019 was 'n ware hoogtepunt.

In Mei, die Amerikaanse prokureur se kantoor vir die oostelike distrik van Michigan aangekla nege jong mense tussen die ouderdomme van 19 en 26: hulle is na bewering lede van 'n kuberbende genaamd "Die Gemeenskap" ("Gemeenskap"). Die bende word aangekla van sewe ruilaanvalle, as gevolg waarvan kuberkrakers meer as $2,4 miljoen se kripto-geldeenheid bewillig het. En in April is die Kaliforniese student Joel Ortiz tot 10 jaar tronkstraf gevonnis vir SIM-omruiling; sy mynbou was $7.5 miljoen in kripto-geldeenhede.

Beweeg om 2FA op die blokketting te beveilig
Foto deur Joel Ortiz by 'n perskonferensie by die universiteit. Twee jaar later sal hy vir kuberbedrog aangehou word.

Hoe SIM-ruil werk

"Ruil" beteken ruil. In al sulke skemas steel die misdadigers die slagoffer se telefoonnommer, gewoonlik deur 'n SIM-kaart weer uit te reik, en gebruik dit om die wagwoord terug te stel. 'n Tipiese SIM-omruiling lyk in teorie soos volg:

  1. Intelligensiediens. Bedrieërs leer die slagoffer se persoonlike data: naam en telefoonnommer. Hulle kan gevind word in oop bronne (sosiale netwerke, vriende) of ontvang word van 'n medepligtige - 'n werknemer van 'n mobiele operateur.
  2. Blokkering. Die slagoffer se SIM-kaart is gedeaktiveer; om dit te doen, bel net die verskaffer se tegniese ondersteuning, vertel die nommer en sê dat die foon verlore is.
  3. Vang, dra die nommer na jou SIM-kaart oor. Gewoonlik word dit ook gedoen deur 'n medepligtige in 'n telekommunikasiemaatskappy of deur dokumente te vervals.

In die werklike lewe is dit selfs erger. Aanvallers kies 'n slagoffer, en spoor dan die ligging van die foon daagliks na - een versoek om inligting te ontvang dat die intekenaar na swerwing oorgeskakel het, kos 1-2 sent. Sodra die eienaar van die SIM-kaart oorsee is, kom hulle ooreen met die bestuurder in die kommunikasiesalon om 'n nuwe SIM-kaart uit te reik. Dit kos sowat $50 (ek het inligting gekry - in verskillende lande en van verskillende operateurs van $20 tot $100), terwyl die bestuurder in die ergste geval afgedank sal word - daar is geen verantwoordelikheid hiervoor nie.

Nou sal alle SMS'e deur aanvallers ontvang word, en die eienaar van die foon sal niks daaraan kan doen nie - hy is in die buiteland. En dan kry die skurke toegang tot al die rekeninge van die slagoffer en verander, indien verlang, wagwoorde.

Kanse om terug te kry wat gesteel is

Banke gaan soms om slagoffers te ontmoet en oordragte uit hul rekeninge te onttrek. Daarom is dit moontlik om fiat-geld terug te gee, selfs al word die oortreder nie gevind nie. Maar met cryptocurrency-beursies is alles meer ingewikkeld - en tegnies, en volgens wet. Tot dusver het geen beursie/beursie ruilslagoffers vergoed nie.

As die slagoffers hul geld in die hof wil verdedig, blameer hulle die operateur: hy het die voorwaardes geskep om geld uit die rekening te steel. Dit is presies wat hy gedoen het Michael Turpin, wat $224 miljoen verloor het weens omruiling. Nou dagvaar hy die telekommunikasiemaatskappy AT&T.

Beweeg om 2FA op die blokketting te beveilig

Tot dusver het geen staat werkende skemas om die eienaars van kripto-geldeenhede wettig te beskerm nie. Dit is onmoontlik om jou kapitaal te verseker of vergoeding vir die verlies daarvan te ontvang. Daarom is dit makliker om 'n ruilaanval te voorkom as om die gevolge daarvan te hanteer. Die mees voor die hand liggende manier is om 'n meer betroubare "tweede faktor" vir 2FA te gebruik.

SIM-omruiling is nie die enigste probleem met 2FA per SMS nie

SMS-bevestigingskodes is nie veilig uit 'n tegniese oogpunt nie. Boodskappe kan onderskep word as gevolg van noodlottige kwesbaarhede in die seinstelsel 7 (SS7) seinstelsel. 2FA oor SMS word amptelik as onseker erken (US National Institute of Standards and Technology sê dit in hul Digitale verifikasiegids).

Terselfdertyd gee die teenwoordigheid van 2FA die gebruiker dikwels 'n gevoel van valse sekuriteit, en hy kies 'n eenvoudiger wagwoord. So 'n verifikasie maak dit dus nie moeilik nie, maar vergemaklik 'n aanvaller se toegang tot die rekening.

En dikwels kom SMS'e met 'n lang vertraging of kom glad nie.

Ander maniere om 2FA

Natuurlik, op slimfone en SMS het die wêreld nie soos 'n wig saamgevloei nie. Daar is ander maniere om 2FA. Byvoorbeeld, eenmalige TAN-kodes: 'n primitiewe metode, maar 'n werkende een - dit word steeds in sommige banke gebruik. Daar is stelsels wat biometriese data gebruik: vingerafdrukke, retinale skanderings. Nog 'n opsie wat 'n redelike kompromie in terme van gerief, betroubaarheid en prys blyk te wees, is toegewyde toepassings vir 2FA: RSA Token, Google Authenticator. En dan is daar fisiese sleutels en ander metodes.

In teorie lyk alles logies en betroubaar. Maar in die praktyk het moderne 2FA-oplossings probleme, en as gevolg daarvan verskil die werklikheid van verwagtinge.

Volgens Exploration, die gebruik van 2FA is in beginsel 'n ongerief, en die gewildheid van 2FA per SMS word verklaar deur "minder ongerief in vergelyking met ander metodes" - die verkryging van eenmalige kodes is duidelik vir die gebruiker.

Baie 2FA-metodes word geassosieer met die vrees dat toegang verlore gaan. Die fisiese sleutel of lys van TAN-wagwoorde kan verlore of gesteel word. Ek het persoonlik 'n negatiewe ervaring met Google Authenticator. My eerste slimfoon met hierdie toepassing het gebreek - waardeer my werk om toegang tot rekeninge te herstel. Nog 'n probleem is om na 'n nuwe toestel oor te skakel. Google Authenticator is weens sekuriteitsredes nie uitvoerbaar nie (as sleutels uitgevoer kan word, wat is die sekuriteit?). Eenkeer het ek die sleutels met die hand oorgedra, en toe besluit ek dis makliker om die ou slimfoon in 'n boks op 'n rak te los.

Die 2FA-metode moet wees:

  • Veilig – net jy, nie indringers nie, behoort toegang tot jou rekening te kry
  • Betroubaar - jy kry toegang tot jou rekening wanneer jy dit ook al nodig het
  • Gerieflik en bekostigbaar - die gebruik van 2FA is duidelik en neem 'n minimum tyd in beslag
  • goedkoop

Ons glo dat blockchain die regte oplossing is.

Gebruik 2FA op die blockchain

Vir 'n gebruiker lyk 2FA op die blokketting dieselfde as om eenmalige kodes per SMS te ontvang. Die enigste verskil is in die afleweringskanaal. Die manier om 'n 2FA-kode te kry hang af van wat die blockchain bied. In ons projek (inligting is in my profiel), is dit 'n webtoepassing, Tor, iOS, Android, Linux, Windows, MacOS.

Die diens genereer 'n eenmalige kode en stuur dit na die blockchain-boodskapper. Verder - volgens die klassieke: die gebruiker voer die ontvangde kode in die dienskoppelvlak in en meld aan.

Beweeg om 2FA op die blokketting te beveilig

Die artikel Hoe werk 'n gedesentraliseerde boodskapper op die blokketting? Ek het geskryf dat die blokketting die sekuriteit en privaatheid van boodskappe verseker. Oor die kwessie van die stuur van 2FA-kodes, sal ek uitlig:

  • Een klik om 'n rekening te skep - geen fone of e-posse nie.
  • Alle boodskappe met 2FA-kodes is geïnkripteer met End-to-End curve25519xsalsa20poly1305.
  • 'n MITM-aanval word uitgesluit - elke boodskap met die 2FA-kode is 'n transaksie op die blokketting en word deur Ed25519 EdDSA onderteken.
  • Die boodskap met die 2FA-kode kom in sy eie blok. Die volgorde en tydstempel van blokke kan nie reggestel word nie, en dus die volgorde van boodskappe.
  • Daar is geen sentrale struktuur wat kontroleer vir die "egtheid" van die boodskap nie. Dit word gedoen deur 'n verspreide stelsel van nodusse gebaseer op konsensus, en dit word deur gebruikers besit.
  • Kan nie deaktiveer nie - rekeninge kan nie geblokkeer word nie, en boodskappe kan nie uitgevee word nie.
  • Toegang tot 2FA-kodes vanaf enige toestel te eniger tyd.
  • Bevestiging van boodskap aflewering met 2FA kode. Die diens wat die eenmalige wagwoord stuur, weet vir seker dat dit afgelewer is. Geen "Submit Again"-knoppies nie.

Vir vergelyking met 'n paar ander 2FA-metodes, het ek 'n tabel saamgestel:

Beweeg om 2FA op die blokketting te beveilig

Die gebruiker ontvang 'n rekening in die blokkettingboodskapper om kodes binne 'n sekonde te ontvang - slegs 'n wagwoordfrase word gebruik om in te voer. Daarom kan die metodes van toepassing anders wees: jy kan een rekening gebruik om kodes vir alle dienste te ontvang, of jy kan 'n aparte rekening vir elke diens skep.

Daar is ook 'n ongerief - die rekening moet ten minste een transaksie hê. Om die gebruiker 'n geënkripteerde boodskap met 'n kode te ontvang, moet jy sy publieke sleutel ken, en dit verskyn slegs in die blokketting met die eerste transaksie. Ons het so uitgekom: ons het dit moontlik gemaak om gratis tokens in die beursie te kry. 'n Meer korrekte oplossing is egter om die rekening 'n publieke sleutel te noem. (Vir vergelyking het ons 'n rekeningnommer U1467838112172792705 is 'n afgeleide van die publieke sleutel cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Vir die boodskapper is dit geriefliker en meer leesbaar, maar vir die stelsel vir die stuur van 2FA-kodes is dit 'n beperking). Ek dink in die toekoms sal iemand so 'n besluit neem en "Gemak en Toeganklikheid" in die groen sone inskuif.

Die prys om 'n 2FA-kode te stuur is regtig laag - 0.001 ADM, nou is dit 0.00001 USD. Weereens, jy kan jou blokketting verhoog en die prys nul maak.

Hoe om 2FA op die blockchain aan jou diens te koppel

Ek hoop ek kon 'n paar lesers laat belangstel om blokkettingmagtiging by hul dienste te voeg.

Ek sal jou vertel hoe om dit te doen deur die voorbeeld van ons boodskapper te gebruik, en volgens analogie kan jy 'n ander blokketting gebruik. In die 2FA-demo-toepassing gebruik ons ​​postgresql10 om rekeninginligting te stoor.

Verbindingsfases:

  1. Skep 'n rekening op die blokketting vanwaar u 2FA-kodes sal stuur. Jy sal 'n wagwoordfrase ontvang wat as 'n private sleutel gebruik word om boodskappe met kodes te enkripteer en om transaksies te onderteken.
  2. Voeg 'n skrip by jou bediener om 2FA-kodes te genereer. As jy reeds enige ander 2FA-metode met OTP-aflewering gebruik, het jy reeds hierdie stap voltooi.
  3. Voeg 'n skrip by jou bediener om kodes aan die gebruiker in die blockchain-boodskapper te stuur.
  4. Skep 'n gebruikerskoppelvlak om 'n 2FA-kode in te dien en in te voer. As jy reeds enige ander 2FA-metode met OTP-aflewering gebruik, het jy reeds hierdie stap voltooi.

1 Skep 'n rekening

Die skep van 'n rekening op die blokketting is die generering van 'n private sleutel, 'n publieke sleutel en 'n rekeningadres wat daaruit afgelei is.

Beweeg om 2FA op die blokketting te beveilig

Eerstens word 'n BIP39-wagfrase gegenereer, en 'n SHA-256-hash word daaruit bereken. Die hash word gebruik om die private sleutel ks en die publieke sleutel kp te genereer. Van die publieke sleutel kry ons die adres in die blokketting met dieselfde SHA-256 met inversie.

As jy elke keer 2FA-kodes vanaf 'n nuwe rekening wil stuur, sal die kode om 'n rekening te skep by die bediener gevoeg moet word:

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()
}

In die demo-toepassing het ons dit vereenvoudig - ons het een rekening in die webtoepassing geskep, en ons stuur kodes daaruit. In die meeste gevalle is dit ook geriefliker vir die gebruiker: hy weet dat die diens 2FA-kodes vanaf 'n spesifieke rekening stuur, en kan dit 'n naam gee.

Beweeg om 2FA op die blokketting te beveilig

2 Genereer 2FA-kodes

'n 2FA-kode moet vir elke gebruikeraanmelding gegenereer word. Ons gebruik die biblioteek praatmaklik, maar jy kan enige ander kies.

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

Kontroleer die geldigheid van die 2FA-kode wat deur die gebruiker ingevoer is:

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

3 Dien die 2FA-kode in

Jy kan die blockchain node API, die JS API-biblioteek of die konsole gebruik om die 2FA-kode te stuur. In hierdie voorbeeld gebruik ons ​​die konsole - dit is die Command Line Interface, 'n program wat interaksie met die blokketting vereenvoudig. Om 'n boodskap met 'n 2FA-kode te stuur, moet jy die opdrag gebruik send message konsole.

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);

'n Alternatiewe manier om boodskappe te stuur, is om die metode te gebruik send in JS API-biblioteek.

4 Gebruikerskoppelvlak

U moet die gebruiker toelaat om die 2FA-kode in te voer, dit kan op verskillende maniere gedoen word, afhangende van die platform van u toepassing. In ons voorbeeld is dit Vue.

Beweeg om 2FA op die blokketting te beveilig

Die bronkode vir die blokketting-tweefaktor-verifikasie-demo-toepassing kan besigtig word by GitHub. Die Readme het 'n skakel na 'n Live-demo om te probeer.

Bron: will.com

Voeg 'n opmerking