Lëvizni për të siguruar 2FA në blockchain

Mesazhet SMS janë metoda më e popullarizuar e vërtetimit me dy faktorë (2FA). Përdoret nga bankat, kuletat elektronike dhe kripto, kutitë postare dhe të gjitha llojet e shërbimeve; numri i përdoruesve të metodës po i afrohet 100%.

Unë jam i indinjuar me këtë skenar, sepse kjo metodë është e pasigurt. Ricaktimi i një numri nga një kartë SIM në tjetrën filloi në fillim të epokës celulare - kështu rikthehet numri kur humbet një kartë SIM. “Specialistët e vjedhjes së parave dixhitale” kuptuan se opsioni “rishkrimi i kartës SIM” mund të përdoret në skema mashtruese. Në fund të fundit, ai që kontrollon kartën SIM mund të kontrollojë bankingun online të njerëzve të tjerë, kuletat elektronike dhe madje edhe kriptomonedhën. Dhe ju mund të posedoni numrin e një personi tjetër duke dhënë ryshfet një punonjësi të telekomit, duke përdorur mashtrime ose dokumente të falsifikuara.

Lëvizni për të siguruar 2FA në blockchain

Janë zbuluar mijëra episode të shkëmbimit të kartave SIM, siç quhet kjo skemë mashtrimi. Shkalla e katastrofës sugjeron që bota së shpejti do të braktisë 2FA përmes SMS. Por kjo nuk ndodh - në studim ata thonë se nuk janë përdoruesit që zgjedhin metodën 2FA, por pronarët e shërbimeve.

Ne propozojmë përdorimin e metodës së sigurt 2FA me dërgimin e kodeve një herë përmes blockchain dhe do t'ju tregojmë se si mund ta lidhë pronari i shërbimit.

Numri shkon në miliona

Në vitin 2019, mashtrimi i shkëmbimit të kartave SIM u rrit me 63% sipas policisë së Londrës, dhe "fatura mesatare" e një sulmuesi ishte 4,000 GBP. Unë nuk kam gjetur asnjë statistikë në Rusi, por supozoj se ato janë edhe më keq.

Shkëmbimi i kartës SIM përdoret për të vjedhur llogaritë e njohura të Twitter, Instagram, Facebook, VK, llogaritë bankare dhe së fundi edhe kriptovalutat - Raporton gazeta Times sipas sipërmarrësit të Bitcoin Joby Weeks. Rastet e profilit të lartë të vjedhjes së kriptomonedhave duke përdorur shkëmbimin e kartës SIM janë shfaqur në shtyp që nga viti 2016; 2019 pa një kulm të vërtetë.

Në maj, Zyra e Prokurorit të SHBA për Distriktin Lindor të Miçiganit ngriti akuza nëntë të rinj nga mosha 19 deri në 26 vjeç: ata besohet se janë pjesë e një bande hakerash të quajtur "Komuniteti". Banda akuzohet për shtatë sulme shkëmbimi, si rezultat i të cilave hakerët vodhën kriptovaluta me vlerë mbi 2,4 milionë dollarë. Dhe në prill, studenti nga Kalifornia Joel Ortiz mori 10 vjet burg për shkëmbim karte SIM; prodhimi i tij ishte 7.5 milionë dollarë në kriptovaluta.

Lëvizni për të siguruar 2FA në blockchain
Foto e Joel Ortiz në një konferencë për shtyp të universitetit. Dy vjet më vonë ai do të arrestohet për mashtrim kibernetik.

Si funksionon ndërrimi i kartës SIM

"Swaping" do të thotë shkëmbim. Në të gjitha këto skema, kriminelët marrin përsipër numrin e telefonit të viktimës, zakonisht nëpërmjet rilëshimit të një karte SIM, dhe e përdorin atë për të rivendosur fjalëkalimin. Një shkëmbim tipik i SIM në teori duket kështu:

  1. Shërbimi i inteligjencës. Mashtruesit zbulojnë të dhënat personale të viktimës: emrin dhe numrin e telefonit. Ato mund të gjenden në burime të hapura (rrjete sociale, miq) ose të merren nga një bashkëpunëtor - një punonjës i një operatori celular.
  2. Bllokimi. Karta SIM e viktimës është çaktivizuar; Për ta bërë këtë, thjesht telefononi mbështetjen teknike të ofruesit, jepni numrin dhe thoni që telefoni ka humbur.
  3. Kapni, transferoni numrin në kartën tuaj SIM. Zakonisht kjo bëhet edhe nëpërmjet një bashkëpunëtor në kompaninë e telekomit ose nëpërmjet falsifikimit të dokumenteve.

Në jetën reale gjërat janë edhe më të rënda. Sulmuesit zgjedhin një viktimë dhe më pas gjurmojnë vendndodhjen e telefonit çdo ditë - një kërkesë për të marrë informacion që pajtimtari ka kaluar në roaming kushton 1-2 cent. Sapo pronari i kartës SIM ka shkuar jashtë vendit, ata negociojnë me menaxherin në dyqanin e komunikimit për lëshimin e një karte të re SIM. Kushton rreth 50 dollarë (kam gjetur informacion - në vende të ndryshme dhe me operatorë të ndryshëm nga 20 në 100 dollarë), dhe në rastin më të keq menaxheri do të pushohet - nuk ka asnjë përgjegjësi për këtë.

Tani të gjitha SMS-të do të merren nga sulmuesit, dhe pronari i telefonit nuk do të jetë në gjendje të bëjë asgjë për këtë - ai është jashtë vendit. Dhe më pas zuzarët fitojnë akses në të gjitha llogaritë e viktimës dhe ndryshojnë fjalëkalimet nëse dëshirojnë.

Shanset për kthimin e pasurisë së vjedhur

Bankat ndonjëherë strehojnë viktimat në gjysmë të rrugës dhe tërheqin transferta nga llogaritë e tyre. Prandaj, është e mundur të kthehen paratë e fiatit edhe nëse krimineli nuk gjendet. Por me kuletat e kriptomonedhave gjithçka është më e ndërlikuar - dhe teknikisht, dhe ligjërisht. Deri më tani, asnjë shkëmbim/portofol i vetëm nuk ka paguar kompensim për viktimat e shkëmbimit.

Nëse viktimat duan të mbrojnë paratë e tyre në gjykatë, ata fajësojnë operatorin: ai krijoi kushtet për vjedhjen e parave nga llogaria. Kjo është pikërisht ajo që bëra Michael Turpin, i cili humbi 224 milionë dollarë për shkak të shkëmbimit.Ai tani ka paditur kompaninë e telekomunikacionit AT&T.

Lëvizni për të siguruar 2FA në blockchain

Deri më tani, asnjë shtet nuk ka skema funksionale për të mbrojtur ligjërisht pronarët e kriptomonedhave. Është e pamundur të siguroni kapitalin tuaj ose të merrni kompensim për humbjen e tij. Prandaj, parandalimi i një sulmi shkëmbimi është më i lehtë sesa trajtimi i pasojave të tij. Mënyra më e dukshme është përdorimi i një "faktori të dytë" më të besueshëm për 2FA.

Ndërrimi i kartës SIM nuk është problemi i vetëm me 2FA përmes SMS

Kodet e konfirmimit në SMS janë gjithashtu të pasigurta nga pikëpamja teknike. Mesazhet mund të përgjohen për shkak të dobësive të papatchuara në Sistemin e Sinjalizimit 7 (SS7). 2FA mbi SMS njihet zyrtarisht si e pasigurt (Instituti Kombëtar i Standardeve dhe Teknologjisë i SHBA e thotë këtë në Udhëzues për vërtetimin dixhital).

Në të njëjtën kohë, prania e 2FA shpesh i jep përdoruesit një ndjenjë sigurie të rreme dhe ai zgjedh një fjalëkalim më të thjeshtë. Prandaj, një vërtetim i tillë nuk e vështirëson, por e bën më të lehtë për një sulmues hyrjen në llogari.

Dhe shpesh SMS-të vijnë me një vonesë të gjatë ose nuk arrijnë fare.

Metoda të tjera 2FA

Sigurisht, drita nuk konvergonte në telefonat inteligjentë dhe SMS. Ka metoda të tjera të 2FA. Për shembull, kodet TAN një herë: një metodë primitive, por funksionon - përdoret ende në disa banka. Ka sisteme që përdorin të dhëna biometrike: gjurmët e gishtërinjve, skanimet e retinës. Një tjetër opsion që duket si një kompromis i arsyeshëm për sa i përket komoditetit, besueshmërisë dhe çmimit janë aplikacionet speciale për 2FA: RSA Token, Google Authenticator. Ekzistojnë gjithashtu çelësa fizikë dhe metoda të tjera.

Në teori, gjithçka duket logjike dhe e besueshme. Por në praktikë, zgjidhjet moderne 2FA kanë probleme, dhe për shkak të tyre, realiteti ndryshon nga pritshmëritë.

Sipas eksplorim, përdorimi i 2FA është në parim një shqetësim, dhe popullariteti i 2FA përmes SMS shpjegohet me "më pak shqetësim në krahasim me metodat e tjera" - marrja e kodeve një herë është e kuptueshme për përdoruesin.

Përdoruesit i lidhin shumë metoda 2FA me frikën se aksesi do të humbet. Çelësi fizik ose lista e fjalëkalimeve TAN mund të humbet ose vidhet. Unë personalisht kam pasur përvoja të këqija me Google Authenticator. Smartfoni im i parë me këtë aplikacion u prish - vlerësoni përpjekjet e mia për të rivendosur aksesin në llogaritë e mia. Një problem tjetër është kalimi në një pajisje të re. Google Authenticator nuk ka një opsion eksporti për arsye sigurie (nëse çelësat mund të eksportohen, çfarë sigurie ka?). Pasi i mbajta çelësat me dorë, dhe më pas vendosa që ishte më e lehtë ta lija telefonin inteligjent të vjetër në një kuti në një raft.

Metoda 2FA duhet të jetë:

  • I sigurt - vetëm ju dhe jo sulmuesit duhet të keni akses në llogarinë tuaj
  • E besueshme - ju keni akses në llogarinë tuaj sa herë që ju nevojitet
  • I përshtatshëm dhe i arritshëm - përdorimi i 2FA është i qartë dhe kërkon kohë minimale
  • I lirë

Ne besojmë se blockchain është zgjidhja e duhur.

Përdorni 2FA në blockchain

Për përdoruesin, 2FA në blockchain duket njësoj si marrja e kodeve një herë përmes SMS. Dallimi i vetëm është kanali i dorëzimit. Metoda për marrjen e një kodi 2FA varet nga ajo që ofron blockchain. Në projektin tonë (informacionet janë në profilin tim) ky është një aplikacion ueb, Tor, iOS, Android, Linux, Windows, MacOS.

Shërbimi gjeneron një kod një herë dhe ia dërgon të dërguarit në blockchain. Pastaj ndiqni klasikët: përdoruesi fut kodin e marrë në ndërfaqen e shërbimit dhe regjistrohet.

Lëvizni për të siguruar 2FA në blockchain

Në artikull Si funksionon një mesazher i decentralizuar në blockchain? Kam shkruar që blockchain siguron sigurinë dhe privatësinë e transmetimit të mesazhit. Për çështjen e dërgimit të kodeve 2FA, do të theksoj:

  • Një klik për të krijuar një llogari - pa telefona apo email.
  • Të gjitha mesazhet me 2 kode FA janë të koduara nga End-to-End curve25519xsalsa20poly1305.
  • Sulmi MITM është i përjashtuar - çdo mesazh me kodin 2FA është një transaksion në blockchain dhe është i nënshkruar nga Ed25519 EdDSA.
  • Mesazhi me kodin 2FA përfundon në bllokun e vet. Sekuenca dhe stampa kohore e blloqeve nuk mund të korrigjohen, dhe për këtë arsye rendi i mesazheve.
  • Nuk ka asnjë strukturë qendrore që kontrollon "autenticitetin" e një mesazhi. Kjo bëhet nga një sistem i shpërndarë nyjesh i bazuar në konsensus, dhe është në pronësi të përdoruesve.
  • Nuk mund të çaktivizohet - llogaritë nuk mund të bllokohen dhe mesazhet nuk mund të fshihen.
  • Hyni në kodet 2FA nga çdo pajisje në çdo kohë.
  • Konfirmimi i dërgimit të mesazhit me kodin 2FA. Shërbimi që dërgon fjalëkalimin një herë e di me siguri që ai është dorëzuar. Nuk ka butona "Dërgo përsëri".

Për të krahasuar me disa metoda të tjera 2FA, bëra një tabelë:

Lëvizni për të siguruar 2FA në blockchain

Përdoruesi merr një llogari në mesazherin blockchain për të marrë kodet në një sekondë - vetëm një frazë kalimi përdoret për t'u identifikuar. Prandaj, metodat e aplikimit mund të jenë të ndryshme: mund të përdorni një llogari për të marrë kode për të gjitha shërbimet, ose mund të krijoni një llogari të veçantë për secilin shërbim.

Ekziston edhe një shqetësim - llogaria duhet të ketë të paktën një transaksion. Në mënyrë që përdoruesi të marrë një mesazh të koduar me një kod, duhet të dini çelësin e tij publik dhe ai shfaqet në blockchain vetëm me transaksionin e parë. Kështu arritëm të dilnim prej saj: u dhamë atyre mundësinë të merrnin token falas në portofolin e tyre. Megjithatë, një zgjidhje më e mirë është të emërtoni llogarinë një çelës publik. (Për krahasim, ne kemi numrin e llogarisë U1467838112172792705 është një derivat i çelësit publik cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Për mesazherin kjo është më e përshtatshme dhe e lexueshme, por për sistemin për dërgimin e kodeve 2FA është një kufizim). Mendoj se në të ardhmen dikush do të marrë një vendim të tillë dhe do të zhvendosë “Përshtatshmërinë dhe Aksesueshmërinë” në zonën e gjelbër.

Çmimi i dërgimit të një kodi 2FA është vërtet i ulët - 0.001 ADM, tani është 0.00001 USD. Përsëri, ju mund të ngrini blockchain tuaj dhe ta bëni çmimin zero.

Si të lidhni 2FA në blockchain me shërbimin tuaj

Shpresoj se kam qenë në gjendje të interesoj disa lexues për të shtuar autorizimin e blockchain në shërbimet e tyre.

Unë do t'ju tregoj se si ta bëni këtë duke përdorur lajmëtarin tonë si shembull, dhe për analogji mund të përdorni një tjetër blockchain. Në aplikacionin demo 2FA ne përdorim postgresql10 për të ruajtur informacionin e llogarisë.

Fazat e lidhjes:

  1. Krijo një llogari në blockchain nga e cila do të dërgosh 2 kode FA. Do të merrni një frazë kalimi, e cila përdoret si një çelës privat për të enkriptuar mesazhet me kode dhe për të nënshkruar transaksione.
  2. Shtoni një skript në serverin tuaj për të gjeneruar kode 2FA. Nëse po përdorni tashmë ndonjë metodë tjetër 2FA me dorëzim të fjalëkalimit një herë, ju e keni përfunduar tashmë këtë hap.
  3. Shtoni një skript në serverin tuaj për të dërguar kode te përdoruesi në mesazherin e bllokut.
  4. Krijoni një ndërfaqe përdoruesi për dërgimin dhe futjen e një kodi 2FA. Nëse po përdorni tashmë ndonjë metodë tjetër 2FA me dorëzim të fjalëkalimit një herë, ju e keni përfunduar tashmë këtë hap.

1 Krijimi i llogarisë

Krijimi i një llogarie në blockchain do të thotë të gjenerosh një çelës privat, një çelës publik dhe një adresë llogarie të prejardhur.

Lëvizni për të siguruar 2FA në blockchain

Së pari, gjenerohet fraza e kalimit BIP39 dhe prej saj llogaritet hash-i SHA-256. Hash-i përdoret për të gjeneruar çelësin privat ks dhe çelësin publik kp. Nga çelësi publik, duke përdorur të njëjtin SHA-256 me përmbysje, marrim adresën në blockchain.

Nëse dëshironi të dërgoni 2 kode FA çdo herë nga një llogari e re, kodi i krijimit të llogarisë do të duhet të shtohet në server:

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

Në aplikacionin demo, ne e thjeshtuam atë - krijuam një llogari në aplikacionin në internet dhe dërguam kode prej tij. Në shumicën e rasteve, kjo është gjithashtu më e përshtatshme për përdoruesin: ai e di që shërbimi dërgon kode 2FA nga një llogari specifike dhe mund ta emërojë atë.

Lëvizni për të siguruar 2FA në blockchain

2 Gjenerimi i 2 kodeve FA

Duhet të krijohet një kod 2FA për çdo hyrje të përdoruesit. Ne përdorim bibliotekën i qetë, por ju mund të zgjidhni ndonjë tjetër.

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

Kontrollimi i vlefshmërisë së kodit 2FA të futur nga përdoruesi:

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

3 Dërgimi i kodit 2FA

Për të paraqitur një kod 2FA, mund të përdorni API-në e nyjës së bllokut, bibliotekën JS API ose konsolën. Në këtë shembull, ne përdorim tastierën - kjo është ndërfaqja e linjës së komandës, një mjet që thjeshton ndërveprimin me zinxhirin bllokues. Për të dërguar një mesazh me një kod 2FA, duhet të përdorni komandën send message konsol.

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

Një mënyrë alternative për të dërguar mesazhe është përdorimi i metodës send në bibliotekën JS API.

4 Ndërfaqja e përdoruesit

Përdoruesit duhet t'i jepet opsioni për të futur një kod 2FA, kjo mund të bëhet në mënyra të ndryshme në varësi të platformës së aplikacionit tuaj. Në shembullin tonë ky është Vue.

Lëvizni për të siguruar 2FA në blockchain

Kodi burimor për aplikacionin demo të vërtetimit me dy faktorë të blockchain mund të shihet në GitHub. Ekziston një lidhje në Readme me një demonstrim të drejtpërdrejtë për ta provuar atë.

Burimi: www.habr.com

Shto një koment