ข้อความ SMS เป็นวิธีที่ได้รับความนิยมมากที่สุดในการตรวจสอบสิทธิ์แบบสองปัจจัย (2FA) มันถูกใช้โดยธนาคาร กระเป๋าเงินอิเล็กทรอนิกส์และคริปโต ตู้ไปรษณีย์ และบริการทุกประเภท
ฉันไม่พอใจกับสถานการณ์นี้ เพราะวิธีการนี้ไม่ปลอดภัย การกำหนดหมายเลขใหม่จากซิมการ์ดหนึ่งไปยังอีกซิมการ์ดหนึ่งเริ่มต้นตั้งแต่ต้นยุคมือถือ - นี่คือวิธีการคืนค่าหมายเลขเมื่อซิมการ์ดสูญหาย “ผู้เชี่ยวชาญด้านการขโมยเงินดิจิทัล” ตระหนักว่าตัวเลือก “เขียนซิมการ์ดใหม่” สามารถใช้ในแผนการฉ้อโกงได้ ท้ายที่สุดแล้ว ผู้ที่ควบคุมซิมการ์ดจะสามารถควบคุมธนาคารออนไลน์ กระเป๋าเงินอิเล็กทรอนิกส์ และแม้แต่สกุลเงินดิจิทัลของผู้อื่นได้ และคุณสามารถครอบครองหมายเลขของบุคคลอื่นได้โดยการติดสินบนพนักงานโทรคมนาคม โดยใช้การหลอกลวงหรือปลอมแปลงเอกสาร
มีการเปิดเผยว่ามีการสลับซิมหลายพันตอน เนื่องจากเรียกว่าแผนการฉ้อโกงนี้ ขนาดของภัยพิบัติชี้ให้เห็นว่าโลกจะละทิ้ง 2FA ผ่านทาง SMS ในไม่ช้า แต่สิ่งนี้ไม่ได้เกิดขึ้น - ใน
เราเสนอให้ใช้วิธี 2FA ที่ปลอดภัยพร้อมการส่งรหัสแบบครั้งเดียวผ่านบล็อกเชน และเราจะแจ้งให้คุณทราบว่าเจ้าของบริการสามารถเชื่อมต่อได้อย่างไร
นับไปเป็นล้าน
ในปี 2019 การฉ้อโกงการแลกเปลี่ยน SIM เพิ่มขึ้น 63% ตามข้อมูลของตำรวจลอนดอน และ “ใบเรียกเก็บเงินโดยเฉลี่ย” ของผู้โจมตีอยู่ที่ 4,000 GBP ฉันไม่พบสถิติใด ๆ ในรัสเซีย แต่ฉันคิดว่าสถิตินั้นแย่กว่านั้นอีก
การสลับซิมใช้เพื่อขโมยบัญชี Twitter, Instagram, Facebook, VK ยอดนิยม บัญชีธนาคาร และแม้แต่สกุลเงินดิจิทัลยอดนิยมเมื่อเร็ว ๆ นี้ -
ในเดือนพฤษภาคม สำนักงานอัยการสหรัฐฯ ประจำเขตตะวันออกของรัฐมิชิแกน
ภาพถ่ายของ Joel Ortiz ในงานแถลงข่าวของมหาวิทยาลัย สองปีต่อมาเขาจะถูกควบคุมตัวในข้อหาฉ้อโกงทางไซเบอร์
การสลับซิมทำงานอย่างไร
“สลับ” หมายถึงการแลกเปลี่ยน ในรูปแบบดังกล่าวทั้งหมด อาชญากรจะยึดหมายเลขโทรศัพท์ของเหยื่อ โดยปกติแล้วจะต้องออกซิมการ์ดใหม่ และใช้เพื่อรีเซ็ตรหัสผ่าน การแลกเปลี่ยน SIM ทั่วไปในทางทฤษฎีมีลักษณะดังนี้:
- บริการข่าวกรอง ผู้ฉ้อโกงค้นหาข้อมูลส่วนบุคคลของเหยื่อ: ชื่อและหมายเลขโทรศัพท์ สามารถพบได้ในโอเพนซอร์ส (โซเชียลเน็ตเวิร์ก เพื่อน) หรือได้รับจากผู้สมรู้ร่วมคิด - พนักงานของผู้ให้บริการโทรศัพท์มือถือ
- การปิดกั้น ซิมการ์ดของเหยื่อถูกปิดใช้งาน ในการดำเนินการนี้ เพียงโทรติดต่อฝ่ายสนับสนุนด้านเทคนิคของผู้ให้บริการ ระบุหมายเลขแล้วแจ้งว่าโทรศัพท์สูญหาย
- จับภาพโอนหมายเลขไปยังซิมการ์ดของคุณ โดยปกติจะทำผ่านผู้สมรู้ร่วมคิดในบริษัทโทรคมนาคมหรือผ่านการปลอมแปลงเอกสาร
ในชีวิตจริงสิ่งต่าง ๆ นั้นรุนแรงยิ่งกว่านั้นอีก ผู้โจมตีเลือกเหยื่อแล้วติดตามตำแหน่งของโทรศัพท์ทุกวัน - คำขอหนึ่งครั้งเพื่อรับข้อมูลที่ผู้ใช้บริการเปลี่ยนไปใช้โรมมิ่งมีค่าใช้จ่าย 1-2 เซนต์ ทันทีที่เจ้าของซิมการ์ดเดินทางไปต่างประเทศ พวกเขาก็เจรจากับผู้จัดการที่ร้านสื่อสารเพื่อออกซิมการ์ดใหม่ มีค่าใช้จ่ายประมาณ 50 ดอลลาร์ (ฉันพบข้อมูล - ในประเทศต่างๆ และกับผู้ให้บริการที่แตกต่างกันตั้งแต่ 20 ถึง 100 ดอลลาร์) และในกรณีที่เลวร้ายที่สุดผู้จัดการจะถูกไล่ออก - ไม่มีความรับผิดชอบในเรื่องนี้
ตอนนี้ผู้โจมตีจะได้รับ SMS ทั้งหมดและเจ้าของโทรศัพท์จะไม่สามารถทำอะไรกับมันได้ - เขาอยู่ต่างประเทศ จากนั้นคนร้ายจะสามารถเข้าถึงบัญชีของเหยื่อทั้งหมดและเปลี่ยนรหัสผ่านได้หากต้องการ
โอกาสที่จะคืนทรัพย์สินที่ถูกขโมย
บางครั้งธนาคารจะรองรับเหยื่อได้ครึ่งทางและถอนการโอนเงินออกจากบัญชีของพวกเขา ดังนั้นจึงเป็นไปได้ที่จะคืนเงินตามคำสั่งแม้ว่าจะไม่พบคนร้ายก็ตาม แต่ด้วยกระเป๋าเงินดิจิตอล ทุกอย่างซับซ้อนมากขึ้น - และ ในทางเทคนิคและในทางนิติบัญญัติ จนถึงขณะนี้ยังไม่มีการแลกเปลี่ยน/กระเป๋าสตางค์แม้แต่รายการเดียวที่จ่ายค่าชดเชยให้กับผู้ที่ตกเป็นเหยื่อของการแลกเปลี่ยน
หากเหยื่อต้องการปกป้องเงินของตนในศาล พวกเขาจะตำหนิผู้ดำเนินการ: เขาสร้างเงื่อนไขสำหรับการขโมยเงินจากบัญชี นั่นคือสิ่งที่ฉันทำ
จนถึงขณะนี้ยังไม่มีรัฐใดที่มีแผนการทำงานเพื่อปกป้องเจ้าของสกุลเงินดิจิทัลอย่างถูกกฎหมาย เป็นไปไม่ได้ที่จะประกันเงินทุนของคุณหรือรับค่าชดเชยสำหรับการสูญเสีย ดังนั้นการป้องกันการโจมตีแบบ Swap นั้นง่ายกว่าการจัดการกับผลที่ตามมา วิธีที่ชัดเจนที่สุดคือการใช้ "ปัจจัยที่สอง" ที่เชื่อถือได้มากขึ้นสำหรับ 2FA
การสลับซิมไม่ใช่ปัญหาเดียวของ 2FA ผ่านทาง SMS
รหัสยืนยันใน SMS ก็ไม่ปลอดภัยจากมุมมองทางเทคนิคเช่นกัน ข้อความสามารถดักจับได้เนื่องจากช่องโหว่ที่ยังไม่ได้แพตช์ใน Signaling System 7 (SS7) 2FA ผ่าน SMS ได้รับการยอมรับอย่างเป็นทางการว่าไม่ปลอดภัย (สถาบันมาตรฐานและเทคโนโลยีแห่งชาติของสหรัฐอเมริการะบุสิ่งนี้ใน
ในเวลาเดียวกัน การมีอยู่ของ 2FA มักจะทำให้ผู้ใช้รู้สึกถึงความปลอดภัยที่ผิดพลาด และเขาเลือกรหัสผ่านที่ง่ายกว่า ดังนั้นการรับรองความถูกต้องดังกล่าวไม่ได้ทำให้เป็นเรื่องยาก แต่ช่วยให้ผู้โจมตีสามารถเข้าถึงบัญชีได้ง่ายขึ้น
และบ่อยครั้งที่ SMS มาถึงล่าช้ามากหรือมาไม่ถึงเลย
วิธีการ 2FA อื่นๆ
แน่นอนว่าแสงไม่ได้มาบรรจบกันบนสมาร์ทโฟนและ SMS มีวิธีอื่นของ 2FA ตัวอย่างเช่น รหัส TAN แบบครั้งเดียว: วิธีการดั้งเดิม แต่ใช้งานได้ - ยังคงใช้อยู่ในธนาคารบางแห่ง มีระบบที่ใช้ข้อมูลไบโอเมตริกซ์ ได้แก่ ลายนิ้วมือ การสแกนจอประสาทตา อีกทางเลือกหนึ่งที่ดูเหมือนเป็นการประนีประนอมที่สมเหตุสมผลในแง่ของความสะดวก ความน่าเชื่อถือ และราคาคือแอปพลิเคชันพิเศษสำหรับ 2FA: โทเค็น RSA, Google Authenticator นอกจากนี้ยังมีฟิสิคัลคีย์และวิธีการอื่นๆ
ตามทฤษฎีแล้ว ทุกอย่างดูสมเหตุสมผลและเชื่อถือได้ แต่ในทางปฏิบัติ โซลูชัน 2FA สมัยใหม่มีปัญหา และด้วยเหตุนี้ ความเป็นจริงจึงแตกต่างจากที่คาดหวัง
ตามที่
ผู้ใช้เชื่อมโยงวิธีการ 2FA หลายวิธีเข้ากับความกลัวว่าการเข้าถึงจะสูญหาย คีย์จริงหรือรายการรหัสผ่าน TAN อาจสูญหายหรือถูกขโมยได้ โดยส่วนตัวแล้วฉันมีประสบการณ์ที่ไม่ดีกับ Google Authenticator สมาร์ทโฟนเครื่องแรกของฉันที่มีแอปพลิเคชันนี้ใช้งานไม่ได้ - ขอขอบคุณความพยายามของฉันในการกู้คืนการเข้าถึงบัญชีของฉัน ปัญหาอีกประการหนึ่งคือการเปลี่ยนไปใช้อุปกรณ์ใหม่ Google Authenticator ไม่มีตัวเลือกในการส่งออกเนื่องจากเหตุผลด้านความปลอดภัย (หากสามารถส่งออกคีย์ได้ จะมีความปลอดภัยอะไรบ้าง) เมื่อฉันถือกุญแจด้วยตนเองแล้วฉันก็ตัดสินใจว่าจะง่ายกว่าที่จะทิ้งสมาร์ทโฟนเครื่องเก่าไว้ในกล่องบนชั้นวาง
วิธี 2FA ควรเป็น:
- ปลอดภัย - มีเพียงคุณและไม่ใช่ผู้โจมตีเท่านั้นที่ควรเข้าถึงบัญชีของคุณ
- เชื่อถือได้ - คุณสามารถเข้าถึงบัญชีของคุณได้ทุกเมื่อที่ต้องการ
- สะดวกและเข้าถึงได้ - การใช้ 2FA มีความชัดเจนและใช้เวลาน้อยที่สุด
- ราคาถูก
เราเชื่อว่าบล็อคเชนเป็นทางออกที่ถูกต้อง
ใช้ 2FA บนบล็อคเชน
สำหรับผู้ใช้ 2FA บนบล็อกเชนจะมีลักษณะเหมือนกับการรับรหัสแบบครั้งเดียวผ่าน SMS ข้อแตกต่างเพียงอย่างเดียวคือช่องทางการจัดส่ง วิธีการรับรหัส 2FA ขึ้นอยู่กับสิ่งที่บล็อกเชนเสนอ ในโครงการของเรา (ข้อมูลอยู่ในโปรไฟล์ของฉัน) นี่คือเว็บแอปพลิเคชัน, Tor, iOS, Android, Linux, Windows, MacOS
บริการสร้างรหัสแบบใช้ครั้งเดียวและส่งไปยังผู้ส่งสารบนบล็อคเชน จากนั้นปฏิบัติตามคลาสสิก: ผู้ใช้ป้อนรหัสที่ได้รับในส่วนต่อประสานบริการและเข้าสู่ระบบ
ในบทความ
- คลิกเพียงครั้งเดียวเพื่อสร้างบัญชี - ไม่ต้องใช้โทรศัพท์หรืออีเมล
- ข้อความทั้งหมดที่มีรหัส 2FA จะได้รับการเข้ารหัสจากต้นทางถึงปลายทาง curve25519xsalsa20poly1305
- ไม่รวมการโจมตี MITM - ทุกข้อความที่มีรหัส 2FA เป็นธุรกรรมบนบล็อกเชนและลงนามโดย Ed25519 EdDSA
- ข้อความที่มีรหัส 2FA จะจบลงในบล็อกของตัวเอง ลำดับและการประทับเวลาของบล็อกไม่สามารถแก้ไขได้ ดังนั้นลำดับของข้อความจึงเกิดขึ้น
- ไม่มีโครงสร้างส่วนกลางที่จะตรวจสอบ "ความถูกต้อง" ของข้อความ สิ่งนี้ทำโดยระบบกระจายโหนดตามฉันทามติ และผู้ใช้เป็นเจ้าของ
- ไม่สามารถปิดใช้งานได้ - บัญชีไม่สามารถบล็อกได้และไม่สามารถลบข้อความได้
- เข้าถึงรหัส 2FA จากอุปกรณ์ใดก็ได้ตลอดเวลา
- การยืนยันการส่งข้อความด้วยรหัส 2FA บริการที่ส่งรหัสผ่านแบบใช้ครั้งเดียวจะรู้แน่นอนว่าได้ส่งไปแล้ว ไม่มีปุ่ม "ส่งอีกครั้ง"
เพื่อเปรียบเทียบกับวิธี 2FA อื่นๆ ฉันได้สร้างตาราง:
ผู้ใช้ได้รับบัญชีใน blockchain Messenger เพื่อรับรหัสในไม่กี่วินาที - มีเพียงข้อความรหัสผ่านเท่านั้นที่ใช้ในการเข้าสู่ระบบ ดังนั้นวิธีการสมัครอาจแตกต่างกัน: คุณสามารถใช้บัญชีเดียวเพื่อรับรหัสสำหรับบริการทั้งหมดหรือคุณสามารถสร้างบัญชีแยกต่างหากสำหรับแต่ละบริการได้
นอกจากนี้ยังมีความไม่สะดวก - บัญชีต้องมีธุรกรรมอย่างน้อยหนึ่งรายการ เพื่อให้ผู้ใช้ได้รับข้อความที่เข้ารหัสพร้อมรหัส คุณจำเป็นต้องทราบรหัสสาธารณะของเขา และมันจะปรากฏในบล็อกเชนเฉพาะกับการทำธุรกรรมครั้งแรกเท่านั้น นี่คือวิธีที่เราจัดการเพื่อให้ได้มา: เราให้โอกาสพวกเขารับโทเค็นฟรีในกระเป๋าเงินของพวกเขา อย่างไรก็ตาม วิธีแก้ปัญหาที่ดีกว่าคือการตั้งชื่อบัญชีให้เป็นคีย์สาธารณะ (เพื่อเปรียบเทียบเรามีเลขที่บัญชี U1467838112172792705 เป็นอนุพันธ์ของกุญแจสาธารณะ cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. สำหรับผู้ส่งสารจะสะดวกและอ่านง่ายกว่า แต่สำหรับระบบการส่งรหัส 2FA มันเป็นข้อจำกัด) ฉันคิดว่าในอนาคตจะมีคนตัดสินใจเช่นนี้และย้าย "ความสะดวกสบายและการเข้าถึง" ไปยังโซนสีเขียว
ราคาการส่งรหัส 2FA ต่ำมาก - 0.001 ADM ตอนนี้อยู่ที่ 0.00001 USD คุณสามารถเพิ่ม blockchain ของคุณและทำให้ราคาเป็นศูนย์ได้อีกครั้ง
วิธีเชื่อมต่อ 2FA บนบล็อคเชนกับบริการของคุณ
ฉันหวังว่าฉันจะสามารถดึงดูดผู้อ่านสองสามคนให้เพิ่มการอนุญาตบล็อคเชนในบริการของพวกเขาได้
ฉันจะบอกวิธีการทำเช่นนี้โดยใช้ Messenger ของเราเป็นตัวอย่าง และในการเปรียบเทียบ คุณสามารถใช้ blockchain อื่นได้ ในแอปสาธิต 2FA เราใช้ postgresql10 เพื่อจัดเก็บข้อมูลบัญชี
ขั้นตอนการเชื่อมต่อ:
- สร้างบัญชีบนบล็อคเชนที่คุณจะส่งรหัส 2FA คุณจะได้รับข้อความรหัสผ่านซึ่งใช้เป็นคีย์ส่วนตัวเพื่อเข้ารหัสข้อความด้วยรหัสและเพื่อลงนามในธุรกรรม
- เพิ่มสคริปต์ไปยังเซิร์ฟเวอร์ของคุณเพื่อสร้างรหัส 2FA หากคุณใช้วิธี 2FA อื่นกับการส่งรหัสผ่านแบบครั้งเดียวอยู่แล้ว แสดงว่าคุณได้ทำขั้นตอนนี้เสร็จสิ้นแล้ว
- เพิ่มสคริปต์ไปยังเซิร์ฟเวอร์ของคุณเพื่อส่งรหัสไปยังผู้ใช้ใน blockchain Messenger
- สร้างอินเทอร์เฟซผู้ใช้สำหรับการส่งและป้อนรหัส 2FA หากคุณใช้วิธี 2FA อื่นกับการส่งรหัสผ่านแบบครั้งเดียวอยู่แล้ว แสดงว่าคุณได้ทำขั้นตอนนี้เสร็จสิ้นแล้ว
1 การสร้างบัญชี
การสร้างบัญชีในบล็อกเชนหมายถึงการสร้างคีย์ส่วนตัว คีย์สาธารณะ และที่อยู่บัญชีที่ได้รับ
ขั้นแรก ข้อความรหัสผ่าน 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 จากบัญชีใดบัญชีหนึ่งและสามารถตั้งชื่อได้
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 คุณสามารถใช้ blockchain node 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
สามารถดูซอร์สโค้ดสำหรับแอปพลิเคชันสาธิตการตรวจสอบสิทธิ์แบบสองปัจจัยบล็อคเชนได้ที่
ที่มา: will.com