به سمت امن 2FA در بلاک چین حرکت کنید

پیام های SMS محبوب ترین روش احراز هویت دو مرحله ای (2FA) هستند. توسط بانک ها، کیف پول های الکترونیکی و رمزنگاری، صندوق های پستی و انواع خدمات استفاده می شود. تعداد روش کاربران به 100 ٪ نزدیک می شود.

من از این سناریو خشمگین هستم، زیرا این روش ناامن است. تخصیص مجدد شماره از یک سیم کارت به سیم کارت دیگر از ابتدای عصر تلفن همراه آغاز شد - به این ترتیب زمانی که سیم کارت گم می شود، شماره بازیابی می شود. "متخصصان سرقت پول دیجیتال" متوجه شدند که گزینه "بازنویسی سیم کارت" را می توان در طرح های کلاهبرداری استفاده کرد. از این گذشته، کسی که سیم کارت را کنترل می کند می تواند بانکداری آنلاین، کیف پول الکترونیکی و حتی ارز دیجیتال دیگران را کنترل کند. و شما می توانید از طریق رشوه دادن به کارمند مخابرات، با استفاده از فریب یا اسناد جعلی، شماره شخص دیگری را در اختیار بگیرید.

به سمت امن 2FA در بلاک چین حرکت کنید

هزاران قسمت از تعویض سیم‌کارت، به نام این طرح کلاهبرداری، کشف شده است. مقیاس فاجعه نشان می دهد که جهان به زودی 2FA از طریق پیامک را کنار خواهد گذاشت. اما این اتفاق نمی افتد - در تحقیق آنها می گویند که این کاربران نیستند که روش 2FA را انتخاب می کنند، بلکه صاحبان سرویس هستند.

ما استفاده از روش امن 2FA را با تحویل کدهای یک بار مصرف از طریق بلاک چین پیشنهاد می کنیم و به شما خواهیم گفت که چگونه مالک سرویس می تواند آن را متصل کند.

شمارش به میلیون ها می رسد

در سال 2019، طبق گفته پلیس لندن، کلاهبرداری تعویض سیم‌کارت 63 درصد افزایش یافت و «میانگین صورت‌حساب» مهاجم 4,000 پوند بود. من هیچ آماری در روسیه پیدا نکردم، اما تصور می کنم که آنها حتی بدتر هستند.

تعویض سیم‌کارت برای سرقت حساب‌های محبوب توییتر، اینستاگرام، فیس‌بوک، حساب‌های VK، حساب‌های بانکی و اخیراً حتی ارزهای دیجیتال استفاده می‌شود. روزنامه تایمز گزارش می دهد طبق گفته Joby Weeks، کارآفرین بیت کوین. موارد برجسته سرقت ارزهای دیجیتال با استفاده از تعویض سیم کارت از سال 2016 در مطبوعات منتشر شده است. 2019 شاهد یک اوج واقعی بود.

در ماه مه، دفتر دادستانی ایالات متحده در ناحیه شرقی میشیگان اتهام وارد کرد 19 جوان بین 26 تا 2,4 ساله: گمان می رود که آنها بخشی از یک باند هکری به نام "جامعه" باشند. این باند به هفت حمله مبادله متهم شده است که در نتیجه آن هکرها ارزهای دیجیتال به ارزش بیش از 10 میلیون دلار را سرقت کردند. و در ماه آوریل، جوئل اورتیز، دانشجوی کالیفرنیایی به دلیل تعویض سیم کارت به 7.5 سال زندان محکوم شد. تولید او XNUMX میلیون دلار در ارزهای دیجیتال بود.

به سمت امن 2FA در بلاک چین حرکت کنید
عکس جوئل اورتیز در کنفرانس مطبوعاتی دانشگاه. دو سال بعد او به دلیل کلاهبرداری سایبری بازداشت خواهد شد.

نحوه تعویض سیم کارت

«معوض» به معنای مبادله است. در تمام این طرح‌ها، مجرمان معمولاً از طریق صدور مجدد سیم‌کارت، شماره تلفن قربانی را در اختیار گرفته و از آن برای بازنشانی رمز عبور استفاده می‌کنند. یک تعویض سیم کارت معمولی در تئوری به این صورت است:

  1. سرویس اطلاعاتی کلاهبرداران اطلاعات شخصی قربانی را پیدا می کنند: نام و شماره تلفن. آنها را می توان در منابع باز (شبکه های اجتماعی، دوستان) یافت یا از یک همدست - کارمند یک اپراتور تلفن همراه دریافت کرد.
  2. مسدود کردن. سیم کارت قربانی غیرفعال می شود. برای انجام این کار، فقط با پشتیبانی فنی ارائه دهنده تماس بگیرید، شماره را ارائه دهید و بگویید که تلفن گم شده است.
  3. گرفتن، شماره را به سیم کارت خود منتقل کنید. معمولاً این کار نیز از طریق همدستی در شرکت مخابرات یا از طریق جعل اسناد انجام می شود.

در زندگی واقعی همه چیز حتی شدیدتر است. مهاجمان قربانی را انتخاب می کنند و سپس محل تلفن را روزانه ردیابی می کنند - یک درخواست برای دریافت اطلاعاتی که مشترک به رومینگ تغییر داده است 1-2 سنت هزینه دارد. به محض اینکه صاحب سیم کارت به خارج از کشور رفته است، در فروشگاه ارتباطات با مدیر برای صدور سیم کارت جدید مذاکره می کنند. هزینه آن حدود 50 دلار است (من اطلاعات پیدا کردم - در کشورهای مختلف و با اپراتورهای مختلف از 20 دلار تا 100 دلار)، و در بدترین حالت مدیر اخراج می شود - هیچ مسئولیتی در این مورد وجود ندارد.

اکنون تمام پیامک ها توسط مهاجمان دریافت می شود و صاحب تلفن نمی تواند کاری در مورد آن انجام دهد - او در خارج از کشور است. و سپس شروران به تمام حساب های قربانی دسترسی پیدا می کنند و در صورت تمایل رمز عبور را تغییر می دهند.

احتمال بازگرداندن اموال مسروقه

بانک ها گاهی اوقات قربانیان را در نیمه راه اسکان می دهند و حواله ها را از حساب آنها برداشت می کنند. بنابراین امکان استرداد پول فیات حتی در صورت پیدا نشدن مجرم وجود دارد. اما با کیف پول های رمزنگاری همه چیز پیچیده تر است - و از نظر فنی، و به صورت تشریعی. تا کنون، حتی یک صرافی/کیف پول به قربانیان مبادله غرامت پرداخت نکرده است.

اگر قربانیان بخواهند از پول خود در دادگاه دفاع کنند، اپراتور را مقصر می دانند: او شرایط را برای سرقت پول از حساب ایجاد کرده است. من دقیقا همین کار را کردم مایکل تورپین، که به دلیل مبادله 224 میلیون دلار ضرر کرد، اکنون از شرکت مخابراتی AT&T شکایت کرده است.

به سمت امن 2FA در بلاک چین حرکت کنید

تا کنون، هیچ ایالتی برنامه‌ای برای محافظت قانونی از صاحبان ارزهای دیجیتال نداشته است. بیمه کردن سرمایه یا دریافت غرامت از دست دادن آن غیرممکن است. بنابراین، جلوگیری از حمله مبادله آسانتر از مقابله با عواقب آن است. واضح ترین راه استفاده از یک "عامل دوم" قابل اعتمادتر برای 2FA است.

SIM SWAP تنها مشکل 2FA از طریق پیام کوتاه نیست

کدهای تایید در پیامک نیز از نظر فنی ناامن هستند. پیام ها را می توان به دلیل آسیب پذیری های اصلاح نشده در سیستم سیگنالینگ 7 (SS7) رهگیری کرد. 2FA از طریق پیامک رسما به عنوان ناامن شناخته می شود (موسسه ملی استاندارد و فناوری ایالات متحده این را در خود می گوید راهنمای احراز هویت دیجیتال).

در عین حال وجود 2FA اغلب به کاربر احساس امنیت کاذب می دهد و رمز عبور ساده تری را انتخاب می کند. بنابراین، چنین احراز هویتی کار را دشوار نمی کند، اما دسترسی مهاجم را به حساب کاربری آسان تر می کند.

و اغلب اس ام اس ها با تاخیر زیاد می رسند یا اصلا نمی رسند.

سایر روش های 2FA

البته نور در گوشی های هوشمند و پیامک همگرا نشد. روش های دیگری از 2FA وجود دارد. به عنوان مثال، کدهای یکبار مصرف TAN: یک روش ابتدایی، اما کار می کند - هنوز در برخی از بانک ها استفاده می شود. سیستم هایی وجود دارد که از داده های بیومتریک استفاده می کنند: اثر انگشت، اسکن شبکیه. گزینه دیگری که از نظر راحتی، قابلیت اطمینان و قیمت به عنوان یک مصالحه معقول به نظر می رسد، برنامه های ویژه برای 2FA است: RSA Token، Google Authenticator. کلیدهای فیزیکی و روش های دیگری نیز وجود دارد.

از نظر تئوری ، همه چیز منطقی و قابل اعتماد به نظر می رسد. اما در عمل ، راه حل های مدرن 2FA دارای مشکلات هستند و به همین دلیل واقعیت با انتظارات متفاوت است.

طبق تحقیق، استفاده از 2FA در اصل یک ناراحتی است و محبوبیت 2FA از طریق پیام کوتاه با "مزاحمت کمتر در مقایسه با روش های دیگر" توضیح داده شده است - دریافت کدهای یک بار مصرف برای کاربر قابل درک است.

کاربران بسیاری از روش های 2FA را با ترس از دست رفتن دسترسی مرتبط می دانند. کلید فیزیکی یا لیست رمزهای عبور TAN ممکن است گم یا دزدیده شود. من شخصاً تجربیات بدی با Google Authenticator داشته ام. اولین گوشی هوشمند من با این برنامه خراب شد - از تلاش های من در بازگرداندن دسترسی به حساب هایم تشکر می کنم. مشکل دیگر تغییر به دستگاه جدید است. Google Authenticator به دلایل امنیتی گزینه صادراتی ندارد (اگر می توان کلیدها را صادر کرد، چه امنیتی وجود دارد؟). یک بار کلیدها را به صورت دستی حمل کردم و سپس به این نتیجه رسیدم که گذاشتن تلفن هوشمند قدیمی در یک جعبه روی قفسه آسان تر است.

روش 2FA باید به صورت زیر باشد:

  • امن - فقط شما و نه مهاجمان باید به حساب شما دسترسی داشته باشند
  • قابل اعتماد - هر زمان که به حساب خود نیاز داشته باشید به آن دسترسی خواهید داشت
  • راحت و در دسترس - استفاده از 2FA واضح است و کمترین زمان را می طلبد
  • ارزان

ما معتقدیم که بلاک چین راه حل مناسبی است.

از 2FA در blockchain استفاده کنید

برای کاربر، 2FA در بلاک چین مانند دریافت کدهای یکبار مصرف از طریق پیامک است. تنها تفاوت کانال تحویل است. روش دریافت کد 2FA به آنچه که بلاک چین ارائه می دهد بستگی دارد. در پروژه ما (اطلاعات در نمایه من است) این یک برنامه وب، Tor، iOS، Android، Linux، Windows، MacOS است.

این سرویس یک کد یکبار مصرف تولید می کند و آن را برای پیام رسان موجود در بلاک چین ارسال می کند. سپس کلاسیک را دنبال کنید: کاربر کد دریافتی را در رابط سرویس وارد می کند و وارد می شود.

به سمت امن 2FA در بلاک چین حرکت کنید

مقاله چگونه یک پیام رسان غیرمتمرکز روی بلاک چین کار می کند؟ من نوشتم که بلاک چین امنیت و حریم خصوصی انتقال پیام را تضمین می کند. در مورد موضوع ارسال کدهای 2FA، من برجسته می کنم:

  • یک کلیک برای ایجاد یک حساب کاربری - بدون تلفن یا ایمیل.
  • همه پیام‌ها با کدهای 2FA رمزگذاری‌شده End-to-End curve25519xsalsa20poly1305 هستند.
  • حمله MITM مستثنی است - هر پیام با کد 2FA یک تراکنش در بلاک چین است و توسط Ed25519 EdDSA امضا شده است.
  • پیام با کد 2FA در بلوک خود به پایان می رسد. توالی و مهر زمانی بلوک ها را نمی توان تصحیح کرد و بنابراین ترتیب پیام ها را نمی توان اصلاح کرد.
  • هیچ ساختار مرکزی وجود ندارد که "اصالت" یک پیام را بررسی کند. این کار توسط یک سیستم توزیع شده از گره ها بر اساس اجماع انجام می شود و متعلق به کاربران است.
  • غیرفعال نمی شود - حساب ها را نمی توان مسدود کرد و پیام ها را نمی توان حذف کرد.
  • در هر زمان از هر دستگاهی به کدهای 2FA دسترسی داشته باشید.
  • تایید تحویل پیام با کد 2FA. سرویسی که رمز یکبار مصرف را ارسال می کند، مطمئناً می داند که آن را تحویل داده است. بدون دکمه "ارسال دوباره".

برای مقایسه با برخی روش های دیگر 2FA، جدولی را تهیه کردم:

به سمت امن 2FA در بلاک چین حرکت کنید

کاربر یک حساب کاربری در پیام رسان بلاک چین دریافت می کند تا در یک ثانیه کدها را دریافت کند - فقط از یک عبارت عبور برای ورود استفاده می شود. بنابراین، روش‌های استفاده ممکن است متفاوت باشد: می‌توانید از یک حساب برای دریافت کد برای همه سرویس‌ها استفاده کنید یا می‌توانید برای هر سرویس یک حساب جداگانه ایجاد کنید.

همچنین یک ناراحتی وجود دارد - حساب باید حداقل یک تراکنش داشته باشد. برای اینکه کاربر یک پیام رمزگذاری شده با کد دریافت کند، باید کلید عمومی او را بشناسید و تنها با اولین تراکنش در بلاک چین ظاهر می شود. به این ترتیب ما توانستیم از آن خارج شویم: به آنها این فرصت را دادیم که توکن های رایگان را در کیف پول خود دریافت کنند. با این حال، راه حل بهتر این است که نام حساب را یک کلید عمومی بگذارید. (برای مقایسه ، ما شماره حساب را داریم U1467838112172792705 مشتق کلید عمومی است cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. برای پیام رسان این راحت تر و قابل خواندن است، اما برای سیستم ارسال کدهای 2FA محدودیت است). من فکر می کنم که در آینده کسی چنین تصمیمی خواهد گرفت و "راحتی و دسترسی" را به منطقه سبز منتقل می کند.

قیمت ارسال کد 2FA واقعا پایین است - 0.001 ADM، اکنون 0.00001 دلار است. باز هم می توانید بلاک چین خود را افزایش دهید و قیمت را صفر کنید.

نحوه اتصال 2FA در بلاک چین به سرویس خود

امیدوارم که بتوانم به چند خواننده علاقه مند شوم تا مجوز blockchain را به خدمات خود اضافه کنم.

من به شما می گویم که چگونه این کار را با استفاده از پیام رسان ما به عنوان مثال انجام دهید و به طور مشابه می توانید از یک بلاک چین دیگر استفاده کنید. در برنامه نمایشی 2FA از postgresql10 برای ذخیره اطلاعات حساب استفاده می کنیم.

مراحل اتصال:

  1. یک حساب کاربری در بلاک چین ایجاد کنید که از آن کدهای 2FA ارسال کنید. شما یک عبارت عبور دریافت خواهید کرد که به عنوان یک کلید خصوصی برای رمزگذاری پیام ها با کدها و امضای تراکنش ها استفاده می شود.
  2. برای ایجاد کدهای 2FA، یک اسکریپت به سرور خود اضافه کنید. اگر در حال حاضر از هر روش 2FA دیگری با تحویل رمز عبور یک بار استفاده می‌کنید، قبلاً این مرحله را تکمیل کرده‌اید.
  3. یک اسکریپت به سرور خود اضافه کنید تا کدهایی را برای کاربر در پیام رسان بلاک چین ارسال کند.
  4. یک رابط کاربری برای ارسال و وارد کردن کد 2FA ایجاد کنید. اگر در حال حاضر از هر روش 2FA دیگری با تحویل رمز عبور یک بار استفاده می‌کنید، قبلاً این مرحله را تکمیل کرده‌اید.

1 ایجاد حساب کاربری

ایجاد یک حساب در blockchain به معنای تولید یک کلید خصوصی ، یک کلید عمومی و یک آدرس حساب مشتق شده است.

به سمت امن 2FA در بلاک چین حرکت کنید

ابتدا کلمه عبور BIP39 تولید می شود و هش SHA-256 از روی آن محاسبه می شود. هش برای تولید کلید خصوصی ks ​​و کلید عمومی kp استفاده می شود. از کلید عمومی، با استفاده از همان SHA-256 با وارونگی، آدرس را در بلاک چین به دست می آوریم.

اگر می خواهید هر بار از یک حساب کاربری جدید کدهای 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()
}

در برنامه آزمایشی، ما آن را ساده کردیم - یک حساب در برنامه وب ایجاد کردیم و کدها را از آن ارسال کردیم. در بیشتر موارد، این نیز برای کاربر راحت تر است: او می داند که این سرویس کدهای 2FA را از یک حساب خاص ارسال می کند و می تواند آن را نامگذاری کند.

به سمت امن 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 گره بلاک چین، کتابخانه JS API یا کنسول استفاده کنید. در این مثال، ما از کنسول استفاده می کنیم - این رابط خط فرمان است، ابزاری که تعامل با بلاک چین را ساده می کند. برای ارسال پیام با کد 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 است.

به سمت امن 2FA در بلاک چین حرکت کنید

کد منبع برنامه آزمایشی احراز هویت دو مرحله ای بلاک چین را می توان در این آدرس مشاهده کرد GitHub. پیوندی در Readme به یک نسخه ی نمایشی زنده وجود دارد تا آن را امتحان کنید.

منبع: www.habr.com

اضافه کردن نظر