Movu por sekurigi 2FA sur la blokĉeno

SMS-mesaĝoj estas la plej populara metodo de du-faktora aŭtentigo (2FA). Ĝin uzas bankoj, elektronikaj kaj kriptaj monujoj, poŝtkestoj kaj ĉiuspecaj servoj; la nombro de uzantoj de la metodo proksimiĝas al 100%.

Mi estas kolerigita de ĉi tiu turno de eventoj, ĉar ĉi tiu metodo estas nesekura. Reasigni numeron de unu SIM-karto al alia komenciĝis komence de la poŝtelefona epoko - tiel ili restarigas numeron kiam SIM-karto perdiĝas. "Specialistoj pri forpreno de cifereca mono" komprenis, ke la opcio "reskribi SIM-karton" povas esti uzata en fraŭdaj skemoj. Fine, kiu ajn kontrolas la SIM-karton, povas administri la retan bankadon de iu alia, kaj elektronikajn monujojn, kaj eĉ kriptovaluton. Kaj oni povas ekposedi la numeron de alia persono subaĉetante telekomunikan dungiton, uzante trompon aŭ falsitajn dokumentojn.

Movu por sekurigi 2FA sur la blokĉeno

Miloj da kazoj de SIM-interŝanĝo, kiel oni nomis la fraŭdan skemon, estis malkovritaj. La amplekso de la katastrofo sugestas, ke la mondo baldaŭ forlasos 2FA per SMS. Sed tio ne okazas — en esplorado Ili diras, ke ne la uzantoj elektas la 2FA-metodon, sed la servposedantoj.

Ni proponas uzi sekuran 2FA-metodon kun liverado de unufojaj kodoj per blokĉeno, kaj ni diros al vi kiel la servoposedanto povas konekti ĝin.

La kalkulo estas en milionoj

En 2019, laŭ la londona polico, fraŭdo per SIM-interŝanĝo pliiĝis je 63%, kaj la "averaĝa sumo" por fraŭdulo estis 4,000 XNUMX britaj pundoj. Mi ne povis trovi statistikojn por Rusio, sed mi supozas, ke estas eĉ pli malbone.

Ŝanĝo de SIM-kartoj estas uzata por ŝteli popularajn kontojn de Twitter, Instagram, Facebook, VK, bankajn kontojn, kaj lastatempe ili eĉ atingis kriptomonojn — Raportoj de la gazeto The Times Laŭ la bitkoina entreprenisto Joby Weeks, altprofilaj kazoj de ŝtelo de kriptomoneoj per SIM-interŝanĝita karto aperas en la gazetaro ekde 2016, kaj 2019 atingis veran pinton.

En majo, la oficejo de la usona prokuroro por la Orienta Distrikto de Miĉigano alportis akuzojn naŭ junaj viroj inter la aĝoj de 19 kaj 26, kiuj supozeble estas parto de retpirata bando nomata "La Komunumo". La bando estas akuzita pri sep interŝanĝaj atakoj, kiuj rezultigis ke retpiratoj ŝtelis pli ol 2,4 milionojn da dolaroj en kriptovaluto. Kaj en aprilo, kalifornia studento Joel Ortiz ricevis 10 jarojn en malliberejo pro SIM-interŝanĝo, kiu enspezigis al li 7.5 milionojn da dolaroj en kriptovaluto.

Movu por sekurigi 2FA sur la blokĉeno
Foto de Joel Ortiz ĉe universitata gazetara konferenco. Du jarojn poste, li estus arestita pro ciberfraŭdo.

Kiel funkcias la ŝanĝo de SIM-karto

"Interŝanĝo" signifas interŝanĝon. En ĉiuj tiaj skemoj, krimuloj transprenas la telefonnumeron de la viktimo, kutime per reeldonita SIM-karto, kaj uzas ĝin por restarigi la pasvorton. Tipa SIM-interŝanĝo, teorie, aspektas jene:

  1. Informoj. Trompistoj lernas la personajn datumojn de la viktimo: nomon kaj telefonnumeron. Ili troveblas en malfermaj fontoj (sociaj retoj, amikoj) aŭ akiritaj de komplico - dungito de poŝtelefona funkciigisto.
  2. Blokado. La SIM-karto de la viktimo estas malaktivigita; por fari tion, sufiĉas telefoni al la teknika subteno de la provizanto, provizi la numeron kaj diri, ke la telefono perdiĝis.
  3. Kapto, translokigo de la numero al via SIM-karto. Kutime tio ankaŭ okazas per komplico en la telekomunika kompanio aŭ per falsado de dokumentoj.

En la reala vivo, ĝi estas eĉ pli severa. La atakantoj elektas viktimon kaj poste spuras la lokon de la telefono ĉiutage - unu peto ricevi informojn pri la ŝanĝo de la abonanto al vagado kostas 1-2 cendojn. Tuj kiam la posedanto de la SIM-karto iras eksterlanden, ili intertraktas kun la administranto ĉe la komunikada vendejo por eldoni novan SIM-karton. Tio kostas ĉirkaŭ 50 dolarojn (mi trovis informojn - en malsamaj landoj kaj kun malsamaj funkciigistoj de 20 ĝis 100 dolaroj), kaj en la plej malbona kazo, la administranto estos maldungita - ne ekzistas respondeco pri tio.

Nun ĉiuj SMS-oj estos ricevitaj de la atakantoj, kaj la posedanto de la telefono ne povos fari ion ajn pri tio - li estas eksterlande. Kaj tiam la fiuloj akiras aliron al ĉiuj kontoj de la viktimo kaj ŝanĝas la pasvortojn se ili volas.

Ŝancoj rericevi tion, kio estis ŝtelita

Bankoj kelkfoje iras renkonti viktimojn kaj revokas translokigojn de iliaj kontoj. Tial eblas redoni fiat-monon eĉ se la krimulo ne estas trovita. Sed kun kriptomonejaj monujoj, ĉio estas pli komplika - kaj teknike, kaj laŭleĝe. Ĝis nun, neniu interŝanĝejo/monujo pagis kompenson al interŝanĝaj viktimoj.

Se la viktimoj volas defendi sian monon en tribunalo, ili kulpigas la funkciigiston: li kreis la kondiĉojn por ŝteli monon de la konto. Jen ĝuste kion li faris. Mikaelo Turpin, kiu perdis 224 milionojn da dolaroj pro interŝanĝo. Li nun jurpersekutas la telekomunikan kompanion AT&T.

Movu por sekurigi 2FA sur la blokĉeno

Ĝis nun, neniu ŝtato havas funkciajn skemojn por laŭleĝe protekti posedantojn de kriptovalutoj. Estas neeble asekuri vian kapitalon aŭ ricevi kompenson pro ĝia perdo. Tial, estas pli facile malhelpi interŝanĝan atakon ol trakti ĝiajn sekvojn. La plej evidenta maniero estas uzi pli fidindan "duan faktoron" por 2FA.

Ŝanĝo de SIM-kartoj ne estas la sola problemo kun 2FA per SMS

SMS-konfirmkodoj ankaŭ estas teknike nesekuraj. Mesaĝoj povas esti kaptitaj pro neripareblaj vundeblecoj en la Signalado-Sistemo 7 (SS7). 2FA per SMS estis oficiale agnoskita kiel nesekura (la Usona Nacia Instituto de Normoj kaj Teknologio diras tion en sia Gvidilo pri Cifereca Aŭtentigo).

Samtempe, la ĉeesto de 2FA ofte donas al la uzanto falsan senton de sekureco, kaj ili elektas pli simplan pasvorton. Tial, tia aŭtentigo ne malfaciligas, sed prefere faciligas la aliron de la atakanto al la konto.

Kaj ofte SMS-mesaĝoj alvenas kun longa prokrasto aŭ tute ne alvenas.

Aliaj 2FA-metodoj

Kompreneble, poŝtelefonoj kaj SMS-oj ne estas la solaj aferoj en la mondo. Ekzistas aliaj 2FA-metodoj. Ekzemple, unufojaj TAN-kodoj: primitiva sed efika metodo - ĝi ankoraŭ estas uzata en iuj bankoj. Ekzistas sistemoj uzantaj biometriajn datumojn: fingrospurojn, retinoskanadojn. Alia eblo, kiu ŝajnas racia kompromiso rilate al oportuno, fidindeco kaj prezo, estas specialaj 2FA-aplikaĵoj: RSA Token, Google Authenticator. Ekzistas ankaŭ fizikaj ŝlosiloj kaj aliaj metodoj.

Teorie, ĉio ŝajnas logika kaj fidinda. Sed praktike, modernaj 2FA-solvoj havas problemojn, kaj pro ili, la realo diferencas de la atendoj.

Laŭ esplorado, uzi 2FA estas principe malkomforta, kaj la popularecon de 2FA per SMS klarigiĝas per "malpli da malkomforto kompare kun aliaj metodoj" - ricevi unufojajn kodojn estas komprenebla por la uzanto.

Multaj 2FA-metodoj estas asociitaj kun la timo perdi aliron. Fizika ŝlosilo aŭ listo de TAN-pasvortoj povas esti perditaj aŭ ŝtelitaj. Mi persone havas negativan sperton uzante Google Authenticator. Mia unua inteligenta telefono kun ĉi tiu aplikaĵo rompiĝis - rigardu miajn klopodojn restarigi aliron al kontoj. Alia problemo estas ŝanĝo al nova aparato. Google Authenticator ne havas la kapablon eksporti pro sekurecaj kialoj (se ŝlosiloj povas esti eksportitaj, kia sekureco estas tie?). Iam mi transdonis la ŝlosilojn permane, kaj poste decidis, ke estas pli facile lasi la malnovan inteligentan telefonon en skatolo sur la breto.

La 2FA-metodo devas esti:

  • Sekura - nur vi, ne atakantoj, devus havi aliron al via konto
  • Fidinda - vi ricevas aliron al via konto kiam ajn vi bezonas ĝin
  • Konvena kaj alirebla - uzi 2FA estas klara kaj bezonas minimuman tempon
  • Malmultekosta

Ni kredas, ke blokĉeno estas la ĝusta solvo.

Uzu 2FA sur la blokĉeno

Por la uzanto, 2FA (dua fako) sur la blokĉeno estas la sama kiel ricevi unufojajn kodojn per SMS. La sola diferenco estas la liverkanalo. La metodo por ricevi 2FA-kodon dependas de la oferto de la blokĉeno. En nia projekto (informoj estas en mia profilo), tio inkluzivas la retan aplikon, Tor kaj iOS. Android, Linux, Windows, MacOS.

La servo generas unu-fojan kodon kaj sendas ĝin al la mesaĝisto sur la blokĉeno. Poste, kiel kutime: la uzanto enigas la ricevitan kodon en la servan interfacon kaj ensalutas.

Movu por sekurigi 2FA sur la blokĉeno

En la artikolo Kiel funkcias malcentralizita mesaĝisto sur la blokĉeno? Mi skribis, ke blokĉeno certigas sekurecon kaj privatecon de mesaĝtransdono. Pri la temo de sendado de 2FA-kodoj, mi elstarigos:

  • Unu klako por krei konton - neniuj telefonnumeroj aŭ retpoŝtadresoj necesas.
  • Ĉiuj mesaĝoj kun 2FA-kodoj estas ĉifritaj Fin-al-fina curve25519xsalsa20poly1305.
  • MITM-atako estas ekskludita - ĉiu mesaĝo kun 2FA-kodo estas transakcio en la blokĉeno kaj estas subskribita de Ed25519 EdDSA.
  • La mesaĝo kun la 2FA-kodo eniras sian blokon. La sekvenco kaj tempstampo de la blokoj ne povas esti korektitaj, kaj tial la ordo de la mesaĝoj ne povas esti korektita.
  • Ne ekzistas centra strukturo, kiu kontrolas la "aŭtentecon" de mesaĝo. Ĉi tio estas farita per distribuita sistemo de nodoj bazitaj sur konsento, kaj ĝi estas posedata de la uzantoj.
  • Neniu eblo malŝalti - kontoj ne povas esti blokitaj kaj mesaĝoj ne povas esti forigitaj.
  • Aliru viajn 2FA-kodojn de iu ajn aparato iam ajn.
  • Konfirmo de la sendo de la mesaĝo per la 2FA-kodo. La servo sendanta la unufojan pasvorton certe scias, ke ĝi estis sendita. Neniuj butonoj "Sendi denove".

Por kompari kun iuj aliaj 2FA-metodoj, mi kompilis tabelon:

Movu por sekurigi 2FA sur la blokĉeno

La uzanto ricevas konton en la blokĉena mesaĝilo por ricevi kodojn post sekundo - nur pasvorto estas uzata por ensaluti. Tial, la uzmanieroj povas esti malsamaj: vi povas uzi unu konton por ricevi kodojn por ĉiuj servoj, aŭ vi povas krei apartan konton por ĉiu servo.

Ankaŭ ekzistas ĝeno - la konto devas havi almenaŭ unu transakcion. Por ke la uzanto ricevu ĉifritan mesaĝon kun kodo, oni bezonas scii ĝian publikan ŝlosilon, kaj ĝi aperas en la blokĉeno nur ĉe la unua transakcio. Ni solvis tion donante la eblecon ricevi senpagajn ĵetonojn en la monujo. Tamen, pli ĝusta solvo estas nomi la konton publika ŝlosilo. (Por komparo, ni havas la kontonumeron) U1467838112172792705 estas derivaĵo de la publika ŝlosilo cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2adaPor mesaĝilo, ĉi tio estas pli oportuna kaj legebla, sed por 2FA-kodsenda sistemo, ĝi estas limigo). Mi pensas, ke estonte iu faros tian decidon kaj movos "Opportunon kaj alireblecon" al la verda zono.

La prezo por sendi 2FA-kodon estas vere malalta - 0.001 ADM, nun ĝi estas 0.00001 USD. Denove, vi povas altigi vian blokĉenon kaj fari la prezon nulo.

Kiel konekti 2FA sur la blokĉeno al via servo

Mi esperas, ke mi sukcesis veki la intereson de iuj legantoj por aldoni blokĉenan aŭtentigon al siaj servoj.

Mi diros al vi kiel fari tion uzante nian mesaĝilon kiel ekzemplon, kaj analoge vi povas uzi alian blokĉenon. En la demonstra aplikaĵo 2FA, ni uzas postgresql10 por konservi kontinformojn.

Konektaj stadioj:

  1. Kreu konton en la blokĉeno, el kiu vi sendos 2FA-kodojn. Vi ricevos pasfrazon, kiu estas uzata kiel privata ŝlosilo por ĉifri mesaĝojn per kodoj kaj por subskribi transakciojn.
  2. Aldonu skripton al via servilo por generi 2FA-kodojn. Se vi jam uzas alian 2FA-metodon kun unufoja pasvortliverado, vi jam kompletigis ĉi tiun paŝon.
  3. Aldonu skripton al via servilo por sendi kodojn al la uzanto en la blokĉena mesaĝilo.
  4. Kreu uzantinterfacon por sendi kaj enigi la 2FA-kodon. Se vi jam uzas alian 2FA-metodon kun liverado de unufoja pasvorto, vi jam kompletigis ĉi tiun paŝon.

1 Krei konton

Krei konton sur la blokĉeno implicas generi privatan ŝlosilon, publikan ŝlosilon kaj kontadreson derivitan de ĝi.

Movu por sekurigi 2FA sur la blokĉeno

Unue, oni generas BIP39-pasfrazon, el kiu oni kalkulas SHA-256-haŝon. La haŝo estas uzata por generi privatan ŝlosilon ks kaj publikan ŝlosilon kp. El la publika ŝlosilo, oni uzas la saman SHA-256 kun inversigo por akiri adreson en la blokĉeno.

Se vi volas sendi 2FA-kodojn ĉiufoje de nova konto, la konto-krekodo devos esti aldonita al la servilo:

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

En la demonstra aplikaĵo, ni simpligis ĝin — ni kreis unu konton en la TTT-aplikaĵo kaj sendis kodojn de ĝi. Plejofte, tio estas pli oportuna por la uzanto: li scias, ke la servo sendas 2FA-kodojn de specifa konto, kaj povas nomi ĝin.

Movu por sekurigi 2FA sur la blokĉeno

2 Generado de 2FA-kodoj

La 2FA-kodo devas esti generita por ĉiu uzanta ensaluto. Ni uzas la bibliotekon parolmaniero, sed vi povas elekti iun ajn alian.

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

Kontrolante la validecon de la 2FA-kodo enigita de la uzanto:

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

3 Sendante 2FA-kodon

Por sendi 2FA-kodon, vi povas uzi la blokĉenan nodan API-on, la JS API-bibliotekon, aŭ la konzolon. En ĉi tiu ekzemplo, ni uzas la konzolon, kiu estas la Komandlinia Interfaco, ilo kiu simpligas interagadon kun la blokĉeno. Por sendi mesaĝon kun 2FA-kodo, vi devas uzi la komandon send message konzoloj.

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

Alternativa maniero sendi mesaĝojn estas uzi la metodon send en la JS API-biblioteko.

4 Uzanto-interfaco

La uzanto devas ricevi la eblon enigi la 2FA-kodon, tio povas esti farita laŭ diversaj manieroj depende de la platformo de via aplikaĵo. En nia ekzemplo, temas pri Vue.

Movu por sekurigi 2FA sur la blokĉeno

La fontkodo por la demonstra aplikaĵo por dufaktoraj aŭtentikigoj en blokĉeno videblas ĉe GitHubEstas ligilo al viva demonstraĵo en la dosiero "Readme" por provi ĝin.

fonto: www.habr.com

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster