安卓系统中高效的非对称日志加密



日志加密

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

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

心愿单

  • 非对称加密:应用程序应该能够加密但不能解密数据
  • 逐行加密,这样每一行都可以解密。这是必需的,因为日志旋转可能会剪切文件的一部分
  • 足够快的算法不会减慢旧设备的速度(在峰值时,可能有大约10条日志线/秒)
  • 能够加密非常长(最多4k个字符)的日志行。例如,这不包括RSA,对于1024位密钥,RSA被限制为117字节的加密数据
  • 可使用OpenSSL或gpg等普通Linux命令行工具进行解密

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

您已经设置了几个约束:

  • 非对称加密->必须使用RSA(或其他PKI)加密
  • 可使用普通工具解密-以下是openssl支持的加密协议的子集https://www.openssl.org/docs/apps/enc.html

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

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

注:-如果你想保持真正的安全,不要自己实现安全基元(en/解密、安全随机性、签名),一定要使用经过审查和测试的库-不对称加密必须始终加盐

尽管如此——回答自己——你想保持沟通的安全性有多高。在许多情况下,通过TLS(HTTPS)发送日志以实现移动中数据的安全性就足够了。有了加密,有很多方法可以让系统看起来安全,但实际上存在您可能没有意识到的弱点。

玩得开心

g。

虽然不是一个"应用程序",而是一个bash脚本,但最近推送的项目的场景之一可能仍然令人感兴趣。但是,请注意,它仍在大量开发中,虽然它在我的Android设备上运行,但尚未在生产环境中进行测试。

请求的功能&他们的地位

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

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

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

  • 也许很慢。目前还没有进行压力测试,但在我的旧手机上似乎足够快了。

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

  • 支持对日志进行解密,但需要通过上述链接文档中的另一个helperbash脚本提供一些帮助。

  • 加密脚本副本编写的文件不能在同一设备上解密,只要该设备没有相关的私钥即可。

加密的系统要求

  • bash等于或大于4的版本,查找忙框了解如何在Android上安装bash'n'friends。

  • 已安装gpggpg2

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

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

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

解密的系统要求

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

  • 您将需要上面链接文档中的助手脚本来馈送您的解密命名管道。

  • 而不是加密脚本副本,您将希望按照指示修改用于解密的脚本副本。

它的主要剧本不到两千行,而且它写的副本要短得多。这是因为主脚本必须处理用户输入,以确定您的意图在哪里,因为脚本复制只处理从其命名管道读取的输入,并在被告知的地方写入加密数据。如果提供的链接场景没有完全达到目标,那么还可以获得所有命令行选项的完整文档。

最新更新