如何在区块链上确保二次验证2FA安全
SMS消息是最流行的两因素身份验证(2FA)方法。银行,电子和数字货币包,邮箱和各种服务都使用它。此方法的用户数接近100%。
我不喜欢这样,因为通过SMS方法的2FA是不安全的。从移动时代开始,就将号码从一张SIM卡重新分配给了另一张。用于在SIM卡丢失时恢复号码。“数字货币断奶专家”意识到,此“覆盖SIM卡”选项可用于欺诈性计划。毕竟,控制SIM卡的人可以管理其他人的网上银行,电子钱包,甚至是加密货币。而且,您可以使用欺诈或伪造文件贿赂电信员工,从而超越他人的电话号码。
数以千计的SIM卡交易所事件已被揭露-这就是所谓的欺诈方案。灾难的严重性表明,世界很快将通过SMS放弃2FA。但这并没有发生- 研究表明选择2FA方法的不是用户,而是服务所有者。
我们建议使用安全的2FA方法,通过区块链传递一次性代码,这是将其应用于服务的方法。
百万票据
根据伦敦警方的数据,2019年,SIM卡掉期欺诈增加了63%,攻击者的“平均支票”为4,000英镑。
SIM卡交易所用于窃取流行的Twitter,Instagram,Facebook,VK帐户,银行帐户,以及最近使用的加密货币。据《泰晤士报》报道,因黑客而失去电话号码的人数正以惊人的速度增长。的确,一位比特币企业家乔布·周斯(Joby Weeks)表示,他在加密货币社区中认识的每个人都已经窃取了他们的号码。自2016年以来,大众媒体报道了备受瞩目的互换案件,而在2019年,此类案件的数量达到了顶峰。
早在5月,密歇根州的美国检察官办公室报告说,有6个人被控进行在线身份盗窃。据称,年龄在19至26岁的被告与一个名为“社区”的黑客组织有联系。据说他们进行了七次攻击,导致价值240万美元的加密货币被盗。另一个众所周知的SIM骗局交易所案是Joel Ortiz,他被控在线盗窃超过750万美元的加密货币,并被判处10年徒刑。
乔尔·奥尔蒂斯(Joel Ortiz)在大学新闻发布会上。两年后,他将因网络欺诈而被拘留。
三步欺诈使您像乔布斯的火鸡一样贫穷
SIM骗局交易所者利用运营商的能力将电话号码移植到新的SIM卡上,这样,他们就可以盗用受害者的号码并用它来重置PIN。典型的SIM卡交易所过程分为三个步骤:
- 偷窥。欺诈者掌握个人信息,例如名字和姓氏以及电话号码。他们有时会如此轻松地进行操作并不奇怪,因为该信息可以在社交媒体上找到或从同谋(例如客户服务代表)那里获取。
- 阻塞。例如,欺诈者打电话给移动网络运营商,并通过说手机丢失来阻止受害者的SIM卡。
- 猛扑 此步骤通常在帮凶或伪造正式文件的情况下执行。
如果罪犯设法获取受害者的电话号码和个人数据,他们可以从信用卡或数字货币包中窃取钱财。
真实生活更加严格。一旦罪犯找到受害者,他们就会每天跟踪手机的位置。它的成本出乎意料地少了一点钱-一个GP请求大约是1-2美分。罪犯被告知受害者在漫游区后,他们向通讯商店的经理索要新的SIM卡。它的成本仅为50美元,最坏的情况是经理将被解雇。
这样,犯罪分子将收到所有短信,而受害者(例如,他们在国外)将无能为力。此时,犯罪分子可以访问受害者的所有帐户,并尝试尽快更改密码。
时刻保持警惕
有时,银行与受害者合作并撤出资金。为此,即使从未找到罪犯,也可以退还法定货币。但是,对加密货币进行同样的操作并不容易,因为它通常是无法跟踪的。没有法律可以保护加密货币持有人免受SIM骗局交易所或其他欺诈方案的侵害,直到今天,还没有一个加密货币交易所能够成功补偿受害者的损失。
如果有人想打官司并取回他们的钱,他们通常会专注于提供者的故障。例如,SIM卡交易所受害者之一迈克尔·特平(Michael Terpin)损失了2.24亿美元。他现在正在起诉电信提供商AT&T。
正如我们之前所告诉的,没有现任政府能够通过法律途径保护加密货币持有者,为此,他们甚至无法确保其资金安全并获得赔偿。因此,有必要防止可能的SIM卡交易所骗局,以使人们不必面对后果。俗话说,安全胜于遗憾,为此,世界需要更强有力的保护手段。
通过短信问题,SIM卡交易所不是唯一的2FA
从技术角度来看,SMS确认代码也不安全。由于信令系统7(SS7)中存在致命漏洞,因此可以截获消息。SMS的2FA被正式确认为不安全(美国国家标准技术研究院在其数字身份指南中对此进行了声明)。
而且,2FA的出现通常会激发用户虚假的安全感,并且他选择了一个更简单的密码。因此,这种身份验证并不复杂,但是可以使攻击者更容易访问该帐户。
而且,SMS经常会延迟很长时间甚至根本不会延迟。
其他2FA方法
当然,除了智能手机和SMS之外,还有其他一些东西,还有其他2FA方法。例如,一次TAN编码:该方法是原始方法,但它可以工作-在某些银行中仍在使用。有些系统使用生物特征数据:指纹,视网膜扫描。在方便性,可靠性和价格方面,另一个似乎合理折衷的选择是2FA的特殊应用:RSA令牌,Google身份验证器。还有物理键和其他方法。
从理论上讲,一切看起来都是逻辑可靠的。但是实际上,现代2FA解决方案存在问题,并且由于这些问题,现实与期望有所不同。
根据该研究,使用2FA原则上是一种不便,通过SMS进行2FA的普及可以通过“与其他方法相比不那么麻烦”来解释-接收一次性代码对于用户而言是可以理解的。
许多用户将2FA与担心失去访问权限联系起来。物理密钥或TAN密码列表可能会丢失或被盗。我个人使用Google Authenticator的经历很消极。我使用该应用的第一部智能手机坏了;恢复帐户访问的工作量很大。另一个问题是过渡到新设备。出于安全考虑,Google Authenticator没有任何导出功能(如果可以导出密钥,则显然没有安全性)。我曾经手动转移了密钥,然后决定将旧的智能手机放在架子上的盒子里比较容易。
2FA方法应为:
- 安全-只有您才能访问自己的帐户;
- 可靠-您随时可以访问自己的帐户;
- 方便且易于使用-只需很少的时间即可使用;
- 便宜的。
我们认为区块链是合适的解决方案。
通过区块链使用2FA
从用户的角度来看,区块链2FA看起来与通过SMS接收一次性代码相同。唯一的区别是交付渠道。获取2FA代码的方式取决于区块链提供的内容。在ADAMANT中,方法是Web应用程序,Tor,iOS,Android,Linux,Windows,MacOS。
该服务生成一次性代码并将其发送到区块链Messenger。此外,一切照常进行:用户输入收到的代码并登录。
在我的《去中心化区块链信使的工作原理》一文中,我写道,区块链可确保消息传递的安全性和私密性。关于发送2FA代码的主题,我将重点介绍:
- 一键创建一个帐户;不需要电话或电子邮件地址。
- 所有带有2FA代码的消息都使用curve25519xsalsa20poly1305进行了端到端加密货币。
- MITM攻击是不可能的-具有2FA代码的每条消息都是由Ed25519 EdDSA签名的区块链交易。
- 包含2FA代码的消息进入其块。块的顺序和时间戳不能更改,因此消息的顺序。
- 没有中央结构可以检查“消息的真实性”。这是由基于共识的分布式节点系统完成的,它属于用户。
- 无法禁用-无法阻止帐户,也不能删除邮件。
- 随时可以从任何设备访问2FA代码。
- 2FA消息的传递确认。一种发送一次性密码并确定已交付密码的服务。没有“再次提交”按钮。
这是其他2FA方法的比较表:
用户可以在ADAMANT区块链Messenger中快速获得一个帐户来接收代码-仅使用密码登录。因此,应用方法可以不同:您可以使用一个帐户来获取所有服务的代码,也可以创建每个服务都有一个单独的帐户。
还有一个不便之处-一个帐户必须至少进行一次交易。为了接收包含代码的加密货币消息,您需要知道用户的公钥,该公钥仅在第一次交易时才出现在区块链中。我们通过以下方式避免了这种情况:实现了在钱包中获取免费代币的机会。但是,更正确的解决方案是使用公用密钥命名帐户。(为了进行比较,帐户是U1467838112172792705,它是公用密钥cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada的派生产品。对于Messenger来说,这更方便易读,但对于2FA代码发送系统而言,这是一个限制)。我认为将来会有人将这种解决方案的“便利性和可访问性”转移到绿色区域。
发送2FA代码的成本确实很低-0.001 ADM(当前约为0.00001 USD)。同样,您可以使用自己的规则制作区块链并将价格设为零。
如何通过区块链将2FA连接到您的服务
我希望我能够引起一些读者的兴趣,以将区块链授权添加到他们的服务中。
我将以ADAMANT Messenger为例来告诉您如何执行此操作,以此类推,您可以使用另一个区块链(如果存在支持发送2FA代码的任何区块链)或基于ADAMANT运行自己的区块链。
在2FA演示应用程序中,我们使用postgresql10来存储帐户信息。
连接步骤:
- 创建一个用于发送2FA代码的帐户。您将收到一个密码短语,该密码短语用作加密货币消息签名交易的私钥。
- 将脚本添加到服务器以生成2FA代码。如果您已经将其他2FA方法与一次性密码传递一起使用,则您已经完成了此步骤。
- 将脚本添加到服务器以将代码发送给区块链Messenger中的用户。
- 创建一些用于发送和输入2FA代码的用户界面。如果您已经将其他2FA方法与一次性密码传递一起使用,则您已经完成了此步骤。
步骤1:建立帐户
在ADAMANT中,您可以创建帐户以手动从Web应用程序中发送代码。在大多数情况下,这对用户也更方便:他们知道该服务从特定帐户发送2FA代码并可以对其进行命名。
如果要以编程方式生成帐户,请使用ADAMANT节点API,控制台或JS API:https ://adamant.im/devs/ 。
通常,在区块链中创建帐户是生成私钥,公钥以及从中派生的帐户地址。
首先,生成BIP39密码,使用该密码计算SHA-256哈希。散列用于生成“ ks”(私钥)和“ kp”(公钥)。再次使用具有公钥倒置的SHA-256,我们获得了区块链地址。
步骤2:2FA代码生成
需要为每个用户登录生成2FA代码。我们使用speakeasy库,但您可以选择其他任何库。
const hotp = talkeasy.hotp({ counter, secret:account.seSecretAscii,});
用户输入的2FA代码验证:
se2faVerified = talkeasy.hotp.verify({ 计数器:this.seCounter, 机密:this.seSecretAscii, 令牌:hotp,});
步骤3:发送2FA代码
您可以使用ADAMANT区块链节点API发送2FA代码以及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} =等待exec(command);
发送消息的另一种方法是使用JS API库 send
方法。
步骤4:使用者介面
用户需要输入2FA代码的可能性,这可以通过多种方式完成,具体取决于应用程序的平台。我们在示例中使用Vue。
可以在GitHub上查看区块链2FA授权演示应用程序的源代码:https : //github.com/Adamant-im/adamant-2fa。请参阅自述文件以获取实时演示链接。