V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
d5
V2EX  ›  程序员

试问 sha256 后能否公开数据😂

  •  
  •   d5 · 2021-10-05 19:57:26 +08:00 · 2672 次点击
    这是一个创建于 1147 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有一组账号密码形式的数据,形式为

    202104050006-abcdf
    202104050007-lpdog
    202104050008-xmfrj
    

    每一行数据进行sha256,存于一个文件 data.txt 当中。

    6acb3db4372b25120478f1ebba3cb7c676e54498aadb95ce5535b771241a4f38
    a571db9107d9b35f41e4a0a6f02d841539ce8064ca9ba9c87c4e5cad83801fb0
    4ac22a8f2694e927475d1358d484776750f36242fb5a0c6ee622d1572dbedc12
    

    能否直接将加密后的 data.txt 数据发布在公网 Github 仓库中给所有人可见,利用 Github Action,对用户输入账号和密码并触发的 Action(Pipeline),进行校验。账号-密码组合确实存在于这个 data.txt 文件当中的,予以放行后序步骤。

    https://i.imgur.com/w5Sfy3d.jpg

    • 对于这样的设计,是否存在数据泄漏的风险?
    • 是否有可能通过一些手段绕过 Github Action 的前置步骤?

    主要是不想维护数据库或服务器或 HTTP 接口。充分利用 Github Issue Template / Github Discussions / Github Action / 等特性实现相关的社区自治功能。

    感谢各位的解答,国庆愉快!🇨🇳

    11 条回复    2021-10-05 23:00:40 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-10-05 20:08:42 +08:00 via Android   ❤️ 1
    可以,sha 不可逆,只要密码别太短,否则可以拖走离线暴力破解,建议直接 20 位以上字母数字,让人直接复制粘贴使用,
    action 最大的安全问题是,对方有没有 push 修改 action yml 文件的权限,
    rekulas
        2
    rekulas  
       2021-10-05 20:09:23 +08:00   ❤️ 1
    有一定泄露风险问题,泄露概率负相关于加密字符串难度,因为别人可以直接本地暴力运算指定账号密码,从你给的示例来看难度似乎不太高。
    绕过 actions 应该是很难的,除非代码有 bug,输入参数直接 hash,不存在攻击可能性
    rekulas
        3
    rekulas  
       2021-10-05 20:12:30 +08:00   ❤️ 1
    建议给每个用户添加盐值,越复杂越好,基本就不可破解了
    ysc3839
        4
    ysc3839  
       2021-10-05 20:21:27 +08:00 via Android   ❤️ 3
    hash 密码的话建议直接用 Argon2 。
    rpman
        5
    rpman  
       2021-10-05 20:22:46 +08:00   ❤️ 1
    首先你要假设 github action 的执行是可以信赖的
    然后加盐逻辑会暴露.. 得要求用户密码位数够长
    d5
        6
    d5  
    OP
       2021-10-05 20:27:43 +08:00
    @AoEiuV020 @rekulas 十分感谢两位老哥的解答,接上文:

    给<每一个用户>加盐,如何在没有外部服务的情况下完成自动化验证呢?每个用户的盐应该怎么管理。

    如果给<每一个用户>加相同的盐,或者对 data.txt 用公钥再次加密一次。执行 Action 的时候,从 Secrets 里取盐来计算或者取私钥来解密。这个盐或者私钥只有少数 Maintainer 拥有,能否实现相对安全。
    Trim21
        7
    Trim21  
       2021-10-05 20:31:41 +08:00 via Android   ❤️ 1
    可以把账号密码放在一个 private repo 里面,然后设置一个 personal access token 去读…这样就不用自己额外维护接口了
    rekulas
        8
    rekulas  
       2021-10-05 20:38:19 +08:00   ❤️ 1
    @d5 这样应该可以,如果不依赖外部服务,盐起不了防范暴力破解的作用,但 secrets 可以,非对称也不是必须的,只需要用 secrets 也作为 hash 参数就足够安全了
    举例,库配置定义个 TOKEN
    ```
    SHA_SAFE_TOKEN=ec4fa26383768f35a34c3962faea2e91
    ```
    公开库记录密码值 sha256("202104050006-abcdf"+SHA_SAFE_TOKEN)
    登录验证的时候保证 sha256(input+SHA_SAFE_TOKEN) == 记录值即可
    只要 SHA_SAFE_TOKEN 不泄露,就绝对安全
    rekulas
        9
    rekulas  
       2021-10-05 20:41:42 +08:00   ❤️ 1
    又考虑了下,写入用户密码的时候如果不依赖外部服务,可能是需要非对称加密才行,只需要隐藏私钥就行了,目前的计算环境下足够可靠,只要 github 自身不泄露的话...
    d5
        10
    d5  
    OP
       2021-10-05 20:46:15 +08:00
    @ysc3839 @rpman 感谢老哥指导我还得补习下知识,目前确实是假设的 github action 的执行是可以信赖的。

    @Trim21 卧槽老哥的方法非常鬼才,非常奇技淫巧,也是非常非常好的方法

    @rekulas 是这个意思,感谢指导,确实我的语文表达还是让各位大神看懂了😂

    再次感谢🙏
    eason1874
        11
    eason1874  
       2021-10-05 23:00:40 +08:00   ❤️ 1
    密码摘要用 bcrypt 更好

    bcrypt 是密码散列,慢散列。同样内容,bcrypt 比其他散列更抗爆破
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3632 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:20 · PVG 12:20 · LAX 20:20 · JFK 23:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.