假设有一组账号密码形式的数据,形式为
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
主要是不想维护数据库或服务器或 HTTP 接口。充分利用 Github Issue Template / Github Discussions / Github Action / 等特性实现相关的社区自治功能。
感谢各位的解答,国庆愉快!🇨🇳
1
AoEiuV020 2021-10-05 20:08:42 +08:00 via Android 1
可以,sha 不可逆,只要密码别太短,否则可以拖走离线暴力破解,建议直接 20 位以上字母数字,让人直接复制粘贴使用,
action 最大的安全问题是,对方有没有 push 修改 action yml 文件的权限, |
2
rekulas 2021-10-05 20:09:23 +08:00 1
有一定泄露风险问题,泄露概率负相关于加密字符串难度,因为别人可以直接本地暴力运算指定账号密码,从你给的示例来看难度似乎不太高。
绕过 actions 应该是很难的,除非代码有 bug,输入参数直接 hash,不存在攻击可能性 |
3
rekulas 2021-10-05 20:12:30 +08:00 1
建议给每个用户添加盐值,越复杂越好,基本就不可破解了
|
4
ysc3839 2021-10-05 20:21:27 +08:00 via Android 3
hash 密码的话建议直接用 Argon2 。
|
5
rpman 2021-10-05 20:22:46 +08:00 1
首先你要假设 github action 的执行是可以信赖的
然后加盐逻辑会暴露.. 得要求用户密码位数够长 |
6
d5 OP |
7
Trim21 2021-10-05 20:31:41 +08:00 via Android 1
可以把账号密码放在一个 private repo 里面,然后设置一个 personal access token 去读…这样就不用自己额外维护接口了
|
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 不泄露,就绝对安全 |
9
rekulas 2021-10-05 20:41:42 +08:00 1
又考虑了下,写入用户密码的时候如果不依赖外部服务,可能是需要非对称加密才行,只需要隐藏私钥就行了,目前的计算环境下足够可靠,只要 github 自身不泄露的话...
|
10
d5 OP |
11
eason1874 2021-10-05 23:00:40 +08:00 1
密码摘要用 bcrypt 更好
bcrypt 是密码散列,慢散列。同样内容,bcrypt 比其他散列更抗爆破 |