【问题标题】:Choosing password and storing password and private key选择密码并存储密码和私钥
【发布时间】:2018-09-18 23:30:13
【问题描述】:

在我的公司,我们正在开发一种由 ARM 处理器驱动的产品。我们正在使用 Buildroot 为它制作一个 Linux 系统。

出于调试/维护目的,将使用以太网启用 SSH 访问,并且设备将具有用于串行 TTY 的 UART。该产品将出售给公司,并且可能只有员工可以实际使用该设备。

我想知道在用户密码和私钥存储方面我们必须遵循什么策略:

  • 密码:我们必须选择什么用户密码?为所有人选择一个密码似乎不是一个好主意。如果有人发现了这个密码,他就可以访问我们所有的设备,而且我们无法更新它们,因为它们处于离线状态。我们甚至需要选择密码吗?有没有其他安全且不依赖密码的解决方案?类似于 SSH 密钥的东西,也许...
  • SSH 私钥:我正在考虑生成一个密钥对并将公钥添加到所有设备的 authorized_keys 文件中。这样,我们公司任何需要维护的成员都可以将私钥导入他的计算机并直接访问所有设备。但是我们如何存储这个私钥以保证它的合理安全(并且不会丢失它)?

此设备的安全性并不重要,因为它不太可能成为一个有趣的黑客目标,它的功能根本不重要,它是离线的,对它的物理访问将受到合理限制。知道了这一点,我想知道以上几点的答案,这样我们就有了合理的安全性,而不会使一切过于复杂。

我对 SSH 密钥的一些想法:

  • 把它写在纸上并保存在我们的办公室:我不太喜欢这个,因为我不相信它不会丢失、被毁......
  • 将它保存在我们在 Bitbucket 中的私有 Git 存储库中:我不太喜欢这个,因为应该允许有权访问存储库的同一个人拥有私钥,但我不知道我必须多少为此请信任云服务

我记得在这种情况下安全要求不高,但仍然希望有相当好的做法。

【问题讨论】:

    标签: security passwords ssh-keys


    【解决方案1】:

    您绝对不应为所有设备设置相同的密码,或使用相同的 ssh 密钥。在authorized_keys 中拥有贵公司的 ssh 密钥实际上是供应商后门。不要那样做。这对您的公司来说也是一个巨大的声誉风险,如果该密钥被泄露,您的产品可能会倒闭。

    根据您设备的实际使用情况,您可以选择一些相对安全的选项:

    • 在客户(或至少)设置设备后,可以生成或输入新的密钥对或密码。然后,该秘密将由客户保留,您的公司将消除为所有设备存储主密钥的巨大风险。

    • 您可以为每台设备预先生成一个随机密码,设置为密码,打印在一张纸上贴在设备上。然后,您的公司会忘记该密码,客户当然应该能够更改它。这样,所有设备都没有主密钥,攻击者需要物理访问才能读取密码。请注意,虽然像 mac 地址这样的东西听起来像是密码的一个很好的候选者,但事实并非如此,因为它太容易猜到了。它应该是具有足够熵的真实随机密码。另请注意,这要求只有经过授权的人才能物理访问设备 - 通常是这种情况,但您没有指定这是什么类型的设备。

    不过,这两者都需要在客户处对设备进行一次性设置阶段。

    【讨论】:

    • 我从安全的角度理解,但这并不能解决问题:我们需要访问设备进行调试/维护。客户端不会永远使用该密码和密钥,他们不需要它,可能他们不想要它,而且他们可能不会小心存储它。另外,同一个客户会购买很多设备,所以让他们保存数百个密码和密钥,并跟踪每个密码和密钥对应的设备对他们和我们都没有用处。
    • @naggety 好吧,一切都与风险有关。如果您的公司丢失了主密钥,您的公司将承担责任。如果您的客户丢失了自己的密钥,您就可以了。每当您需要维护访问权限时,他们都可以为您提供密码,之后他们应该更改密码。如果你想冒更高的风险,你也可以为他们存储这些秘密,但后果相当深远。例如,如果客户基础设施通过您的设备被黑客入侵,损失高达数百万美元,结果证明设备的密码从您的公司被盗怎么办?
    • 所以我想我完全理解你的目标,但潜在的风险听起来太大了,没有必要承担。
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2018-11-21
    • 2020-05-01
    • 2012-09-02
    相关资源
    最近更新 更多