登录系统的『紧急口令』应该以什么原则选用为好?

326 天前
 MFWT

嗯,最后我还是去广州旅行了,在被称为世界最高城的动漫星城晃悠去了

背景

动漫星城没到点没开门,在外面瞎转悠

然后,看到了有关一个软件的安装教程,想装起来试试

打开 JuiceSSH ,准备登录的时候才想起个问题:这台服务器我关掉了密码登录,只能密钥登录,但是我出门在外,并没有给手机上的 SSH 软件装载私钥

是的,我暂时登录不上这台服务器了

设想

密码登录(或者说,口令登录)的痛点在于容易被人爆破密码,那么如果我设定一个足够强的密码,理论上应该可以大幅度减轻这个问题严重程度?

为了方便记忆和推算,我设想中用的是

k = to_lower(sha256(s))

其中 s 是我记得的一个比较高强度的口令( 14 个字符,大小写特殊符号和数字都有)

当然,我知道,这个做法的安全性,比不上用完一次即失效的『紧急登录刮刮码』

那么问题来了:

  1. 这种方法会比直接使用原来的口令要安全吗?
  2. 是否应该在 hash 的时候手动对口令进行加盐处理(比如,该机器的 IPv4 地址的第一段)?
  3. SHA256 是否可以满足『认为是安全的』的口令长度的需求?

谢谢解答

3583 次点击
所在节点    程序员
36 条回复
vitovan
326 天前
答不上来。

感觉你已经都懂了。
dingwen07
326 天前
我选择直接把私钥放到物理安全密钥里
tmtstudio
326 天前
我都是端口指定 IP 访问,用手机的话临时放行一下
codehz
326 天前
我的建议是,用联网同步的密码管理器(
geelaw
326 天前
从密码学角度考虑,口令登录相比密钥登录的问题并不在于“容易被人猜出口令”,而是:(1) 获得一次成功认证过程的明文即可反复重新认证;(2) 服务器被攻击后更容易还原口令。

使用高强度口令可以避免第二个问题,然而我的看法是发送 s 并不比发送 to_lower(sha256(s)) 更糟糕,两者口令的熵是一样的。口令长度不是安全性的源泉,只是代理指标而已,口令强是指它的熵高,而长度和熵的关系是 熵 <= 长度——好的口令一定要长,但长的口令不一定好。
pluto1
326 天前
你用 sha256 其实有点类似于最简单的 KDF ,建议看看 scrypt 之类的,感觉理论上安全性可以稍微高一点
dode
326 天前
ssh 启用两步验证,然后可以搞几个一次性应急?
1map
326 天前
我的密码是派 取前 200 位,每次进入系统都要手动打几分钟,但是安全啊
mengyx
326 天前
建议搞两个安全密钥,随身带着一个;
这之后我就没碰到过类似问题
caesarding07
326 天前
我都是用网盘直接存密钥的,用的时候就直接下载密钥。
mingl0280
326 天前
密码越长越好,但是与密码本身使用了多少次不同的字符几乎没有关系。一个 32 个英文字符加几个数字和符号的密码被爆破的难度远高于一个 12 位随机字符串的密码。
laozhoubuluo
326 天前
1. 从密码学的角度 hash 算法会降低信息熵,算法套算法可能存在额外的安全隐患(因为算法套算法的安全性大概率没有数学论证也没有专家测试)。但如果只考虑 SSH 暴力破解这一个维度那其实不太好说,毕竟 sha256 里面没有特殊字符但是一般暴力破解也不会考虑 256 位长度。
2. 信息熵的增加一定能增强安全性,甚至不考虑 hash 直接使用 口令+IP 地址 或者 口令+计算机名 的形式都要比只使用口令要安全。
3. 256 位数字+小写字母应该够安全了。
MoeMoesakura
326 天前
我反正一直取 uuid 作为密码,爆开还是很难的
zhleonix
326 天前
简单数字密码,然后映射到某段经文对应的词(中文的用拼音),很难爆破。
leaflxh
326 天前
echo dick | sha512sum
be79819833110c0847abb4f6491ccd97daed271e04e6b18d2651a709f65efd1c209c2b94fc2477af34d72968fa0a32e69031ee6bcf6028be59f04971e480689d -
Radeon
326 天前
k = to_lower(sha256(s))
足够了。这里的关键是输出位数够长就行
ltkun
326 天前
说明你平时没有使用手机登陆服务器的习惯 我基本上大半时间都是手机登陆的
wangxiaoaer
326 天前
好家伙,看到紧急登陆还以为又出现什么新技术了呢。
MFWT
326 天前
@ltkun 确实是没有的,平时几乎是 PuTTY 操作,键盘打字总比搓屏幕舒服
vain
326 天前
思路是一样的思路,但是可以用一个更好更容易被记住的方式:
如先设定一个基础密语 S
然后做如下步骤:
S1=to_lower(sha256(S));

取 S1 最后 8 位(或其它位数,自己记住)为 S1.0
然后
S1.1 =S1.0+CurrentDate //比如今天就是在字符串后边加上 6 个字符"20230618",这个日期可以设为每次更改这个密码的时间,只要你在自己的账号记录里记下每次更改密码的日期就行,而且这个信息对不知道的人来说也不知道是 SALT 。

然后
P = to_lower(sha256(S1.1));

最终密码可以设为 P 的最后 16 位或 24 位字符 //S1.0 的 N 倍,N 你自己心里记住。

基础密语 S 是最关键的,也需要自己记忆,但是有一些好办法,比如用自己才知道的事情做一个提示。
比如下边的例子:
“收一台八九成新的 64G 存储的 iPhone 二手手机,有的自己报价,报价请用七个 GB2312 的汉字描述”(这段提示语写在一个地方备忘,甚至可以把它藏在某个过去日期的日记本里,就伪装成过去发过的二手信息的记录,当然你自己要知道去哪里找)
然后密语 S 就是那 7 个指定编码的汉字字符。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/949658

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX