【问题标题】:Storing public key locally on android device在android设备上本地存储公钥
【发布时间】:2017-11-08 08:18:27
【问题描述】:

我想为我的应用程序使用非对称加密。
该应用程序基本上会拍一张照片并将其发送到服务器,我还没有编写任何代码,只是作为 POC 进行处理。
我遇到了一个以前解决过的问题,但现在又让我感到困惑。
就像我说的那样,我想使用非对称加密,其中私钥位于我的服务器上,公钥存储在本地并随每个 android 应用程序“运送”(即包括在其资源中)。我想将公钥与ByteOutputStreamEncryptedOutputStream 一起使用,并将已加密的信息发送到服务器以进行现场解密。
我的问题基本上是加密我发送到服务器的数据的过程有多安全?显然,我知道没有完全安全的东西,但这是一个好习惯吗,有没有某种行业标准的东西?

【问题讨论】:

  • 非对称加密设计用于共享公钥。这是 AC 的使命。
  • @NorthernPoet 我稍微调整了问题,希望这能解决我的困惑。谢谢。
  • 好的,现在清楚一点了。答案是:选择合适的 AC 算法。我将在答案中复制粘贴一些细节。
  • 您应该只使用 TLS。它是行业标准,比尝试实施自己的系统更安全。您是否考虑过经过身份验证的加密? Hmac vs AEAD?前向保密? TLS 有!

标签: java android encryption encryption-asymmetric


【解决方案1】:

this answer 复制关于非对称加密的内容。

目前最大的破坏 RSA 密钥是一个 768 位模数,它花费了一些巨大的努力(四年,真是大脑袋)。 1024 位密钥被认为可用于短期安全,但鼓励使用更大的密钥。 2048 位密钥是合适的。使用两倍大的密钥意味着签名或解密工作量增加 8 倍,因此您不想过度使用它。有关 RSA 密钥长度如何与安全性相关的调查,请参阅此站点。

256 位曲线上的 ECDSA 已经实现了“牢不可破”的安全级别(即与使用 128 位密钥的 AES 或 SHA-256 防冲突的级别大致相同)。注意素数域有椭圆曲线,二元域有曲线;哪种最有效取决于所涉及的硬件(对于类似大小的曲线,PC 会更喜欢素数字段上的曲线,但使用二进制字段更容易构建专用硬件;较新的 Intel 和 AMD 处理器上的 CLMUL 指令可能会改变)。

【讨论】:

  • 不要复制粘贴答案。在 cmets 中链接到它们或将此帖子标记为重复。此外,讨论不同密钥位大小的安全性有些微不足道。我觉得 OP 是在问他的方案是否安全,而不是在问什么算法和密钥大小组合。
猜你喜欢
  • 2013-01-10
  • 2013-07-19
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2015-07-21
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多