首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每个客户端共享AES算法的密钥?

问如何在每个客户端共享AES算法的密钥?
EN

Security用户
提问于 2019-01-16 00:04:08
回答 1查看 1.1K关注 0票数 3

我怀疑以下几点:

每个客户端应该如何知道加密密钥?使用AES算法。(或最佳方式):

  • 把它保存在密码加密的文件中?
  • 把它存进数据库里?
  • 通过SSL通过网络发送?

PS:

  • 是否应该每隔多长时间更改密码?
  • 当程序运行时,它应该保存在私有变量中吗?

谢谢。

EN

回答 1

Security用户

回答已采纳

发布于 2019-01-16 01:21:54

您所要做的就是所谓的密钥分发。密钥分发要求您使用安全通道。这可以是:

  • 使用密码是对称的(但是您需要安全地分发密码,所以这有点像鸡和蛋的问题)。
  • 数据库不被视为共享密钥的安全方式。
  • SSL:非标准加密是一种方法,但在这种情况下,您可以首先在应用程序上实现SSL/TLS。类似于HTTPS (实际上,它使用混合加密交换对称密钥,然后与AES或另一个对称密码交换数据)
  • 另一种选择是使用包含加密密钥(例如Yubikey)的硬件令牌。例如,这可以用于进行相互SSL身份验证。

关于你问题的第二部分:

  • 这在很大程度上是有争议的,通常这取决于应用程序的用例及其加密数据的数量。它加密的数据越多,就需要更快地旋转它。但这都取决于算法等(例如,如果在同一密钥上加密超过64 GB,则AES GCM模式将失去保护。见NIST SP 800-38D节5.2.1.1)。所以没有一个正确的答案。如果您要选择SSL选项,那么每365天一次可能是您的最佳选择。
  • 该变量是公共变量还是私有变量并不重要。需要注意的一点是,与其使用字符串,不如使用char数组(如果使用像Java或.NET这样的托管语言),以防止在机器崩溃时将密钥转储到memdump。其思想是在每次加密/解密之前加载密钥,然后在操作完成后用0's覆盖变量。这将减少钥匙泄漏的可能性。

使用SSL/TLS并在您的应用程序中固定证书将是最简单的,因为您实际上可以为您与客户端设置的每个会话使用不同的、相互商定的对称密钥。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/201546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档