关于个人钱包的安全性,一直有一个很重要也很有争议的话题,那就是什么是“大脑钱包”?——利用个人大脑记忆中的密码生成私钥存储资金。从理论上讲,大脑钱包作为长期安全存储手段是最理想的方式:只要存储不用,就不容易被物理窃取(实物)或被黑客窃取;没人会知道你有钱包。但是,也有很多人反对大脑钱包。他们认为,人类的大脑极其脆弱,因此不适合生产或存储长期脆弱的密码秘密。此外,在现实生活中实现这种做法并不容易。哪一边是对的?我们的内存足够保护我们的私钥吗?归根结底,一切都取决于大脑钱包的流程。
如果当前的挑战是创造一个易记且安全的大脑钱包,那么有两个变量值得考虑:1)人们需要记住多少信息;2)不易被黑客破解的密码有多长?事实证明,面临的挑战与这两个变量密切相关。假设某些特定的特殊技能缺失,黑客运行一套最优算法攻击,两组完全等价(更准确的说是一组跟随另一组数据大小的变化)。那么一开始就应该分开处理这两个问题。
计算机专家、密码学家和数学家经常用一个包含“熵”的数据来衡量“信息”的大小。一般来说,“熵”定义为与合理信息的对数具有相同“形式”的给定信息。例如,数字57035。“57035”看似五位数,其实有十万。16.6位熵包含大约数:log(216.6) ~=10000(个)。数字61724671282457125412459172541251277是一串35位长的数据,根据log(1035) ~=116.3(位),实际包含116.3位熵。0和1的随机串的比特长度正好包含n个比特熵。所以可以得出结论,字符越长,熵越大,字符中的符号选择就越多。
另一方面,数字111111111111111234567890的长度远小于116.3比特熵;虽然它有35位数字,但这串数字不是35位数字。35位数属于相当高的水平;一整张纸上可能会列出几十亿个数字,但它可能只有30位的熵。
信息论中有一些形式化的定义,试图澄清这个直观的概念。一个叫做Kolmogorov的复杂性的观点被广泛讨论;一个数字序列的复杂度是指能打印出这个序列然后停止运行的最短计算机程序的长度。在Python语言中,上述字符也可以表示为' 1'*26 '234567890'——,一个18个字符的字符串。而6172467128245712459725则需要37个字符(实际数字引号)。这让我们对“高结构字符串类”的概念有了更正式的理解:这些字符串只是少量数据的集合。请注意,我们也可以使用其他数字处理策略;比如111211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111通过创建代表多个1序列的特殊符号,它可以被缩减到至少一半的大小。霍夫曼编码是创造这种交换理论信息的最佳算法的最好例子。
最后但同样重要的是,熵依赖于上下文。简单的霍夫曼编码序列“快速的棕色狐狸跳过了懒惰的狗”可能超过100个字节。但因为我们会说英语,又因为很多理论文章和论文都用过上面的同一句话(也就是我们熟悉的这句话),实际尚力财经小编2022熵的个数大概是25字节,——,所以姑且称之为“狐狗短语”。
那么,熵的意义是什么?本质上,熵是你需要记住的信息量。熵越多,越难记。所以,(从密码设置的角度)人们希望熵越小越好,希望很难被破解。两者是鱼和熊掌的关系。
现在,我们进入下一个问题:采取密码防范措施,防止黑客入侵。最好以黑客猜测密码的次数作为密码安全性的衡量标准。破解随机生成的密码的最简单粗暴的方法是使用暴力:首先尝试所有可能的1个字符的密码,然后尝试2个字符,以此类推。由于密码可能有n个字母和k个长度,所以需要n*k才能破解。所以密码字符用的越多越好,长度越长越好。
史蒂夫吉布森的干草堆密码:密码又长又多,很容易记住。这是怎么做到的?
请问:以下哪个密码更安全?哪个更容易破解?
D0g …………[ x]
PrXyc。N(n4k77#L!EVdAfp9你可能看出这是一个陷阱问题。答案是:第一种。第一个密码不仅“非常”好用、好记,更重要的是比下一个密码强多了!实际上,第一个密码是一长串字符。它包含大写字母、小写字母、一个数字和一些特殊符号。所以破解这种密码要比不可能记住的第二种密码多花95倍的时间。史蒂夫写道:“几乎所有人都一直认为或者被告知,密码本身的强度可以从“高熵”密码中推导出来。”但是我们可以看到,这种“智慧”是。不正确!原因是它取决于被广泛使用的特定攻击属性。如果这种做法变得普遍,将促使黑客发明一种特殊的方法来解决这一漏洞。另外还有一种广义攻击:只要给出一定数量的密码泄露样本,一切都可以自动更新解决。请参考马尔可夫链样本。算法工作方式如下:假设你的密码字母表只包含尚力财经小编2022字符0和1。从样本可知,0之后的一个数字有65%的几率是1,有35%的几率是0;1后面的数字有20%的几率是0,有80%的几率是1。随机选取样本,创建一个包含这些概率的有限状态机,放入一个简单的配额循环过程:Python代码如下:Import RandomI=0While 1:?如果i==0:?I=0 if random . rand range(100)35 else 1?elif i==1:?I=0 if random . rand range(100)20 else 1?Print i我们挑选出输出信号并进行分解,这样我们就可以模仿人们实际使用密码的方式。我们可以把这两个字符总结成一个完整的字母表,甚至可以追踪这种状态:不仅是最后一个字符,还有最后两个,或者三个,甚至更多。所以,如果大家都开始用“d0g…………”这样的字符,那么在看了成千上万的马尔可夫链之后,我们就可以“学习”人们经常使用的长串了。如果是输出一段时间,那么可能暂时停留在几个步骤的打印循环中,也就是有一定概率的抄袭人的行为。有一个问题被忽略了,就是如何终止循环。代码只是一串包含0和1的无限长的字符。我们可以在字母表中引入一个伪符号来表示一个字符串的结束,将观察到的符号频率放入马尔可夫链概率中,但不适用于上面的例子。——因为更远的密码大多更短,所以输出的密码也更短,所以在尝试更长的密码之前,会进行数百万次尝试来重复短密码。因此,我们可能希望手动将尚力财经小编2022其剪切到一定长度,并随着时间的推移增加长度。这种方法叫做“语言模式”——。根据需要,字符或单词的顺序可以是简单和粗略的,也可以是复杂的。吉布森策略失败,其他类似策略不可行的根本原因是熵的定义和强度是一对有趣的等量。熵是可能性数量的对数,力是可能性的数量。 简而言之,记忆能力和攻击能力是完全不变的,相等的!无论你是从字母表中随机选择字符,还是从有偏差的表格中随机选择字符,这个定理都适用(例如,“1”的概率是80%,“0”的概率是20%)。这样,想要一个既安全又好记的密码就没希望了。简化记忆,强化攻击难度希望。不一定。虽然我们知道需要记忆的熵数和攻击者需要闯入的空间大小是完全一样的。在现实生活中,我们可以把复杂的方程变成我们的优势。最重要的是,人类不像计算机那样储存记忆;我们准确记忆信息的方式往往取决于记忆的方式和形式。比如潜意识里我们可以记住上千字节的人脸,但是同样数量字节的狗脸就很难记住,文字形式的信息就更难了,但是如果视觉和口头同时记住,就会相对容易一些。有人试图利用这一优势生成随机大脑钱包,并用一系列数字进行编码;比如我们会看到接下来这句话:女巫崩溃练习馈羞再次开启绝望之路在ice lease有一组流行漫画XCD就说明了这个原理:用户通过生成四个随机单词来创建密码。这种方法看似简单,我们不需要记住这些随机的符号和语言。但事实证明这种方法行不通。卡内基梅隆大学的理查德谢伊(Richard Shay)等学者最近发表了以下报告:以1476人为样本进行了一项在线调查。调查结果显示,3-4位系统分配密码,5-6位系统随机分配密码,8位系统分配发音密码。令人惊讶的是,系统分配的密码与我们之前调查的可用数量熵系统的结果相似。密码和密码遗忘的速度是一样的,导致用户的困难和困扰程度也是一样的。但是,参与者通过密码登录需要更多的时间。如果密码输入不正确,需要更长时间才能再次登录。减少字符使用选择、减少密码数量或允许用户更改密码顺序的可用性似乎并没有提高。然而,这份报告仍然给我们留下了一线希望。指出有增加熵的方法提高高密码的安全性,同时便于记忆。像“zelactudet”(由某种抽样语言模型创建的单词)这样的随机发音的字符串似乎不仅提供了一个合适的单词列表,而且还随机生成了字符串。一种可能的解释是,发音密码可以同时记忆为声音和一系列字母,从而增加了字符的长度。这样,我们至少可以有一种方法,在不减少密码长度的情况下,提高我们的记忆力。另一个策略是在另一端攻击问题:在不增加熵的情况下,密码尽可能难破解。我们不能通过增加更多的组合让密码变得难以破解,因为这样会增加熵数,但是如果用一种叫硬键求导函数的东西。比如,假设人记忆中的大脑钱包是B,私钥sha256(b)或sha3(b)不适用,称为F(b,1000)。F的定义如下:def F(b,rounds):?x=b?i=0?而我轮:?x=sha3(x b)?i=1?Return x本质上,我们一遍又一遍地把B返回给hash函数,1000个周期后输出值。在每个周期中,不需要严格替换原始数据,但是密码学家推荐它限制预先计算好的“彩虹表”在被攻击时的影响。这样一来,检查一组独立的密码就需要很多次操作。作为合法用户,您不会注意到差别是20微秒而不是20毫秒。不需要记住任何东西就可以免费获得10位熵。如果达到30000个周期,可以得到15比特的熵,但是计算一个密码需要1秒左右,计算20比特需要20秒。如果超过23位的最大限制,则不能使用。 现在,我们有了更进一步的办法:外包超级土豪——KDFs。这种方法使用了一组函数,运行这组函数的代价非常大(比如240个计算步骤),但是我们也可以在不计算实体函数的情况下得到输出数据。最简单,但密码也是最复杂的。使用“blind”功能,即unblind (f (blind (x))=f (x),“blinding”和“unblind”需要一次性随机生成密码。然后计算“盲”(也就是密码),再把工作交给第三方,最好是和ASIC合作。最后得到结果,就可以“解盲”了。这方面的一个例子是使用椭圆曲线加密:生成的弱曲线的“值”只有80位,而不是256位。也就是说,通过取一个值的散列函数,我们可以计算出值X,并在曲线上找到相关的Y。然后我们添加一个随机生成的点N(点N与私钥相关)和“致盲”(x,y)点,最后把结果交给一个服务器来破解。一旦服务器得到私钥对应的N (x,y)减去N,就可以得到私钥对应的(x,y)点——,也就是我们想要的结果。服务器不知道这个值包含什么信息,甚至不知道(x,y)是什么。——理论上,任何事情都可能与n因子上述文章内容就是。请注意,用户只需将获得的私钥转换为一个“点”,并确保该点为(x,y),即可即时验证作品——。另一种方法不太依赖弱椭圆曲线的代数特征:使用一个哈希函数从一组密码中导出20个种子,每个种子使用一个非常困难的工作证明问题(例如计算f (h))。这是可以避免的,除非所有20个服务器都串通好了(如果用户使用Tor)。因为攻击者不可能从同一个用户那里控制或100%关注网络的结果),否则协议是非常安全的。这两个协议有趣的地方在于,它们可以很容易地将区块链转化为“有用的工作证明”共识算法;任何人都可以在链上提交作品,区块链会执行计算,两条椭圆离散曲线的对数和基于哈希函数的作品证明都可以轻松证明。这个计划最好的部分是,用户使用计算机计算功能的成本变成了社交使用,攻击者的成本更昂贵。如果区块链为工作证书提供资金,那么将工作提交给区块链是攻击者试图破解用户密码的最佳方式。然而,在现实生活中,以一个密码需要240次计算的安全水平,大脑钱包中的其他密码会变得非常安全,没有人愿意花时间和精力去破解它们。熵“差”现在是最后也是最有趣的一步:记忆法。从上面的讨论可以看出,熵是一条信息中的信息量,等于攻击的复杂程度,除非你用昂贵的KDFs来刻意减少处理过程。但是,关于熵还有一点需要提一下,非常重要:熵依赖于上下文。对我们来说,“马哈茂德艾哈迈迪内贾德”这个名字可能有10到15个熵。但对于那些生活在伊朗的人来说,总统“马哈茂德艾哈迈迪-内贾德”可能只有四个熵——,他很可能在VIP名人榜中排名前16。我不认识你的父母或配偶,所以他们的名字对我可能有20个熵,对你可能只有2-3个熵。这是怎么回事?从形式上来说,最好的办法就是想想大家以前的生活经历,创造点什么。种压缩算法,更具不同的压缩算法或不同的编程语言,相同的字符串可以得到不同的柯尔莫哥洛夫复杂性。在Python语言中,’111111111111111111′ 即’1′*18,但在Java脚本中’111111111111111111′是Array(19).join(“1″)。在Python算法的一个假象版本中,将变量x预设为’111111111111111111′,就只是个“x”。最后再举个例子,虽然挺起来比较做做,但其实最能说明现实世界:人的心灵就像是一台基于我们过去经验,有着许多不同预设的机器。现在,我们继续深入地来看一下这个问题。现在,选择书中的一个短语或歌曲作为自己的密码被普遍嘲笑为是一个不值钱的方法。但为什么这个方法曾经很诱人呢?因为它看似善于利用差异:一组短语可能有超过100位的熵,但你只需要记得书名、书页和行数即可。但问题是,别人也能看到这本书。黑客要想做一个能强行攻击与该信息相关的所有书籍、歌曲和电影的程序是件非常简单的事。这个建议其实不值钱。为什么这么说?如果仅作为密码的一部分,那么从书、歌曲或者电影中截取信息是一个不错的选择。理由很简单:它制造了差异。从你最喜欢的歌曲里摘选一句歌词对你而言只有几位熵。但不是所有人都喜欢这首歌,所以对其他人来说这句歌词可能有10或20为熵。最佳策略是挑选你真的很喜欢的书或歌曲,但也最大限度晦涩难懂的(小众)——降低自己的熵从而提高他人的熵。当然,在你的用户名前追加一些随机的字符(甚至一些随意组成的单词,如“zelactudet”),并利用安全的KDF。结论拥有多少位熵才算是安全的?眼下,破解密码的芯片每秒可尝试236次破解,比特币矿工每秒可以运行约240次哈希函数(即1 terahash)。整个比特币网络,总计进行 250次/tahashes,即约257次哈希函数/秒。密码学家普遍认为,280是可接受的最小安全水平。要想有80位熵,你需要约17个随机英文字母或12个随机字母、数字和符号。然而,我们可以降低点标准:一个用户名有15位,一个好的KDF有15位,从歌曲或书籍中摘选的所写能有10位,剩下的40多位仍用旧计划中的随机选择。如果你用的KDF不是很好,也可以选择其他密码成分。信息安全专家普遍认为取消密码必然是不安全的,他们主张要对密码设定方案进行彻头彻尾的更换。一种常见的说法是,基于摩尔定律我们知道攻击者的力量没2年会增加1位熵,故为保护密码安全,人们不得不记住越来越长的密码。但是,这一说法不完全正确。如果你使用强力KDF,那么基于摩尔定律,一旦攻击者增长攻击力量,用户便能获取增长的这部分力量。若真如上述说法,除KDFs(较温和的,不是可被外包的那种)外,暂时还没有其他选择。总而言之,密码目前依然保持着过去所拥有的安全性,并继续作为一种强大的安全策略要素存在——但不是唯一要素。像同时使用硬件钱包、可信赖的第三方和脑钱包这组温和的方式最终可能成为主流。作者:Vitalik Buterin译者:SunjeonLOVEs_抽抽BTC地址:1C785T4cQfSuv6rrv6i2vbksruJbyGvksK