Τα μηνύματα SMS είναι η πιο δημοφιλής μέθοδος ελέγχου ταυτότητας δύο παραγόντων (2FA). Χρησιμοποιείται από τράπεζες, ηλεκτρονικά και κρυπτογραφικά πορτοφόλια, γραμματοκιβώτια και κάθε είδους υπηρεσίες. .
Αυτή η εξέλιξη των γεγονότων με κάνει να αγανακτώ, γιατί αυτή η μέθοδος δεν είναι ασφαλής. Η εκ νέου αντιστοίχιση ενός αριθμού από μια κάρτα SIM σε άλλη ξεκίνησε στην αρχή της εποχής του κινητού - έτσι αποκαθίσταται ένας αριθμός όταν χάνεται μια κάρτα SIM. «Ειδικοί στην κλοπή ψηφιακού χρήματος» έχουν συνειδητοποιήσει ότι η επιλογή «ξαναγράψτε την κάρτα SIM» μπορεί να χρησιμοποιηθεί σε δόλια συστήματα. Σε τελική ανάλυση, όποιος ελέγχει την κάρτα SIM μπορεί να ελέγξει την ηλεκτρονική τραπεζική, τα ηλεκτρονικά πορτοφόλια, ακόμη και τα κρυπτονομίσματα κάποιου άλλου. Και μπορείτε να αποκτήσετε τον αριθμό ενός άλλου ατόμου δωροδοκώντας έναν υπάλληλο τηλεπικοινωνιών, χρησιμοποιώντας εξαπάτηση ή πλαστά έγγραφα.

Χιλιάδες υποθέσεις ανταλλαγής SIM έχουν αποκαλυφθεί, όπως ονομάστηκε το δόλιο σχέδιο. Το μέγεθος της καταστροφής υποδηλώνει ότι ο κόσμος σύντομα θα εγκαταλείψει το 2FA μέσω SMS. Αλλά αυτό δεν συμβαίνει - μέσα Λένε ότι δεν είναι οι χρήστες που επιλέγουν τη μέθοδο 2FA, αλλά οι ιδιοκτήτες υπηρεσιών.
Προσφέρουμε τη χρήση μιας ασφαλούς μεθόδου 2FA με παράδοση κωδικών μίας χρήσης μέσω blockchain και θα σας πούμε πώς μπορεί να τη συνδέσει ο κάτοχος της υπηρεσίας.
Ο αριθμός είναι σε εκατομμύρια
Η απάτη για ανταλλαγή SIM αυξήθηκε κατά 2019% το 63, σύμφωνα με τη Μητροπολιτική Αστυνομία, με τον μέσο «έλεγχο» του απατεώνα να είναι 4,000 λίρες. Δεν βρήκα στατιστικά στοιχεία στη Ρωσία, αλλά υποθέτω ότι είναι ακόμη χειρότερα.
Η ανταλλαγή SIM χρησιμοποιείται για την κλοπή δημοφιλών λογαριασμών Twitter, Instagram, Facebook, VK, τραπεζικών λογαριασμών και πρόσφατα έχουν φτάσει ακόμη και σε κρυπτονομίσματα — σύμφωνα με τον επιχειρηματία του Bitcoin Joby Weeks. Περιπτώσεις κλοπής κρυπτονομισμάτων υψηλού προφίλ με ανταλλαγή SIM έχουν κάνει την εμφάνισή τους στον Τύπο από το 2016. Το 2019 ήταν η πραγματική κορύφωση.
Τον Μάιο, το Γραφείο του Εισαγγελέα των ΗΠΑ για την Ανατολική Περιφέρεια του Μίσιγκαν εννέα νεαροί άντρες μεταξύ 19 και 26 ετών: πιστεύεται ότι είναι μέρος μιας συμμορίας χάκερ που ονομάζεται «The Community». Η συμμορία κατηγορείται για επτά επιθέσεις ανταλλαγής, οι οποίες είχαν ως αποτέλεσμα οι χάκερ να κλέψουν κρυπτονομίσματα αξίας άνω των 2,4 εκατομμυρίων δολαρίων. Και τον Απρίλιο, ο φοιτητής από την Καλιφόρνια Joel Ortiz καταδικάστηκε σε 10 χρόνια φυλάκιση για ανταλλαγή SIM. Η απόσυρσή του ανήλθε σε 7.5 εκατομμύρια δολάρια σε κρυπτονομίσματα.

Φωτογραφία του Joel Ortiz σε συνέντευξη Τύπου στο πανεπιστήμιο. Δύο χρόνια αργότερα, θα συλληφθεί για απάτη στον κυβερνοχώρο.
Πώς λειτουργεί η εναλλαγή SIM
«Ανταλλαγή» σημαίνει ανταλλαγή. Σε όλα αυτά τα συστήματα, οι εγκληματίες οικειοποιούνται τον αριθμό τηλεφώνου του θύματος, συνήθως μέσω μιας επανεκδοθείσας κάρτας SIM, και τον χρησιμοποιούν για να επαναφέρουν τον κωδικό πρόσβασης. Μια τυπική εναλλαγή SIM θεωρητικά μοιάζει με αυτό:
- Νοημοσύνη. Οι απατεώνες μαθαίνουν τα προσωπικά στοιχεία του θύματος: όνομα και αριθμό τηλεφώνου. Μπορούν να βρεθούν σε ανοιχτές πηγές (κοινωνικά δίκτυα, φίλοι) ή να ληφθούν από συνεργό - υπάλληλο εταιρείας κινητής τηλεφωνίας.
- Μπλοκάρισμα. Η κάρτα SIM του θύματος είναι απενεργοποιημένη. Για να το κάνετε αυτό, απλώς καλέστε την τεχνική υποστήριξη του παρόχου, δώστε τον αριθμό και πείτε ότι το τηλέφωνο χάθηκε.
- Λήψη, μεταφορά του αριθμού στην κάρτα SIM. Συνήθως αυτό γίνεται και μέσω συνεργού στην εταιρεία τηλεπικοινωνιών ή με πλαστογραφία εγγράφων.
Στην πραγματική ζωή τα πράγματα είναι ακόμα πιο σοβαρά. Οι εισβολείς επιλέγουν ένα θύμα και στη συνέχεια παρακολουθούν την τοποθεσία του τηλεφώνου καθημερινά - ένα αίτημα για λήψη πληροφοριών ότι ο συνδρομητής έχει μεταβεί σε περιαγωγή κοστίζει 1-2 σεντ. Μόλις ο κάτοχος της κάρτας SIM φύγει στο εξωτερικό, κανονίζουν με τον διευθυντή στο κατάστημα επικοινωνίας για την έκδοση μιας νέας κάρτας SIM. Κοστίζει περίπου $50 (βρήκα πληροφορίες - σε διαφορετικές χώρες και με διαφορετικούς χειριστές από $20 έως $100), και στη χειρότερη περίπτωση ο διευθυντής θα απολυθεί - δεν υπάρχει καμία ευθύνη για αυτό.
Τώρα όλα τα SMS θα ληφθούν από τους εισβολείς και ο ιδιοκτήτης του τηλεφώνου δεν θα μπορεί να κάνει τίποτα γι 'αυτό - βρίσκεται στο εξωτερικό. Στη συνέχεια, οι εγκληματίες αποκτούν πρόσβαση σε όλους τους λογαριασμούς του θύματος και αλλάζουν τους κωδικούς πρόσβασης εάν το επιθυμούν.
Πιθανότητες να πάρει πίσω ό,τι είχε κλαπεί
Μερικές φορές οι τράπεζες φιλοξενούν τα θύματα και ανακαλούν εμβάσματα από τους λογαριασμούς τους. Ως εκ τούτου, είναι δυνατή η επιστροφή χρημάτων fiat ακόμη και αν ο εγκληματίας δεν βρεθεί. Αλλά με τα πορτοφόλια κρυπτονομισμάτων, τα πράγματα είναι πιο περίπλοκα - και τεχνικά, και νομοθετικά. Μέχρι στιγμής, κανένα ανταλλακτήριο/πορτοφόλι δεν έχει καταβάλει αποζημίωση για ανταλλαγή θυμάτων.
Εάν τα θύματα θέλουν να υπερασπιστούν τα χρήματά τους στο δικαστήριο, κατηγορούν τον χειριστή: δημιούργησε τις προϋποθέσεις για την κλοπή χρημάτων από τον λογαριασμό. Αυτό ακριβώς έκανα , ο οποίος έχασε 224 εκατομμύρια δολάρια λόγω ανταλλαγής. Τώρα μηνύει την εταιρεία τηλεπικοινωνιών AT&T.

Μέχρι στιγμής, κανένα κράτος δεν έχει λειτουργικά προγράμματα για την νομική προστασία των κατόχων κρυπτονομισμάτων. Είναι αδύνατο να ασφαλίσετε το κεφάλαιό σας ή να λάβετε αποζημίωση για την απώλεια του. Επομένως, είναι πιο εύκολο να αποτρέψετε μια επίθεση ανταλλαγής παρά να αντιμετωπίσετε τις συνέπειές της. Ο πιο προφανής τρόπος είναι να χρησιμοποιήσετε έναν πιο ασφαλή «δεύτερο παράγοντα» για το 2FA.
Η εναλλαγή SIM δεν είναι το μόνο πρόβλημα με το 2FA μέσω SMS
Οι κωδικοί επαλήθευσης SMS δεν είναι επίσης ασφαλείς από τεχνική άποψη. Τα μηνύματα μπορούν να υποκλαπούν λόγω μη επιδιορθώσιμων τρωτών σημείων στο σύστημα σηματοδότησης του συστήματος σηματοδότησης 7 (SS7). Το 2FA μέσω SMS έχει αναγνωριστεί επίσημα ως μη ασφαλές (το Εθνικό Ινστιτούτο Προτύπων και Τεχνολογίας των ΗΠΑ το λέει αυτό στο ).
Ταυτόχρονα, η παρουσία του 2FA συχνά δίνει στον χρήστη μια ψευδή αίσθηση ασφάλειας και επιλέγει έναν απλούστερο κωδικό πρόσβασης. Επομένως, αυτός ο έλεγχος ταυτότητας δεν περιπλέκει, αλλά μάλλον διευκολύνει την πρόσβαση του εισβολέα στον λογαριασμό.
Και συχνά τα μηνύματα SMS φτάνουν με μεγάλη καθυστέρηση ή δεν φτάνουν καθόλου.
Άλλες μέθοδοι 2FA
Φυσικά, τα smartphone και τα SMS δεν είναι τα μόνα πράγματα στον κόσμο. Υπάρχουν άλλες μέθοδοι 2FA. Για παράδειγμα, κωδικοί TAN μιας χρήσης: μια πρωτόγονη μέθοδος, αλλά λειτουργεί – εξακολουθεί να χρησιμοποιείται σε ορισμένες τράπεζες. Υπάρχουν συστήματα που χρησιμοποιούν βιομετρικά δεδομένα: δακτυλικά αποτυπώματα, σαρώσεις αμφιβληστροειδούς. Μια άλλη επιλογή που φαίνεται ως εύλογος συμβιβασμός όσον αφορά την ευκολία, την αξιοπιστία και την τιμή είναι οι ειδικές εφαρμογές για το 2FA: RSA Token, Google Authenticator. Υπάρχουν επίσης φυσικά κλειδιά και άλλες μέθοδοι.
Θεωρητικά, όλα φαίνονται λογικά και αξιόπιστα. Αλλά στην πράξη, οι σύγχρονες λύσεις 2FA έχουν προβλήματα και εξαιτίας αυτών, η πραγματικότητα διαφέρει από τις προσδοκίες.
Σύμφωνα με , η χρήση του 2FA είναι κατ' αρχήν ταλαιπωρία και η δημοτικότητα του 2FA μέσω SMS εξηγείται από τη "λιγότερη ταλαιπωρία σε σύγκριση με άλλες μεθόδους" - η λήψη κωδικών μίας χρήσης είναι κατανοητή για τον χρήστη.
Πολλές μέθοδοι 2FA συνδέονται από τους χρήστες με τον φόβο ότι θα χαθεί η πρόσβαση. Το φυσικό κλειδί ή η λίστα των κωδικών πρόσβασης TAN μπορεί να χαθεί ή να κλαπεί. Προσωπικά είχα αρνητικές εμπειρίες χρησιμοποιώντας το Google Authenticator. Το πρώτο μου smartphone με αυτήν την εφαρμογή χάλασε - δείτε τις προσπάθειές μου να επαναφέρω την πρόσβαση σε λογαριασμούς. Ένα άλλο πρόβλημα είναι η εναλλαγή σε νέα συσκευή. Ο Επαληθευτής Google δεν έχει επιλογή εξαγωγής για λόγους ασφαλείας (αν μπορούν να εξαχθούν κλειδιά, ποια ασφάλεια υπάρχει;). Μόλις μετακίνησα τα κλειδιά χειροκίνητα και μετά αποφάσισα ότι ήταν ευκολότερο να αφήσω το παλιό smartphone σε ένα κουτί στο ράφι.
Η μέθοδος 2FA πρέπει να είναι:
- Ασφαλής - μόνο εσείς, όχι οι εισβολείς, θα πρέπει να έχετε πρόσβαση στον λογαριασμό σας
- Αξιόπιστο - έχετε πρόσβαση στον λογαριασμό σας όποτε το χρειάζεστε
- Βολικό και προσβάσιμο - η χρήση του 2FA είναι σαφής και απαιτεί ελάχιστο χρόνο
- Φτηνός
Πιστεύουμε ότι το blockchain είναι η σωστή λύση.
Χρησιμοποιήστε 2FA στο blockchain
Για τον χρήστη, το 2FA στο blockchain μοιάζει με τη λήψη κωδικών μίας χρήσης μέσω SMS. Η μόνη διαφορά είναι στο κανάλι παράδοσης. Η μέθοδος απόκτησης ενός κωδικού 2FA εξαρτάται από το τι προσφέρει το blockchain. Στο έργο μας (οι πληροφορίες βρίσκονται στο προφίλ μου) αυτή είναι μια εφαρμογή Web, Tor, iOS, Android, Linux, Windows, MacOS.
Η υπηρεσία δημιουργεί έναν κωδικό μιας χρήσης και τον στέλνει στον αγγελιοφόρο στο blockchain. Στη συνέχεια, ως συνήθως: ο χρήστης εισάγει τον κωδικό που έλαβε στη διεπαφή υπηρεσίας και συνδέεται.

Στο άρθρο Έγραψα ότι το blockchain παρέχει ασφάλεια και απόρρητο για τη μετάδοση μηνυμάτων. Σχετικά με το θέμα της αποστολής κωδικών 2FA, θα ήθελα να επισημάνω:
- Ένα κλικ για να δημιουργήσετε έναν λογαριασμό - δεν απαιτούνται αριθμοί τηλεφώνου ή email.
- Όλα τα μηνύματα με 2 κωδικούς FA είναι κρυπτογραφημένα End-to-End curve25519xsalsa20poly1305.
- Η επίθεση MITM αποκλείεται - κάθε μήνυμα με κωδικό 2FA είναι μια συναλλαγή στο blockchain και υπογράφεται από τον Ed25519 EdDSA.
- Το μήνυμα με τον κωδικό 2FA πηγαίνει στο μπλοκ του. Η σειρά και η χρονική σήμανση των μπλοκ δεν μπορούν να διορθωθούν και επομένως η σειρά των μηνυμάτων δεν μπορεί να διορθωθεί.
- Δεν υπάρχει κεντρική δομή που να ελέγχει την «αυθεντικότητα» ενός μηνύματος. Αυτό γίνεται από ένα κατανεμημένο σύστημα κόμβων που βασίζεται στη συναίνεση και ανήκει στους χρήστες.
- Δεν υπάρχει τρόπος απενεργοποίησης - οι λογαριασμοί δεν μπορούν να αποκλειστούν και τα μηνύματα δεν μπορούν να διαγραφούν.
- Αποκτήστε πρόσβαση στους κωδικούς σας 2FA από οποιαδήποτε συσκευή ανά πάσα στιγμή.
- Επιβεβαίωση παράδοσης μηνύματος με κωδικό 2FA. Η υπηρεσία που στέλνει τον κωδικό πρόσβασης μίας χρήσης γνωρίζει με βεβαιότητα ότι παραδόθηκε. Δεν υπάρχουν κουμπιά "Επανάληψη αποστολής".
Για να συγκρίνω με κάποιες άλλες μεθόδους 2FA, έχω συντάξει έναν πίνακα:

Ο χρήστης λαμβάνει έναν λογαριασμό στο blockchain messenger για λήψη κωδικών σε ένα δευτερόλεπτο - χρησιμοποιείται μόνο μια φράση πρόσβασης για τη σύνδεση. Επομένως, οι μέθοδοι χρήσης μπορεί να διαφέρουν: μπορείτε να χρησιμοποιήσετε έναν λογαριασμό για να λάβετε κωδικούς για όλες τις υπηρεσίες ή μπορείτε να δημιουργήσετε έναν ξεχωριστό λογαριασμό για κάθε υπηρεσία.
Υπάρχει επίσης μια ταλαιπωρία - ο λογαριασμός πρέπει να έχει τουλάχιστον μία συναλλαγή. Για να λάβει ένας χρήστης ένα κρυπτογραφημένο μήνυμα με κωδικό, είναι απαραίτητο να γνωρίζει το δημόσιο κλειδί του και εμφανίζεται στο blockchain μόνο με την πρώτη συναλλαγή. Ξεφύγαμε από αυτό με αυτόν τον τρόπο: δώσαμε την ευκαιρία να λάβουμε δωρεάν μάρκες στο πορτοφόλι. Ωστόσο, μια πιο σωστή λύση είναι να αποκαλέσετε τον λογαριασμό δημόσιο κλειδί. (Για σύγκριση έχουμε τον αριθμό λογαριασμού U1467838112172792705 είναι παράγωγο του δημόσιου κλειδιού cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Για ένα messenger, αυτό είναι πιο βολικό και ευανάγνωστο, αλλά για το σύστημα αποστολής κωδικών 2FA, είναι περιορισμός). Νομίζω ότι στο μέλλον κάποιος θα πάρει μια τέτοια απόφαση και θα μεταφέρει το “Convenience and Accessibility” στην πράσινη ζώνη.
Η τιμή για την αποστολή ενός κωδικού 2FA είναι πραγματικά χαμηλή - 0.001 ADM, τώρα είναι 0.00001 USD. Και πάλι, μπορείτε να αυξήσετε το blockchain σας και να κάνετε την τιμή μηδέν.
Πώς να συνδέσετε το 2FA στο blockchain στην υπηρεσία σας
Ελπίζω να μπόρεσα να ενδιαφέρω ορισμένους αναγνώστες να προσθέσουν έλεγχο ταυτότητας blockchain στις υπηρεσίες τους.
Θα σας πω πώς να το κάνετε αυτό χρησιμοποιώντας ως παράδειγμα τον αγγελιοφόρο μας και κατ' αναλογία μπορείτε να χρησιμοποιήσετε ένα άλλο blockchain. Στην εφαρμογή επίδειξης 2FA, χρησιμοποιούμε το postgresql10 για την αποθήκευση πληροφοριών λογαριασμού.
Στάδια σύνδεσης:
- Δημιουργήστε έναν λογαριασμό blockchain από τον οποίο θα στείλετε 2 κωδικούς FA. Θα λάβετε μια φράση πρόσβασης, η οποία χρησιμοποιείται ως ιδιωτικό κλειδί για την κρυπτογράφηση μηνυμάτων με κωδικούς και για την υπογραφή συναλλαγών.
- Προσθέστε ένα σενάριο στον διακομιστή σας για να δημιουργήσετε κωδικούς 2FA. Εάν χρησιμοποιείτε ήδη οποιαδήποτε άλλη μέθοδο 2FA με παράδοση κωδικού μίας χρήσης, έχετε ήδη ολοκληρώσει αυτό το βήμα.
- Προσθέστε ένα σενάριο στον διακομιστή σας για να στείλετε κώδικες στον χρήστη στο blockchain messenger.
- Δημιουργήστε μια διεπαφή χρήστη για την αποστολή και την εισαγωγή του κωδικού 2FA. Εάν χρησιμοποιείτε ήδη οποιαδήποτε άλλη μέθοδο 2FA με παράδοση κωδικού μίας χρήσης, έχετε ήδη ολοκληρώσει αυτό το βήμα.
1 Δημιουργήστε έναν λογαριασμό
Η δημιουργία ενός λογαριασμού στο blockchain περιλαμβάνει τη δημιουργία ενός ιδιωτικού κλειδιού, ενός δημόσιου κλειδιού και μιας διεύθυνσης λογαριασμού που προέρχεται από αυτό.

Αρχικά, δημιουργείται μια φράση πρόσβασης BIP39, από την οποία υπολογίζεται ένας κατακερματισμός SHA-256. Ο κατακερματισμός χρησιμοποιείται για τη δημιουργία του ιδιωτικού κλειδιού ks και του δημόσιου κλειδιού kp. Από το δημόσιο κλειδί, χρησιμοποιώντας το ίδιο SHA-256 με αντιστροφή, λαμβάνουμε τη διεύθυνση στο blockchain.
Εάν θέλετε να στέλνετε κωδικούς 2FA κάθε φορά από έναν νέο λογαριασμό, ο κωδικός δημιουργίας λογαριασμού θα πρέπει να προστεθεί στον διακομιστή:
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()
}Στην εφαρμογή επίδειξης, την απλοποιήσαμε - δημιουργήσαμε έναν λογαριασμό στην εφαρμογή web και στείλαμε κωδικούς από αυτήν. Στις περισσότερες περιπτώσεις, αυτό είναι πιο βολικό για τον χρήστη: γνωρίζει ότι η υπηρεσία στέλνει κωδικούς 2FA από έναν συγκεκριμένο λογαριασμό και μπορεί να τον ονομάσει.

2 Δημιουργία κωδικών 2FA
Πρέπει να δημιουργηθεί ένας κωδικός 2FA για κάθε σύνδεση χρήστη. Χρησιμοποιούμε τη βιβλιοθήκη , αλλά μπορείτε να επιλέξετε οποιοδήποτε άλλο.
const hotp = speakeasy.hotp({
counter,
secret: account.seSecretAscii,
});
Έλεγχος της εγκυρότητας του κωδικού 2FA που έχει εισαχθεί από τον χρήστη:
se2faVerified = speakeasy.hotp.verify({
counter: this.seCounter,
secret: this.seSecretAscii,
token: hotp,
});
3 Αποστολή κωδικού 2FA
Για να στείλετε τον κωδικό 2FA, μπορείτε να χρησιμοποιήσετε το API κόμβου blockchain, τη βιβλιοθήκη JS API ή την κονσόλα. Σε αυτό το παράδειγμα, χρησιμοποιούμε την κονσόλα, η οποία είναι η διεπαφή γραμμής εντολών, ένα βοηθητικό πρόγραμμα που απλοποιεί την αλληλεπίδραση με το blockchain. Για να στείλετε ένα μήνυμα με κωδικό 2FA, πρέπει να χρησιμοποιήσετε την εντολή send message κονσόλες.
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);
Ένας εναλλακτικός τρόπος αποστολής μηνυμάτων είναι να χρησιμοποιήσετε τη μέθοδο send στη βιβλιοθήκη JS API.
4 Διεπαφή χρήστη
Πρέπει να δοθεί στον χρήστη η επιλογή να εισαγάγει έναν κωδικό 2FA, αυτό μπορεί να γίνει με διαφορετικούς τρόπους ανάλογα με την πλατφόρμα της εφαρμογής σας. Στο παράδειγμά μας, είναι το Vue.

Μπορείτε να δείτε τον πηγαίο κώδικα για την εφαρμογή επίδειξης ελέγχου ταυτότητας δύο παραγόντων blockchain . Υπάρχει ένας σύνδεσμος για μια ζωντανή επίδειξη στο Readme για να το δοκιμάσετε.
Πηγή: www.habr.com
