就熵的使用而言,使用 SSH 在远程服务器上定期执行命令是否安全?

就熵的使用而言,使用 SSH 在远程服务器上定期执行命令是否安全?

我计划在多个远程系统上设置定期系统健康检查。为了实现这一点,我设置了基于密钥的身份验证,以便在远程端执行脚本而无需交互

IE:

ssh -i /path/to/id_rsa -o "StrictHostKeyChecking=no" user@remote "/path/to/script.sh"

一位同事对使用 SSH 表示担忧,因为它消耗熵太快。计划是每 1-2 分钟发出 15 到 25 次检查,如上所示。远程系统大多在 KVM 主机上虚拟化。这种方法安全吗?为了理解;在 SSH 会话中如何使用熵?

答案1

“任何考虑用算术方法产生随机数字的人当然都是犯了罪。因为,正如多次指出的那样,没有所谓的随机数——只有产生随机数的方法,而严格的算术程序当然不是这样的方法。” ~約翰·冯·諾伊曼

随机性比人们想象的更难实现;事实上,甚至定义随机性都很困难(或者为特定情况选择正确的定义)。例如,非常适合统计建模的“随机”数字可能不适合密码学。这些应用程序中的每一个都需要其随机输入具有某些属性,例如均匀分布。特别是密码学,要求不可预测性,以便读取我们数据的攻击者无法猜出我们的密钥。真正的随机性(完全不可预测的意义上)无法由计算机程序产生。作为程序输出产生的任何位序列最终都会重复自身。

对于真正的随机性,你必须求助于物理过程,例如流体湍流或放射性衰变的量子骰子。即便如此,你也必须非常小心,不要让测量伪影引入不必要的结构。

  • 到目前为止,你的同事是对的。

SSH 实现利用随机性(在这种情况下=熵),但该过程对于用户来说是完全不可见的。

幕后发生的事

SSH1 和 SSH2 使用基于内核的随机源(如果可用),以及通过运行不同的进程收集的(希望如此)波动的系统参数的采样。它使用这些源来播种其 PRNG,并偶尔“搅动”更多随机性。由于以这种方式收集随机性的代价很高,因此 SSH 在程序调用之间将其随机位池存储在一个文件中(/etc/ssh2/random_seed)。该文件受到保护并在密钥生成,不在交换密钥之后,不在连接内。

简而言之:这种连接密钥对的熵是基于系统不是基于连接(甚至基于命令)。

  • 了解了这一点,很明显关于 SSH“消耗熵”的担忧是无稽之谈。

相关内容