首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与客户交换加密密钥?

如何与客户交换加密密钥?
EN

Stack Overflow用户
提问于 2012-12-07 15:11:30
回答 2查看 1K关注 0票数 1

我的Java应用程序需要处理加密文件。这就是工作流程:

  1. 客户对文件进行加密(例如RSA加密),并将它们上传到亚马逊S3。
  2. 我的Java应用程序从AS3中获取文件。
  3. 我的Java应用程序解密文件。
  4. 我的Java应用程序使用解密的文件创建其他文件。
  5. 我的Java应用程序用不同的密钥加密新文件并上传到AS3。
  6. 顾客拿起文件。
  7. 客户解密文件。

Amazon提供了用于下载/上传、解密/加密的S3类。此API接受作为输入java.security.KeyPair。我不确定客户应该如何为我的Java应用提供密钥,这样应用程序才能获得java.security.KeyPair密钥?

在客户和应用程序之间交换密钥的正确方法是什么?可以使用哪种密钥文件格式?

EN

回答 2

Stack Overflow用户

发布于 2012-12-07 15:44:18

通常,对称加密/解密的工作方式如下:

  • 生成一个私钥/公钥对。私钥应保密,不应传阅等。私钥可以不受安全问题地交给客户。
  • 现在,客户用这个公钥加密他的文件。加密的文件只能使用私钥对进行解密。这样,用户就可以将文件发送给您(在您的情况下,通过Amazon )。
    • 您将接收该文件并使用您的私钥解密它。

现在你从客户那里得到了一份文件。为了能够发送回加密消息,您需要另一个公钥/私钥对。这一次,客户必须是唯一知道私钥的人。例如,他可以把他寄给你的公匙放进他的档案里。不管怎么说,你得从他那弄到一把公钥。使用该密钥,您可以对文件进行加密,并将其发送到Amazon。用户获取它们并使用他的私钥解密它们。

因此,客户不能给您一个java.security.KeyPair,因为其中包含私钥。发送私钥是不安全的。但他可以把公钥作为java.security.PublicKey发给你。我认为最好的方法是将它发送给您,或者在他提供的文件中,或者在他同时上传的单独文件中,或者在提供的文件之外。

票数 3
EN

Stack Overflow用户

发布于 2012-12-08 15:19:56

问题是你还没有分配信任的方法。幸运的是,有一种方法运行得相当好: TLS。TLS证书存储在浏览器中(如果需要厚客户端,则存储在JRE中)。

您的密钥对应该在本地(或在安全机器上生成并导入)生成。私钥应始终保持安全。客户使用TLS连接到您的站点,并下载您的公钥。然后客户上传他的密钥对的公钥。这可以在某些设置/配置阶段执行。

现在,客户可以为您加密文件,您也可以为客户加密文件。注意,TLS已经提供了加密(机密性)。因此,您已经得到的是,文件是在存储期间,在他们已经被传输保护。一旦您对公钥(和可信任的系统)有了信任,就可以通过普通HTTP发送文件。

添加签名非常重要,否则任何人都可以替换存储中的文件。一些审计日志可能也是必需的,否则文件可能会被删除。

其他方案是可能的(我更喜欢用于文件加密/解密的PGP方案),但它们需要密钥的带外通信。请注意,这只是基本方案,有很多缺陷,但是为您的应用程序制定一个特定的安全体系结构显然是另一个话题。

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

https://stackoverflow.com/questions/13765787

复制
相关文章

相似问题

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