Android中的高效非对称日志加密

时间:2015-03-18 19:50:05

标签: java android logging encryption openssl

日志加密

我正在构建一个Android应用程序,它将日志行存储在旋转的日志文件中。当用户遇到问题时,他或她可以向我们发送附带日志文件的支持请求。

出于显而易见的原因,我想加密这些日志行。

愿望清单

  • 非对称加密:应用程序应该能够加密数据,但不能解密数据
  • 逐行加密,以便每行都可以解密。这是必需的,因为日志轮换可能会截断文件的一部分。
  • 足够快的算法,不会减慢旧设备的速度(在峰值时,可能会有~10对数线/秒)
  • 能够加密很长(最多4k字符)的日志行。例如,这不包括RSA,which is limited to 117 bytes of encrypted data for a 1024 bit key.
  • 使用OpenSSLgpg等普通Linux命令行工具解密。

逐行非对称加密Android日志的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

您已经设置了几个约束条件:

为了有效和安全,我建议:

  • 创建一个随机密钥和IV(初始化向量 - 实际上是' salt')
  • 使用收件人的公钥加密密钥(请参阅https://www.devco.net/archives/2006/02/13/public_-_private_key_encryption_using_openssl.php)。
  • 使用任何可行的对称加密逐个加密日志行(将IV作为计数器增加或者可以为每行创建一个IV)。即使在具有预先计算的S盒的慢速HW上,AES-CBC也应该足够有效。
  • 发送加密密钥,IV,日志行和身份验证(内容和IV的经过身份验证的签名,例如HMAC-SHA1)

注意:   - 如果你想保持真正的安全,不要自己实现安全原语(en / decryption,安全随机,签名),总是使用经过审查和测试的库   - 非对称加密必须始终保持盐渍

仍然 - 回答你自己 - 你想保持沟通的安全性。在许多情况下,通过TLS(HTTPS)发送日志以实现移动数据的安全性就足够了。通过加密,有很多方法可以使系统看起来安全,实际上有一些你可能没有意识到的弱点。

玩得开心

答案 1 :(得分:0)

虽然不是" app"但是bash脚本,最近推出的项目的scenario one可能仍然有意义。但是,请注意它仍处于大量开发状态,虽然它可以在我的Android设备上运行,但它已经在生产环境中进行了测试。

要求的功能&他们的状态

  • 不是应用。欢迎您翻译或将其用作应用程序的一部分;只需阅读所使用的许可证。

  • 支持通过GnuPG公钥进行非对称加密。

  • 支持逐行加密以及每次写入加密。

  • 可能很慢。目前还没有进行任何压力测试,但在我的旧手机上看起来还是很活跃。

  • 通过mapfile支持的大型日志行,每次解析操作通常可以处理几千行。

  • 支持解密日志,但需要通过上述链接文档中的其他帮助 bash脚本提供一些帮助。

  • 由加密脚本副本写入的文件无法在同一设备上解密,只要该设备不具有相关的私钥。

加密的系统要求

  • 版本bash等于或大于4,查找繁忙的框,了解如何在Android上安装bash&n;朋友。

  • 安装了gpggpg2

  • 用于加密的GnuPG公钥(最多两个)

  • 由上述项目的主要脚本(其功能之一)编写的自定义脚本副本,用于使用上述公钥。

  • 修改了日志记录过程以使用脚本副本的命名管道进行写入操作。

解密的系统要求

  • 与加密要求相同,但是,您需要与用于加密文件的公钥对应的私钥。

  • 您需要上面链接文档中的帮助脚本 feed 您的解密命名管道。

  • 而不是加密脚本副本,您将要按照指示修改脚本副本以进行解密。

它的主要脚本是两千行,它写的副本要短得多。这是因为主脚本必须处理用户输入以确定您的意图是什么,因为脚本副本只处理从其命名管道读取的输入并在其被告知的地方写出加密数据。如果提供的关联方案没有达到标记,则还可以使用完整documentation of all command-line options