【问题标题】:File Sharing with Encryption, how to send also the key to the receiver safely?文件共享加密,如何安全地将密钥发送给接收者?
【发布时间】:2017-11-19 11:03:28
【问题描述】:

我的系统有问题。我的应用基本上会做 4 件事:

  1. 发送任何文件(甚至加密)
  2. 加密任何文件
  3. 接收传入文件
  4. 解密加密文件

我的问题是,在接收者收到加密文件并且必须输入一个密钥来解密它之后,如果来自发送者的原始密钥等于或不等于来自接收者的输入而没有接收者获取有关密钥的任何信息,因为它们是同一个应用,但接收者应用不知道该特定字符串。

我能想到的只是创建一个包含密钥的文本文件,并让接收者读取该文件的内容以获取密钥,最终仅用于密钥的条件匹配。我很困惑,但我看到它可以在一个名为 ES File explorer 的 Android 应用程序中运行。我用 ES 文件浏览器加密了一个文件,然后用 SHAREit 发送它,然后用另一部手机解密,当我输入错误的密钥时,应用程序知道我输入的密钥错误,没有互联网。

【问题讨论】:

    标签: java android android-studio cryptography file-sharing


    【解决方案1】:

    有两种常用方法可以确定是否使用了正确的加密密钥:

    • HMAC(散列消息验证码)- 加密您的文件,然后通过 HMAC(通常使用 SHA256 或 SHA 系列中的另一个)运行它。将生成的哈希添加到您的加密文件中。 始终加密后应用 HMAC。然后接收者可以计算这个相同的 HMAC 来确定他们使用的密钥是否是正确的。请记住使用时间安全的比较函数来比较生成的哈希值以避免时间攻击。
    • AEAD 块模式 - 加密时,使用 GCM 或 CCM 等块模式。这是首选选项。这些阻止模式为您处理所有数据身份验证。 GCM 通常是首选。但是,此处需要仔细生成随机数,因为对两种不同的加密操作使用相同的随机数/密钥对可能会轻易泄漏明文。

    编辑:请参阅我对this question 的回答,其中详细说明了解决您所询问问题的安全方法。

    【讨论】:

    • 谢谢!你的答案是最正确的,但我认为我还没有足够的知识和编程技能来充分使用你所说的方式。我实际上是一名学生,我一定会感谢您提到的步骤的任何教程。谢谢楼主!
    • 别担心,请看我的编辑。链接答案中的代码详细说明了在 GCM 模式下加密文件的安全方法。
    • @LukePark 登录后面应用加密后的哈希(加密文件)?
    • @JAAAY 我不明白你在问什么对不起?
    • @LukePark 您说“始终在加密后应用 HMAC。”这样做的目的是什么?对我来说,只有将其应用于原始文件而不是加密文件才有意义
    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 2015-07-04
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多