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;
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.
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ë
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 -
Në maj, Zyra e Prokurorit të SHBA për Distriktin Lindor të Miçiganit
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:
- 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.
- 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.
- 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
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ë
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
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.
Në artikull
- 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ë:
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:
- 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.
- 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.
- Shtoni një skript në serverin tuaj për të dërguar kode te përdoruesi në mesazherin e bllokut.
- 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.
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ë.
2 Gjenerimi i 2 kodeve FA
Duhet të krijohet një kod 2FA për çdo hyrje të përdoruesit. Ne përdorim bibliotekën
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.
Kodi burimor për aplikacionin demo të vërtetimit me dy faktorë të blockchain mund të shihet në
Burimi: www.habr.com