脑洞大开,前端 LOGIN 界面模糊登录实现, 原理是利用 QRCODE 里错误纠错功能,对用户输入的密码进行纠错处理。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
3dwelcome
V2EX    问与答

脑洞大开,前端 LOGIN 界面模糊登录实现, 原理是利用 QRCODE 里错误纠错功能,对用户输入的密码进行纠错处理。

  •  
  •   3dwelcome 2016-03-18 10:03:01 +08:00 3444 次点击
    这是一个创建于 3494 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先给用户表增加一个字段,起名为 ECC(Error Correction Code)纠错字段。为每个已注册用户的密码,进行 QRCODE 里等级 H 的 30%容错数据恢复功能。

    然后服务器根据前端 HTML POST 提交上来的密码,进行模糊配对。比如说有个用户叫 v2ex, 密码为 v2expassword, 用户在某次登录的时候,错误的把密码输成了 v3expassword, 登录失败。这时候就针对密码,做修复处理, ECC(v3expassword) = v2expassword, 和数据库匹配,登录成功。

    19 条回复    2016-03-23 19:41:47 +08:00
    CDuXZMAPgHp1q9ew
        1
    CDuXZMAPgHp1q9ew  
       2016-03-18 10:04:40 +08:00
    我数学差,谁能帮我算算按照 30%的容错, 公用多少个密码可以击中正确的密码
    CDuXZMAPgHp1q9ew
        2
    CDuXZMAPgHp1q9ew  
       2016-03-18 10:04:48 +08:00
    我数学差,谁能帮我算算按照 30%的容错, 共有多少个密码可以击中正确的密码
    pimin
        3
    pimin  
       2016-03-18 10:10:11 +08:00 via Android
    你这个容差不如基于用户习惯设定容差
    比如这个用户经常输错密码
    正确密码的 1364579
    但是用户经常打成 2Bqingnian ,打完之后又可以打成对的登录
    长期以后默认 2Bqingnian 为第二密码
    3dwelcome
        4
    3dwelcome  
    OP
       2016-03-18 10:30:41 +08:00
    30%容错不会存在大量撞库, ECC 预处理是需要先确定密码长度的,然后用多项式来识别密码字符串中,那几个字符有潜在错误问题,最后尝试修复。

    黑客那种完全不知道你密码长度,只凭借用户名,就要猜出正确或者接近的密码,几乎不太可能。
    imn1
        5
    imn1  
       2016-03-18 10:41:44 +08:00
    明文保存密码么?
    SpicyCat
        6
    SpicyCat  
       2016-03-18 10:46:19 +08:00
    岂不是要明文保存密码?
    3dwelcome
        7
    3dwelcome  
    OP
       2016-03-18 10:47:04 +08:00
    可以不用明文的, MD5(ECC(v3expassword)) = MD5(v2expassword)

    计算好 ECC 后,就完全不需要密码明文了。就算数据库被盗,只靠 ECC 字段的多项式数据,也没办法还原密码,数据量太少了。
    3dwelcome
        8
    3dwelcome  
    OP
       2016-03-18 10:52:17 +08:00
    数据库里存的是密码 hash ,但每次用户登录是, POST 提交用户密码的时候,需要明文传输,不过也是安全的。

    具体请见另一篇文章: Nurbs 三维曲面传输明文密码,保证不被中间人窃听。就是把密码当作平面 X,Y 坐标,投影到三维空间后变成 X,Y,Z 加密传输,服务器端拿到三维坐标,再投影到平面还原密码。中间人没有 nurbs 公式,没办法还原密码。
    imn1
        9
    imn1  
       2016-03-18 11:09:56 +08:00   1

    那在什么时候算 ECC 呢?用户设定密码的时候?
    输入的时候如果没有明文对照,“容错”概念是什么?

    其实怎么讨论也没用,密码不能容错
    因为一旦容错,权责就分不清了
    ctsed
        10
    ctsed  
       2016-03-18 11:12:39 +08:00   1
    我改密码就只改第一个字符,这样岂不是旧密码还能登录
    3dwelcome
        11
    3dwelcome  
    OP
       2016-03-18 11:21:26 +08:00
    "那在什么时候算 ECC 呢?用户设定密码的时候?", 第一次写数据库前,把明文密码做 ECC 处理,生成 ECC 多项式字段保存在数据库里,然后把明文密码变成哈希密码,存到数据库密码字段里。

    ECC 神奇的地方,是修复后,只需要凭借修复字段和模糊错误密码,就能猜出原正确密码,计算出密码 hash 。

    举个例子,你 winrar 加入的压缩修复功能后,数据有部分损坏也能自我修复,并不需要保存一个原数据副本的,你只要有原文的哈希值作为对比就可以了。和不用保存明文密码一个意思。

    ---------------
    "我改密码就只改第一个字符,这样岂不是旧密码还能登录"
    模糊登录本来就是干这个的,哈哈。
    menc
        12
    menc  
       2016-03-18 13:58:43 +08:00
    乖乖地用安全性高的密码吧少年,
    以十位密码为例, 30% 为 3 位容错

    密码字符取:大小写 52 个 + 数字 10 个 + 特殊字符 32 个(自己去键盘上查一下) = 94 个

    则被认为是正确密码的错误密码有
    94 ^ 3 * C(10, 3) - 1 = 99670079 个, 近一亿个密码是可以命中的。
    menc
        13
    menc  
       2016-03-18 14:01:46 +08:00   1
    建议去学习信息论 QR Code 的信息冗余是充分的,加上 QR Code 的信息量不大,所以修复是简单的。

    另外,请让安全工具回归安全的本真,不要想着在这里优化用户体验,一旦有人被通过错误密码成功登录了,根本就是没办法摆脱罪责的事情。
    3dwelcome
        14
    3dwelcome  
    OP
       2016-03-18 14:15:08 +08:00
    黑客并不知道用户的密码位数是多少,假设盲目暴力猜测,一位一位的穷举尝试, 93 + 93^93 + 93^93^93 ... 一直尝试到第九位攻击结束,近 5260677251 亿次密码攻击是完全无效的,然后才开始有效攻击。
    menc
        15
    menc  
       2016-03-18 15:05:47 +08:00
    @3dwelcome 笑尿,你至少算一下期望好不好,你这是什么计算方法。

    你这种奇怪的计算方式,万一用户的密码是 000000^&*呢?本来挺强的密码,用 00000000 直接就登录成功了。尝试实验次数: 1 次
    cnnblike
        16
    cnnblike  
       2016-03-18 15:11:44 +08:00
    看了下楼主注册时间,原来如此……
    jedihy
        17
    jedihy  
       2016-03-23 07:27:23 +08:00
    一个很大的问题是,你怎么优化你的数据库去做这样的查询。动辄以此登陆几十上百次查库,你的网站能支持多少人登陆?
    3dwelcome
        18
    3dwelcome  
    OP
       2016-03-23 09:24:44 +08:00
    @jedihy 你没理解,不需要几百次查库的。用户在全密码匹配登录失败的时候,才会触发系统的纠错,这种情况很少的。而这时候,仅仅只需要一条查询,就可以把单一用户的恢复数据取出来,就一个 blob 小字段而已。

    举个不恰当的例子,就是类似正则的密码模糊匹配登录。
    xavierskip
        19
    xavierskip  
       2016-03-23 19:41:47 +08:00 via Android
    脑洞太歪了。铜币拿走,不送
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1119 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:01 PVG 02:01 LAX 11:01 JFK 14:01
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86