Kalisni në 2FA të sigurt në blockchain

Mesazhet SMS janë një nga mënyrat më të popullarizuara të autentifikimit me dy faktorë (2FA). Ato përdoren nga bankat, portofolat elektronike dhe kripto, kutitë e postës dhe shërbime të ndryshme; numri i përdoruesve të kësaj metode po afrohet në 100%.

Ky zhvillim ngre shqetësim për mua, sepse kjo metodë nuk është e sigurt. Riinçisja e numrit nga një SIM në një tjetër ka filluar që nga era e parë e celularëve - kështu rikuperohet numri kur humbet karta SIM. "Specialistët e vjedhjes së parave digjitale" e kuptuan: opsioni "përshkruese SIM" mund të përdoret në skemat mashtruese. Sepse ai që kontrollon kartën SIM mund të menaxhojë bankarinë online të tjetrit, portofolat elektronike dhe madje edhe kriptovalutat. Dhe të merrni numrin e një personi tjetër mund të realizohet nëpërmjet ryshfetit të një punonjësi të telekomit, mashtrimit ose dokumenteve të falsifikuara.

Kalisni në 2FA të sigurt në blockchain

Sikur janë zbuluar mijëra episode të SIM-swapping - kështu quhet kjo skemë mashtrimi. Dimensionet e katastrofës flasin për faktin se së shpejti bota do të heqë dorë nga 2FA përmes SMS-ve. Por kjo nuk po ndodh - studim raportohet se metoden 2FA e zgjedhin jo përdoruesit, por pronarët e shërbimeve.

Ne propozojmë përdorimin e një metode të sigurtë 2FA me dërgimin e kodave një herësh përmes blockchain-it dhe do të tregojmë se si pronari i shërbimit mund ta aktivizojë atë.

Numri është në miliona

Në vitin 2019, mashtrimi me SIM-swapping u rrit me 63% sipas të dhënave të policisë londineze, ndërsa "çmimi mesatar" i mashtruesit ishte 4,000 GBP. Nuk gjej statistika për Rusinë, megjithatë supozoj se ato janë akoma më keq.

SIM-swapping përdoret për të vjedhur llogaritë popullore në Twitter, Instagram, Facebook, VK, llogaritë bankare dhe së fundmi kanë arritur edhe kriptovalutat - raporton gazeta Times sipas fjalëve të sipërmarrësit të bitcoin, Joby Wicks. Rastet e njohura të vjedhjes së kriptovalutave përmes SIM-swapping janë shfaqur në media që nga viti 2016; në vitin 2019 u regjistrua një pikë kulminante.

NĂ« maj, prokuroria e SHBA nĂ« distriktin lindor tĂ« Miçiganit ngriti akuzat nĂ« njĂ« grup tĂ« ri tĂ« rinjsh nga 19 deri nĂ« 26 vjeç, ata supozohet se janĂ« pjesĂ« e njĂ« bande hakerash tĂ« quajtur “The Community” ("Komuniteti"). Banda akuzohet pĂ«r shtatĂ« sulme swapping, nga tĂ« cilat hakerĂ«t kanĂ« vjedhur kriptovaluta me njĂ« vlerĂ« mbi 2.4 milion dollarĂ«. NĂ« prill, njĂ« student nga Kalifornia, Joel Ortiz, u dĂ«nua me 10 vjet burg pĂ«r SIM-swapping; ai kishte marrĂ« nĂ« dorĂ« $7.5 milion nĂ« kriptovaluta.

Kalisni në 2FA të sigurt në blockchain
Foto e Joel Ortiz në konferencën për shtyp në universitet. Pas dy vjetësh, ai do të ndalohet për mashtrim kibernetik.

Principi i punës së SIM-swap-it

«Swap» do të thotë shkëmbim. Në të gjitha skemat e ngjashme, kriminelët e marrë telefonin e viktimës, zakonisht përmes ribotimit të kartës SIM, dhe e përdorin atë për të rikuperuar fjalëkalimin. Një SIM-swap tipik teorikisht duket kështu:

  1. Inteligjenca. KriminelĂ«t zbulojnĂ« tĂ« dhĂ«nat personale tĂ« viktimĂ«s: emri dhe telefoni. Ato mund tĂ« gjenden nĂ« burime tĂ« hapura (rrjete sociale, miq) ose tĂ« merren nga njĂ« ndihmĂ«s — njĂ« punonjĂ«s i operatorit celular.
  2. Bllokimi. Karta SIM e viktimës çaktivizohet; për këtë mjafton të telefononi në ndihmën teknike të ofruesit, të raportoni numrin dhe të thoni se telefoni është humbur.
  3. Kapja, transferimi i numrit në kartën SIM të tij. Zakonisht kjo bëhet gjithashtu përmes një ndihmësi në kompaninë telekomunikuese ose përmes falsifikimit të dokumenteve.

NĂ« jetĂ«n reale, gjithçka Ă«shtĂ« edhe mĂ« e keqe. KriminelĂ«t zgjedhin viktimĂ«n dhe pastaj ndjekin çdo ditĂ« vendndodhjen e telefonit — njĂ« kĂ«rkesĂ« pĂ«r informacion se abonenti ka kaluar nĂ« roaming kushton 1-2 cent. Sapo pronari i kartĂ«s SIM largohet jashtĂ« vendit, ata arrijnĂ« marrĂ«veshje me njĂ« menaxher nĂ« dyqan pĂ«r tĂ« lĂ«shuar njĂ« kartĂ« SIM tĂ« re. Kjo kushton rreth 50 dollarĂ« (kam gjetur informacione — nĂ« vende tĂ« ndryshme dhe nga ofrues tĂ« ndryshĂ«m nga 20 deri nĂ« 100 dollarĂ«), ndĂ«rsa menaxheri nĂ« rastin mĂ« tĂ« keq do tĂ« shkarkohet — pĂ«r kĂ«tĂ« nuk ka pĂ«rgjegjĂ«si.

Tani tĂ« gjitha SMS do tĂ« marrin kriminelĂ«t, ndĂ«rsa pronari i telefonit nuk do tĂ« mund tĂ« bĂ«jĂ« asgjĂ« pĂ«r kĂ«tĂ« — ai Ă«shtĂ« jashtĂ« vendit. Dhe mĂ« pas, tĂ« kĂ«qijtĂ« e kanĂ« qasje nĂ« tĂ« gjitha llogaritĂ« e viktimĂ«s dhe, nĂ«se dĂ«shirojnĂ«, ndryshojnĂ« fjalĂ«kalimet.

Shanset për të kthyer të vjedhurit

Bankat ndonjĂ«herĂ« shkojnĂ« nĂ« ndihmĂ« tĂ« viktimave dhe anulojnĂ« transferta nga llogaritĂ« e tyre. Prandaj Ă«shtĂ« e mundur tĂ« riktheni paratĂ« fiat, pĂ«rsa kohĂ« krimineli nuk Ă«shtĂ« gjetur. Por me portofolat e kriptomonedhave Ă«shtĂ« mĂ« e komplikuar — dhe teknikisht, dhe ligjĂ«risht. Deri tani, asnjĂ« bursĂ«/portofol nuk ka paguar kompensim viktimave tĂ« swap-it.

Nëse të dëmtuarit duan të mbrojnë paratë e tyre në gjykatë, ata akuzojnë operatorin: ai krijoi kushte për vjedhjen e parave nga llogaria. Kështu veproi Michael Terpin, i cili humbi për shkak të swap-it 224 milion dollarë. Tani ai është duke gjykuar kompaninë telekomunikuese AT&T.

Kalisni në 2FA të sigurt në blockchain

As of now, no country has effective measures to legally protect cryptocurrency owners. It is impossible to insure your capital or receive compensation for its loss. Therefore, preventing a swapping attack is easier than dealing with its consequences. The most obvious way is to use a more reliable 'second factor' for 2FA.

SIM swapping is not the only problem with 2FA via SMS.

Confirmation codes sent via SMS are inherently insecure from a technical standpoint. Messages can be intercepted due to unavoidable vulnerabilities in the Signaling System 7 (SS7). SMS-based 2FA has officially been deemed unsafe (the National Institute of Standards and Technology in the USA states this in its Guide to Digital Authentication.).

Moreover, the presence of 2FA often gives users a false sense of security, leading them to choose weaker passwords. Consequently, this type of authentication does not complicate but rather facilitates unauthorized access to accounts.

Additionally, SMS messages often arrive with significant delays or may not arrive at all.

Other 2FA methods

Certainly, smartphones and SMS are not the only options for 2FA. There are other methods available. For instance, one-time TAN codes: a primitive but functional approach — still used by some banks. There are systems that utilize biometric data: fingerprints, retina scans. Another option, which appears to be a reasonable compromise between convenience, security, and cost, is specialized 2FA applications: RSA Token, Google Authenticator. There are also physical keys and other methods.

In theory, everything seems logical and secure. However, in practice, modern 2FA solutions have issues, and as a result, reality deviates from expectations.

Sipas hulumtimi, the use of 2FA is fundamentally inconvenient, and the popularity of SMS-based 2FA is attributed to the 'less inconvenience compared to other methods' — obtaining one-time codes is straightforward for the user.

Shumë mënyra 2FA përdoruesit i lidhin me frikën se qasja do të humbasë. Një çelës fizik ose një listë fjalëkalish TAN mund të humbasin ose të vidhen. Unë personalisht kam përvojë negative me përdorimin e Google Authenticator. Telefoni im i parë me këtë aplikacion u prish - të vlerësoni përpjekjet e mia për të rikuperuar qasjen në llogaritë. Problemi tjetër është kalimi në një pajisje të re. Google Authenticator nuk ka mundësi eksporti për shkak të arsyesh sigurie (nëse çelësat mund të eksportohen, çfarë sigurie është kjo?). Një herë kam transferuar çelësat manualisht, dhe më pas vendosa se ishte më e lehtë të mbaja telefonin e vjetër në kutinë mbi raft.

Metoda 2FA duhet të jetë:

  • E sigurt - vetĂ«m ju duhet tĂ« keni qasje nĂ« llogari, jo hakerĂ«t
  • E besueshme - ju duhet tĂ« keni qasje nĂ« llogarinĂ« pĂ«rherĂ« kur ju nevojitet
  • E lehtĂ« dhe e arritshme - pĂ«rdorimi i 2FA Ă«shtĂ« i qartĂ« dhe merr minimumin e kohĂ«s
  • I lirĂ«

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

Përdorni 2FA në blockchain

Për përdoruesin, 2FA në blockchain duket si marrja e kodëve të njëhershëm përmes SMS. Dallimi është vetëm në kanalin e dorëzimit. Metoda e marrjes së kodit 2FA varet nga ajo që ofron blockchain. Në projektin tonë (informacioni është në profilin tim) është një aplikacion web, Tor, iOS, Android, Linux, Windows, MacOS.

Shërbimi gjeneron një kod të njëhershëm dhe e dërgon atë në mesazherin në blockchain. Më pas, sipas klasikes: përdoruesi fut kodin e marrë në ndërfaqen e shërbimit dhe autorizohet.

Kalisni në 2FA të sigurt në blockchain

Në artikullin Si funksionon një mesazh i decentralizuar në blockchain Kam shkruar se blockchain siguron siguri dhe privatësi të transmetimit të mesazheve. Sa i përket dërgimit të kodëve 2FA, do të theksoj:

  • NjĂ« klikim pĂ«r krijimin e llogarisĂ« - pa telefona dhe email.
  • TĂ« gjitha mesazhet me kodet 2FA janĂ« tĂ« koduara End-to-End curve25519xsalsa20poly1305.
  • Sulmi MITM Ă«shtĂ« i pamundur - çdo mesazh me kodin 2FA Ă«shtĂ« njĂ« transaksion nĂ« blockchain dhe nĂ«nshkruhet me Ed25519 EdDSA.
  • Mesazhi me kodin 2FA kalon nĂ« bllokun e tij. Skuadra dhe koha e blloqeve nuk mund tĂ« ndryshohen, kĂ«shtu qĂ« as rendi i mesazheve.
  • Nuk ka njĂ« strukturĂ« qendrore qĂ« bĂ«n kontrollin e “besueshmĂ«risĂ«â€ sĂ« mesazheve. Kjo bĂ«het nga sistemi i shpĂ«rndarĂ« i nodesh nĂ« bazĂ« tĂ« konsensusit, dhe ai i pĂ«rket pĂ«rdoruesve.
  • PamundĂ«sia pĂ«r tĂ« çaktivizuar - llogaritĂ« nuk mund tĂ« bllokohen dhe mesazhet tĂ« fshihen.
  • Qasja nĂ« kodet 2FA nga çdo pajisje nĂ« çdo kohĂ«.
  • Konfirmimi i dorĂ«zimit tĂ« mesazhit me kodin 2FA. ShĂ«rbimi qĂ« dĂ«rgon fjalĂ«kalim tĂ« njĂ«hershĂ«m di saktĂ«sisht se ai Ă«shtĂ« dorĂ«zuar. Nuk ka butonash “DĂ«rgo pĂ«rsĂ«ri”.

Për krahasim me disa metoda të tjera të 2FA, unë kam përgatitur një tabelë:

Kalisni në 2FA të sigurt në blockchain

Një llogari në mesazhierin blockchain për të marrë kodet përdoruesi e fiton për një sekondë - për hyrje përdoret vetëm një frazë kalimi. Prandaj, mënyrat e aplikimit mund të jenë të ndryshme: mund të përdoret një llogari për të marrë kodet për të gjitha shërbimet, ose mund të krijoni një llogari të veçantë për secilin shërbim.

Ka dhe një ndjesi të pakëndshme - llogaria duhet të ketë të paktën një transaksion. Për qëllim që përdoruesi të marrë një mesazh të koduar me kodin, duhet të dihet çelësi i tij publik, i cili shfaqet në blockchain vetëm me transaksionin e parë. Ne e zgjidhëm këtë duke mundësuar marrjen e tokenëve falas në portofol. Megjithatë, një zgjidhje më e saktë do të ishte të emërohej llogaria me çelësin publik. (Për krahasim, numri i llogarisë sonë U1467838112172792705 është një derivat i çelësit publik cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Për mesazhierin, kjo është më e lehtë dhe më e lexueshme, por për sistemin e dërgimit të kodëve 2FA - është një kufizim). Mendoj se në të ardhmen dikush do ta zbatojë një zgjidhje të tillë dhe do ta çojë "Lehtësinë dhe aksesin" në zonën e gjelbër.

Kostoja e dërgimit të kodit 2FA është realisht e ulët - 0.001 ADM, tani kjo është 0.00001 USD. Po ashtu, është e mundur të ngrihet blockchain tuaj dhe të bëhet çmimi zero.

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

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

Do t'ju tregoj se si ta bëni këtë në shembullin e mesazhierit tonë, dhe me të njëjtën logjikë mund të përdorni edhe blockchain tjetër. Në aplikacionin demo 2FA ne përdorim postgresql10 për të ruajtur informacionin mbi llogaritë.

Hapat e lidhjes:

  1. Krijoni një llogari në blockchain, nga e cila do të dërgoni kodet 2FA. Do të merrni një frazë kalimi, e cila përdoret si çelësi privat për enkriptimin e mesazheve me kodet dhe për nënshkrimin e transaksioneve.
  2. Shtoni në serverin tuaj një skript për gjenerimin e kodëve 2FA. Nëse tashmë përdorni ndonjë metodë tjetër 2FA për dërgimin e fjalëkalimeve të një përdorimi, ky hap tashmë është përfunduar.
  3. Shtoni në serverin tuaj një skript për dërgimin e kodëve përdoruesit në mesazhierin blockchain.
  4. Krijoni një ndërfaqe përdoruesi për dërgimin dhe hyrjen e kodit 2FA. Nëse tashmë përdorni ndonjë metodë tjetër 2FA për dërgimin e fjalëkalimeve të një përdorimi, ky hap tashmë është përfunduar.

1 Krijimi i llogarisë

Krijimi i llogarisë në blockchain përfshin gjenerimin e një çelësi privat, një çelësi publik dhe një adrese të derivuar prej tij.

Kalisni në 2FA të sigurt në blockchain

Fillimisht gjenerohet një frazë kalimi BIP39, nga e cila llogaritet një hash SHA-256. Hashi përdoret për të gjeneruar çelësin privat ks dhe çelësin publik kp. Nga çelësi publik, me të njëjtin SHA-256 me inversionin e tij, marrim adresën në blockchain.

Nëse dëshironi të dërgoni kodet 2FA çdo herë nga një llogari e re, kodi për krijimin e llogarisë 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 kemi lehtĂ«suar — krijuam njĂ« llogari nĂ« aplikacionin web dhe dĂ«rgojmĂ« kodet prej saj. NĂ« shumicĂ«n e rasteve, kjo Ă«shtĂ« mĂ« e lehtĂ« pĂ«r pĂ«rdoruesin: ai e di se shĂ«rbimi dĂ«rgon kodet 2FA nga njĂ« llogari specifike dhe mund ta emĂ«rtojĂ« atĂ«.

Kalisni në 2FA të sigurt në blockchain

2 Generimi i kodeve 2FA

Kodi 2FA duhet të gjenerohet për çdo login të përdoruesit. Ne përdorim bibliotekën speakeasy, por mund të zgjidhni çfarëdo 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Ă« dĂ«rguar kodin 2FA mund tĂ« pĂ«rdorni API-nĂ« e nodit tĂ« blockchain-it, bibliotekĂ«n JS API ose konsolĂ«n. NĂ« kĂ«tĂ« shembull ne pĂ«rdorim konsolĂ«n — kjo Ă«shtĂ« njĂ« NdĂ«rfaqe e LinjĂ«s sĂ« KomandĂ«s, njĂ« utilitar qĂ« lehtĂ«son ndĂ«rveprimin me blockchain-in. PĂ«r tĂ« dĂ«rguar njĂ« mesazh me kodin 2FA, duhet tĂ« pĂ«rdorni komandĂ«n send message tĂ« konsolĂ«s.

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Ă« tĂ« pĂ«rdorni metodĂ«n dĂ«rgo nĂ« bibliotekĂ«n JS API.

4 Ndërfaqja e përdoruesit

Përdoruesi duhet të ketë mundësinë të shtojë kodin 2FA, dhe kjo mund të bëhet në mënyra të ndryshme në varësi të platformës së aplikacionit tuaj. Në shembullin tonë është Vue.

Kalisni në 2FA të sigurt në blockchain

Kodi burimor i aplikacionit demonstrues për autentifikim me dy faktorë në blockchain mund të shqyrtohet në GitHub. Në Readme ka një lidhje për Live demo, për ta provuar.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster