Wechseln Sie zu sicherer 2FA auf der Blockchain

SMS-Nachrichten sind die beliebteste Methode zur Zwei-Faktor-Authentifizierung (2FA). Sie wird von Banken, elektronischen und Krypto-Wallets, E-Mail-Konten und verschiedenen Diensten genutzt; Die Zahl der Nutzer dieser Methode nÀhert sich 100%.

Ich empfinde diese Entwicklungen als empörend, da diese Methode unsicher ist. NummernĂŒbertragungen von einer SIM-Karte auf eine andere gibt es seit den AnfĂ€ngen der Mobiltelefonie – so wird die Nummer nach dem Verlust der SIM-Karte wiederhergestellt. „Spezialisten fĂŒr den Diebstahl digitaler WĂ€hrungen“ haben erkannt, dass die Option „SIM-Karten-Reaktivierung“ in betrĂŒgerischen Schemata verwendet werden kann. Denn wer die SIM-Karte kontrolliert, kann auch auf fremdes Online-Banking, elektronische Wallets und sogar KryptowĂ€hrungen zugreifen. Und um die Nummer einer anderen Person zu erlangen, kann man einen Mitarbeiter eines Telekommunikationsunternehmens bestechen oder durch TĂ€uschung oder gefĂ€lschte Dokumente vorgehen.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Tausende von SIM-Swap-VorfĂ€llen wurden aufgedeckt – so nennt man dieses Betrugsschema. Das Ausmaß dieser Katastrophe deutet darauf hin, dass die Welt bald von SMS-2FA Abstand nehmen wird. Doch das passiert nicht – in der Untersuchung wird berichtet, dass die Wahl der 2FA-Methode nicht von den Nutzern, sondern von den Dienstanbieter getroffen wird.

Wir empfehlen, eine sichere Methode zur 2FA zu verwenden, bei der Einmalcodes ĂŒber die Blockchain zugestellt werden, und erklĂ€ren, wie der Dienstanbieter dies aktivieren kann.

Es geht um Millionen

Im Jahr 2019 stieg die Betrugsrate durch SIM-Swap um 63 % laut den Daten der Londoner Polizei, wĂ€hrend sich „der durchschnittliche Betrag“ des TĂ€ters auf 4.000 GBP belĂ€uft. Statistiken fĂŒr Russland habe ich nicht gefunden, vermute aber, dass sie noch schlimmer sind.

SIM-Swap wird verwendet, um beliebte Konten von Twitter, Instagram, Facebook, VK, Bankkonten zu stehlen, und kĂŒrzlich wurden auch KryptowĂ€hrungen angegriffen – berichtet die Times laut dem Bitcoin-Unternehmer Joby Wicks. Aufsehen erregende FĂ€lle von KryptowĂ€hrungsdiebstahl durch SIM-Swap sind seit 2016 in der Presse; 2019 erreichte dies einen echten Höhepunkt.

Im Mai erhob die Staatsanwaltschaft der USA im östlichen Bezirk von Michigan Anklage Neun jungen Menschen im Alter von 19 bis 26 Jahren: Sie sollen zu einer Hackerbande namens „The Community“ gehören. Der Bande werden sieben SIM-Swap-Angriffe zur Last gelegt, bei denen Hacker KryptowĂ€hrungen im Wert von ĂŒber 2,4 Millionen US-Dollar erbeuteten. Im April wurde der Student aus Kalifornien, Joel Ortiz, zu 10 Jahren GefĂ€ngnis verurteilt fĂŒr SIM-Swapping; seine Beute betrug 7,5 Millionen US-Dollar in KryptowĂ€hrungen.

Wechseln Sie zu sicherer 2FA auf der Blockchain
Foto von Joel Ortiz auf einer Pressekonferenz an der UniversitÀt. Zwei Jahre spÀter wird er wegen Cyberbetrugs festgenommen.

Funktionsweise des SIM-Swappings

„Swapping“ bedeutet Austausch. Bei all diesen Schemas nehmen Kriminelle meist die Telefonnummer des Opfers an sich, normalerweise durch die Neubestellung einer SIM-Karte, und nutzen diese, um das Passwort zurĂŒckzusetzen. Ein typisches SIM-Swapping sieht in der Theorie so aus:

  1. AufklĂ€rung. Die BetrĂŒger erfahren die personenbezogenen Daten des Opfers: Name und Telefonnummer. Diese lassen sich in offenen Quellen (Soziale Netzwerke, Freunde) finden oder von einem Komplizen – einem Mitarbeiter des Mobilfunkanbieters – erhalten.
  2. Deaktivierung. Die SIM-Karte des Opfers wird deaktiviert; dafĂŒr reicht es, den Kundenservice des Anbieters anzurufen, die Nummer zu nennen und zu sagen, dass das Telefon verloren ging.
  3. Übernahme, Übertragung der Nummer auf ihre SIM-Karte. Dies geschieht normalerweise ebenfalls ĂŒber einen Komplizen im Telekommunikationsunternehmen oder durch Vorlage gefĂ€lschter Dokumente.

Im echten Leben ist alles noch schlimmer. Die TĂ€ter wĂ€hlen ein Opfer aus und ĂŒberwachen dann den Standort des Telefons tĂ€glich – ein Anfrage auf Informationen, dass der Abonnent ins Roaming gewechselt hat, kostet 1-2 Cent. Sobald der Besitzer der SIM-Karte ins Ausland fĂ€hrt, vereinbaren sie mit einem Manager im GeschĂ€ft die Ausgabe einer neuen SIM-Karte. Dies kostet etwa 50 US-Dollar (ich habe Informationen gefunden – in verschiedenen LĂ€ndern und bei verschiedenen Anbietern von 20 bis 100 US-Dollar), wobei der Manager im schlimmsten Fall gefeuert wird – dafĂŒr gibt es keine Verantwortung.

Jetzt erhalten die TĂ€ter alle SMS, und der Besitzer des Telefons kann nichts dagegen unternehmen – er ist im Ausland. Danach erhalten die Verbrecher Zugang zu allen Konten des Opfers und können bei Bedarf die Passwörter Ă€ndern.

Chancen, das Gestohlene zurĂŒckzubekommen

Banken kommen manchmal den Opfern entgegen und stornieren Überweisungen von ihren Konten. Daher gelingt es, Fiat-Geld zurĂŒckzubekommen, auch wenn der TĂ€ter nicht gefunden wird. Aber bei Krypto-Wallets ist das komplizierter – und technisch, und gesetzlich. Bisher hat keine Börse/Wallet EntschĂ€digungen an die Opfer des Swappings gezahlt.

Wenn die GeschĂ€digten ihr Geld vor Gericht vertreten wollen, machen sie den Betreiber verantwortlich: Er hat die Bedingungen fĂŒr den Diebstahl von Geld vom Konto geschaffen. So handelte Michael Terpin, der durch Swapping 224 Millionen USD verloren hat. Jetzt verklagt er das Telekommunikationsunternehmen AT&T.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Bislang hat kein Staat funktionierende Systeme, um die Besitzer von KryptowĂ€hrungen gesetzlich zu schĂŒtzen. Es ist unmöglich, sein Kapital zu versichern oder eine EntschĂ€digung fĂŒr dessen Verlust zu erhalten. Daher ist es einfacher, einen Swapping-Angriff zu verhindern, als mit seinen Folgen zu kĂ€mpfen. Die offensichtlichste Methode ist, einen zuverlĂ€ssigeren "zweiten Faktor" fĂŒr die 2FA zu verwenden.

SIM-Swapping ist nicht das einzige Problem bei 2FA ĂŒber SMS.

BestĂ€tigungscodes in SMS sind aus technischer Sicht unsicher. Nachrichten können aufgrund unvermeidbarer SicherheitslĂŒcken im Signalisierungssystem Signaling System 7 (SS7) abgefangen werden. 2FA ĂŒber SMS gilt offiziell als unsicher (das National Institute of Standards and Technology der USA sagt dies in seinem Leitfaden zur digitalen Authentifizierung).

. Dabei vermittelt das Vorhandensein von 2FA oft dem Benutzer ein GefĂŒhl von falscher Sicherheit, und er wĂ€hlt ein einfacheres Passwort. Daher erschwert solche Authentifizierung den Zugriff fĂŒr den Angreifer nicht, sondern erleichtert ihn.

Außerdem kommen SMS hĂ€ufig mit großer Verzögerung an oder gar nicht.

Andere Methoden der 2FA

NatĂŒrlich ist die Welt der Smartphones und SMS nicht die einzige Möglichkeit. Es gibt auch andere Methoden fĂŒr 2FA. Zum Beispiel Einmal-TAN-Codes: eine primitive, aber funktionierende Methode – sie wird immer noch von einigen Banken genutzt. Es gibt Systeme, die biometrische Daten verwenden: FingerabdrĂŒcke, Iris-Scans. Eine weitere Option, die als sinnvoller Kompromiss in Bezug auf Benutzerfreundlichkeit, Sicherheit und Preis erscheint, sind spezielle 2FA-Anwendungen: RSA Token, Google Authenticator. Außerdem gibt es physische SchlĂŒssel und andere Methoden.

Theoretisch erscheint alles logisch und sicher. Aber in der Praxis haben moderne 2FA-Lösungen Probleme, und deshalb weicht die RealitÀt von den Erwartungen ab.

Laut Forschung, die Nutzung von 2FA ist im Prinzip eine Unannehmlichkeit, und die Beliebtheit von 2FA ĂŒber SMS wird mit "geringerem Unannehmlichkeit im Vergleich zu anderen Methoden" erklĂ€rt – das Empfangen von Einmal-Codes ist dem Benutzer klar.

Viele Benutzer verbinden 2FA-Methoden mit der Angst, den Zugriff zu verlieren. Ein physischer SchlĂŒssel oder eine TAN-Liste kann verloren gehen oder gestohlen werden. Ich persönlich habe negative Erfahrungen mit Google Authenticator gemacht. Mein erster Smartphone mit dieser App ist kaputt gegangen – schĂ€tzen Sie meine MĂŒhen, den Zugriff auf meine Konten wiederherzustellen. Ein weiteres Problem ist der Wechsel auf ein neues GerĂ€t. Google Authenticator hat aus SicherheitsgrĂŒnden keine Exportmöglichkeit (wenn SchlĂŒssel exportiert werden können, wo ist dann die Sicherheit?). Einmal habe ich die SchlĂŒssel manuell ĂŒbertragen, und dann beschlossen, es sei einfacher, das alte Smartphone in der Schachtel im Regal zu lassen.

Die 2FA-Methode sollte sein:

  • Sicher – Nur Sie sollten Zugriff auf Ihr Konto haben, nicht die Angreifer.
  • ZuverlĂ€ssig – Sie sollten immer dann Zugriff auf Ihr Konto erhalten, wenn Sie es benötigen.
  • Bequem und zugĂ€nglich – Die Nutzung von 2FA sollte verstĂ€ndlich und unkompliziert sein.
  • GĂŒnstig.

Wir glauben, dass Blockchain eine geeignete Lösung ist.

Verwenden Sie 2FA auf der Blockchain.

FĂŒr den Benutzer sieht 2FA auf der Blockchain genauso aus wie der Erhalt von Einmalcodes per SMS. Der einzige Unterschied liegt im Zustellkanal. Die Art und Weise, wie der 2FA-Code empfangen wird, hĂ€ngt von den Angeboten der Blockchain ab. In unserem Projekt (Informationen finden Sie in meinem Profil) handelt es sich um eine Webanwendung, Tor, iOS, Android, Linux, Windows, MacOS.

Der Dienst generiert einen Einmalcode und sendet ihn an den Messenger auf der Blockchain. Danach folgt das klassische Verfahren: Der Benutzer gibt den erhaltenen Code im Interface des Dienstes ein und authentifiziert sich.

Wechseln Sie zu sicherer 2FA auf der Blockchain

In dem Artikel Wie funktioniert der dezentrale Messenger auf der Blockchain? Ich habe gesagt, dass die Blockchain Sicherheit und PrivatsphĂ€re bei der NachrichtenĂŒbertragung gewĂ€hrleistet. Zum Thema der Sendung von 2FA-Codes möchte ich hervorheben:

  • Ein Klick zur Erstellung eines Kontos – keine Telefonnummern und E-Mails erforderlich.
  • Alle Nachrichten mit 2FA-Codes werden Ende-zu-Ende mit curve25519xsalsa20poly1305 verschlĂŒsselt.
  • MITM-Angriffe sind ausgeschlossen – jede Nachricht mit einem 2FA-Code ist eine Transaktion in der Blockchain und wird mit Ed25519 EdDSA signiert.
  • Die Nachricht mit dem 2FA-Code gelangt in ihren Block. Die Reihenfolge und der Zeitstempel der Blöcke können nicht geĂ€ndert werden, und somit auch nicht die Reihenfolge der Nachrichten.
  • Es gibt keine zentrale Struktur, die die "Echtheit" der Nachrichten ĂŒberprĂŒft. Das erfolgt durch ein verteiltes System von Knoten auf der Basis von Konsens, das den Benutzern gehört.
  • Die Unmöglichkeit, das Konto zu deaktivieren – Konten können nicht gesperrt und Nachrichten nicht gelöscht werden.
  • Zugriff auf 2FA-Codes von jedem GerĂ€t zu jeder Zeit.
  • BestĂ€tigung der Lieferung einer Nachricht mit dem 2FA-Code. Der Dienst, der das Einmalpasswort sendet, weiß genau, dass es zugestellt wurde. Keine SchaltflĂ€chen „Erneut senden“.

Zum Vergleich mit einigen anderen 2FA-Methoden habe ich eine Tabelle erstellt:

Wechseln Sie zu sicherer 2FA auf der Blockchain

Das Konto im Blockchain-Messenger, um Codes zu erhalten, wird in Sekundenschnelle erstellt – zum Einloggen wird nur die Passphrase verwendet. Daher können die Anwendungsmöglichkeiten unterschiedlich sein: Man kann ein Konto nutzen, um Codes fĂŒr alle Dienste zu erhalten, oder fĂŒr jeden Dienst ein eigenes Konto erstellen.

Es gibt jedoch auch eine Unannehmlichkeit – das Konto muss wenigstens eine Transaktion haben. Damit der Benutzer eine verschlĂŒsselte Nachricht mit dem Code erhĂ€lt, muss er seinen öffentlichen SchlĂŒssel kennen, und dieser erscheint in der Blockchain erst mit der ersten Transaktion. Wir haben uns so beholfen: Wir haben die Möglichkeit gegeben, kostenlose Token im Wallet zu erhalten. Eine besser Lösung wĂ€re jedoch, das Konto mit dem öffentlichen SchlĂŒssel zu benennen. (Zum Vergleich hat unsere Kontonummer U1467838112172792705 ist ein Derivat des öffentlichen SchlĂŒssels cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. FĂŒr den Messenger ist das praktischer und lesbarer, aber fĂŒr das System zum Versenden von 2FA-Codes ist es eine EinschrĂ€nkung). Ich denke, in Zukunft wird jemand eine solche Lösung entwickeln und „Komfort und ZugĂ€nglichkeit“ in die grĂŒne Zone ĂŒbertragen.

Der Preis fĂŒr das Versenden eines 2FA-Codes ist tatsĂ€chlich niedrig – 0,001 ADM, das sind aktuell 0,00001 USD. Man könnte auch seine eigene Blockchain aufbauen und den Preis auf null setzen.

Wie man 2FA auf der Blockchain mit Ihrem Service verbindet

Ich hoffe, ich konnte einige Leser interessieren, um die Blockchain-Authentifizierung in ihre Dienste zu integrieren.

Ich werde erklĂ€ren, wie man das am Beispiel unseres Messengers macht, und analog können Sie auch eine andere Blockchain nutzen. In der Demo-Anwendung fĂŒr 2FA verwenden wir postgresql10, um Informationen ĂŒber die Konten zu speichern.

Schritte zur Anbindung:

  1. Erstellen Sie ein Konto in der Blockchain, von dem aus Sie 2FA-Codes senden werden. Sie erhalten eine Passphrase, die als privater SchlĂŒssel zum VerschlĂŒsseln von Nachrichten mit Codes und zum Signieren von Transaktionen verwendet wird.
  2. FĂŒgen Sie Ihrem Server ein Skript zur Generierung von 2FA-Codes hinzu. Wenn Sie bereits eine andere Methode zur 2FA mit der Zustellung von Einmalpasswörtern verwenden, ist dieser Schritt bereits abgeschlossen.
  3. FĂŒgen Sie Ihrem Server ein Skript zum Versenden von Codes an Benutzer in den Blockchain-Messenger hinzu.
  4. Erstellen Sie eine BenutzeroberflÀche zum Senden und Eingeben des 2FA-Codes. Wenn Sie bereits eine andere Methode zur 2FA mit der Zustellung von Einmalpasswörtern verwenden, ist dieser Schritt bereits abgeschlossen.

1 Konto erstellen

Die Erstellung eines Kontos in der Blockchain beinhaltet die Generierung eines privaten SchlĂŒssels, eines öffentlichen SchlĂŒssels und einer davon abgeleiteten Adresse.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Zuerst wird eine BIP39-Passphrase generiert, aus der ein SHA-256-Hash berechnet wird. Der Hash wird zur Generierung des privaten SchlĂŒssels ks und des öffentlichen SchlĂŒssels kp verwendet. Aus dem öffentlichen SchlĂŒssel erhalten wir mit demselben SHA-256 durch Inversion die Adresse in der Blockchain.

Wenn Sie 2FA-Codes jedes Mal von einem neuen Konto aus senden möchten, muss der Code zur Erstellung des Kontos auf den Server hinzugefĂŒgt werden:

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 der Demoversion haben wir es vereinfacht – wir haben ein Konto in der Webanwendung erstellt und versenden die Codes von dort. In den meisten FĂ€llen ist das auch fĂŒr den Benutzer bequemer: Er weiß, dass der Dienst 2FA-Codes von einem bestimmten Konto sendet und kann es benennen.

Wechseln Sie zu sicherer 2FA auf der Blockchain

2 Generierung der 2FA-Codes

Der 2FA-Code muss fĂŒr jeden Benutzer-Login generiert werden. Wir verwenden die Bibliothek speakeasy, aber Sie können jede andere wĂ€hlen.

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

ÜberprĂŒfung der GĂŒltigkeit des vom Benutzer eingegebenen 2FA-Codes:

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

3 Versenden des 2FA-Codes

Zur Übermittlung des 2FA-Codes kann die API des Blockchain-Knotens, die JS API-Bibliothek oder die Konsole verwendet werden. In diesem Beispiel nutzen wir die Konsole – das ist die Command Line Interface, ein Tool, das die Interaktion mit der Blockchain erleichtert. Um eine Nachricht mit dem 2FA-Code zu senden, muss der Befehl verwendet werden send message der 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);

Eine alternative Methode zur Übermittlung von Nachrichten ist die Nutzung der Methode send in der JS API-Bibliothek.

4 BenutzeroberflÀche

Dem Benutzer muss die Eingabe des 2FA-Codes ermöglicht werden, was auf verschiedene Arten erfolgen kann, abhÀngig von der Plattform Ihrer Anwendung. In unserem Beispiel ist dies Vue.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Den Quellcode der Demo-Anwendung zur Zwei-Faktor-Authentifizierung auf der Blockchain finden Sie in GitHub. Im Readme gibt es einen Link zur Live-Demo, um es auszuprobieren.

Quelle: habr.com

60GB SSD 8Gb DDR4