V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
MFWT
V2EX  ›  程序员

SHA256 生成的口令被系统认为『太简单了』

  •  
  •   MFWT · 2023-09-11 21:49:27 +08:00 · 3344 次点击
    这是一个创建于 472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MJJ 日常,买了台新加坡 VPS ,到手第一件事上公钥登录和改密码

    公钥登录没毛病,ed25519 就好了,但是口令登录出了问题。我用的紧急口令登录算法是 sha256(主口令和机器 IP),然后算出来这么一串东西:

    b2622877f3047940bcfcb123c84e2e30ba9276b326982a6575e52032ecc56ce3
    

    输入到 passwd 中,系统提示太简单了无法使用

    $ cracklib-check <<< b2622877f3047940bcfcb123c84e2e30ba9276b326982a6575e52032ecc56ce3
    
      b2622877f3047940bcfcb123c84e2e30ba9276b326982a6575e52032ecc56ce3: it is too simplistic/systematic
    
    

    咕噜咕噜查了一下发现,可能是这里出了问题:

    b2622877f3047940bcf cb 123 c84e2e30 ba 9276b326982a6575e520 32 ecc 56 ce3
    

    按照说法是五六处『连续排列』的字母数字大大超出了限制,因此被认定为『太简单』

    不过,这个口令真的能被认为是『太简单了』吗?

    不知道各位 V 友有无什么好看法

    19 条回复    2023-09-12 16:06:06 +08:00
    raysonx
        1
    raysonx  
       2023-09-11 21:52:59 +08:00
    我把你的密码放到 bitwarden 提供的密码强度测试工具检测了一下,给出的结果是要几百年才能破解: https://bitwarden.com/password-strength/
    benjix
        2
    benjix  
       2023-09-11 21:56:07 +08:00 via iPhone
    因为你的密码只包含小写字母和数字,跟内容无关。
    leonshaw
        3
    leonshaw  
       2023-09-11 22:55:25 +08:00 via Android   ❤️ 1
    系统有它的规则,没必要纠结这个。要说强度,只要够长,用 0 1 两个字符就够了。
    LDa
        4
    LDa  
       2023-09-11 23:22:05 +08:00
    现在的密码强度有连续数字和滚键盘校验
    yigecaiji
        5
    yigecaiji  
       2023-09-11 23:30:11 +08:00 via Android
    只有小写和数字是这样的,可能要包含大写字母和特殊符号
    f14g
        6
    f14g  
       2023-09-11 23:39:58 +08:00 via Android
    base64 编码处理一下😂
    cosette
        7
    cosette  
       2023-09-11 23:46:17 +08:00
    长度足够,排除掉某些特殊排列的组合,在有重试限制的情况下依然是相当安全的。

    在长度受限的情况下,加入特殊符号可以一定程度上增加强度。总的来说,避开常见密码,不要太短两条原则就够了。
    1423
        9
    1423  
       2023-09-12 00:32:34 +08:00
    经典回顾
    CodeCodeStudy
        10
    CodeCodeStudy  
       2023-09-12 09:15:30 +08:00
    根据 8 楼给出的代码,b2622877f3047940bcfcb123c84e2e30ba9276b326982a6575e52032ecc56ce3
    出现了 87 bc cb 12 23 ba 76 32 98 65 32 56 ,总共 12 个地方是相邻的值,也就是代码里的变量 i
    maxrepeat = 3+(0.09*strlen(password));
    maxrepeat 是 8
    i 大于 maxrepeat ,所以提示 it is too simplistic/systematic
    jifengg
        11
    jifengg  
       2023-09-12 09:56:03 +08:00
    我倾向于是因为只有小写和数字导致的。
    aloxaf
        12
    aloxaf  
       2023-09-12 10:39:31 +08:00
    是这样的,不少密码强度检测工具都完全不考虑长度……
    leaflxh
        13
    leaflxh  
       2023-09-12 11:55:54 +08:00
    明文后面加上 fuckshit 再 sha256sum 一下(
    Admstor
        14
    Admstor  
       2023-09-12 12:22:16 +08:00
    @aloxaf 可能就是考虑到即便长但是简单也依然是弱口令

    说起来我并不建议用任何 hash 算法作为密码生成
    这并不算随机密码,某些时候与 123password 没区别
    zsh2517
        15
    zsh2517  
       2023-09-12 13:22:30 +08:00
    我没用过 cracklib-check 。不过单纯从密码系统的设计上来说,有可能是没有通过一些硬性条件的校验,比如说,大小写数字特殊符号等至少包含 X 种。如果这个硬性条件没满足那么无法通过。另外可能就是撞上了一些固定的校验规则而被一票否决(比如 idu2gi23g89y2398yh9123456ixohs0f ,因为包含 123456 可能会被否认安全性)

    大部分时候长度是能解决安全性问题的( md5(123456) 这种态简单的不算)。就像 3 楼说的,只要够长,0 和 1 两个字符都行(可以这么想,假设我有一个足够安全的密码,那么按位转二进制,安全性不会比原来的差)。

    但是一般设计上,期望用户输入的密码,大部分时候不是无限长度的,而是在一个有限长度内达到特定的安全性。

    我自己用 1password ,里面就有一类“易记密码”,比如“nightcap-boatyard-helix-goodly”,安全性评价大概与 10~11 位字母+数字相同。日用感觉是足够的,而且在不知道规则的情况下反而不容易被密码表撞上
    MFWT
        16
    MFWT  
    OP
       2023-09-12 13:37:09 +08:00
    @Admstor 那有什么好建议吗,难道真的只能随身带私钥?
    julyclyde
        17
    julyclyde  
       2023-09-12 15:08:20 +08:00
    假设被外人偷偷知道了你的密码是一个 sha256
    那么这里面“能出现哪些字符”范围就缩小很多了
    虽然不知道具体是几,但是可以穷举,而且代价比 什么都不知道 要小很多
    MFWT
        18
    MFWT  
    OP
       2023-09-12 15:47:35 +08:00
    @julyclyde

    emmm ,有什么好的建议嘛,比如用专用的密钥导出函数?
    rocksolid
        19
    rocksolid  
       2023-09-12 16:06:06 +08:00
    实际问题就是你没大写和特殊字符
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.