问题标签 [public-key-encryption]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
270 浏览

c# - C#如何进行加密?

我不是要一个带代码的教程,我正在尝试做研究,但我想确保我问的是正确的问题。

  • 我可以使用 .NET 开箱即用的最佳加密形式是什么?
  • 公钥/私钥,我在哪里安全地存储这些东西?
  • 为了正确执行此操作,我应该拥有哪些工具?

我从 AESCryptoServiceProvider 开始,加密了我传入的字符串,我很高兴。测试如果我调用它两次,它会得到相同的值。然后意识到我没有提供任何形式的密钥,所以应用程序的第二次运行产生了不同的结果。所以我开始阅读,看到 RSA 公钥/私钥等等等。只是想确保我正在阅读我正在做的正确的道路。那里有很多例子,很少有人提到你把这些钥匙放在哪里,或者你从哪里得到它们。

0 投票
3 回答
5886 浏览

java - Java公私钥解密问题

我正在尝试加密和解密以下代码中提到的消息。基本上我想用公钥加密消息并将加密消息从字节数组转换为字符串。并将此字符串解密为原始文本。这是两种方法。这里加密工作正常,但解密失败(错误是“数据必须从零开始”)。我认为这是因为我将加密的字节数组转换为字符串。

我该如何解决这个问题?(我想将加密的字节数组作为字符串并将其用于解密)有没有其他方法(使用公钥和私钥)

0 投票
1 回答
1507 浏览

java - 使用 Bouncy Castle API 的 Java 安全性

我想知道 Bouncy Castle API 是否适合 Java 中的非对称加密。

目前我正在使用 Java 的 JCE API 执行此操作。如果我使用 Bouncy Castle API 进行非对称加密会有什么优势吗?

0 投票
3 回答
897 浏览

ruby - 创建一个安全的、基于 Web 的密码管理系统,能够在用户之间共享数据

我提前为即将到来的Wall-O-Text道歉。这是(至少,对我来说)一个相当复杂的问题,我已经考虑了很多。如果你愿意的话,你可以阅读我的问题,也可以在这个 GitHub Gist 上看到一个用 Ruby 编写的测试实现(非常仓促,没有数据库支持,而且可能非常丑陋) 。


介绍

想象一下,需要创建一个基于 Web 的密码管理系统(通过 SSL!:) 具有以下要求:

  1. 个人用户使用他们自己的唯一密码短语登录系统。
  2. 这个密码短语应该足以让用户有效地使用系统(例如,通过智能手机等)——关键是他们不应该随身携带密钥文件。
  3. 用户可以在系统中存储任意长度的数据位(“条目”)。
  4. 条目在数据库中以这样一种方式加密,即数据库或应用程序中没有足够的信息来读取加密的条目。
  5. 用户应该能够与系统的其他用户“共享”条目,以便其他用户可以阅读条目的内容。

我不是密码学专家。想了一会儿,我想到了以下几点。 我的问题是:这个实现安全吗?我错过了什么吗?如果是这样,上述规范甚至可以实施吗?或者这是矫枉过正?

数据库

数据库是这样设置的:

基本用例

让我们想象一下系统的两个用户,Alice 和 Bob。

Bob注册该网站

  • Bob 输入密码。此密码被发送到服务器(但不存储)。
  • 服务器生成随机盐并将其存储在salt字段中。
  • 服务器生成 Bob 的密码和 salt 的 SHA-256 哈希。
  • 服务器生成一个 RSA 密钥对。公钥以纯文本形式存储在pub_key字段中。私钥通过 AES-256 使用 Bob 的密码和 salt 生成的哈希作为密钥进行加密,并存储在enc_priv_key字段中。
  • 服务器使用 Bob 的密码和 salt 作为密钥为 Bob 的私钥生成一个基于哈希的消息验证代码,并将其存储在priv_key_hmac字段中。

Bob在系统中存储一个条目

  • Bob 输入了一些数据和他的密码一起存储为条目。该数据被发送到服务器。
  • 服务器生成一个密钥,用作 AES-256 加密的密钥。
  • 服务器使用此密钥加密数据并将结果存储在enc_data字段中。
  • 服务器使用生成的密钥为数据生成基于散列的消息验证码,并将其存储在data_hmac字段中。
  • 用于加密数据的对称密钥使用 Bob 的公钥加密并存储在enc_sym_key字段中。
  • 服务器使用 Bob 的私钥生成对称密钥的签名。

Bob检索他存储的条目

  • Bob 输入他的密码和要检索的条目的 ID。
  • 服务器生成 Bob 的密码和 salt 的 SHA-256 哈希。
  • Bob 的加密私钥使用哈希通过 AES-256 加密进行解密。
  • 服务器通过检查 中的 HMAC 来验证 Bob 的加密私钥没有被篡改priv_key_hmac
  • enc_sym_key服务器使用 Bob 的私钥解密存储在该字段中的对称密钥。
  • sym_key_sign服务器通过使用 Bob 的公钥验证签名来验证加密的对称密钥没有被篡改。
  • 服务器使用对称密钥解密数据。
  • data_hmac服务器通过验证存储在字段中的 HMAC 来验证加密数据没有被篡改。
  • 服务器将解密后的数据返回给 Bob。

Bob与 Alice 共享一个条目

  • Bob 希望 Alice 能够访问他拥有的条目。他输入他的密码和要共享的条目的 ID。
  • 条目的数据使用“Bob 检索他存储的条目”中的方法解密。
  • 以与“Bob 在系统中存储条目”相同的方式为 Alice 创建一个新条目,但以下情况除外:
    1. 条目parent_entry设置为 Bob 的条目。
    2. 对称密钥的签名是使用 Bob 的私钥计算的(因为 Alice 的私钥对 Bob 不可用)。
    3. 当 Alice 访问这个新条目时,非空值的存在 parent_entry会导致系统使用 Bob 的公钥来验证签名(因为他的私钥被用来创建它)。

Bob更改了他共享条目中的数据

  • Bob 决定更改他与 Alice 共享的条目中的数据。Bob 指出要修改的条目 ID 和它应该包含的新数据。
  • 系统会覆盖在“Bob 在系统中存储条目”中创建的数据。
  • 系统找到与parent_entry刚刚修改的条目相等的每个条目,并为每个条目覆盖在“Bob 与 Alice 共享一个条目”中创建的数据。

分析

优点:

  • 如果没有拥有数据的用户的密码,就不可能从数据库中解密任何数据,因为解密数据所需的私钥是用用户的密码加密的,并且该密码(及其哈希值)不存储在数据库。
  • 如果用户想要更改他们的密码,只需要重新生成他们的加密私钥(用旧密码/哈希解密私钥,然后用新密码/哈希重新加密)。
  • 共享条目作为实际单独的记录存储在数据库中,因此无需在多个用户/用户组之间共享密钥。

缺点/问题(我能想到的):

  • 如果共享条目被修改,系统必须重新加密每个子条目;由于有大量用户共享数据,这可能在计算上很昂贵。
  • 共享条目依赖于父用户的公钥进行签名验证。如果用户被删除,或者他们的密钥发生变化,则签名无效。

从介绍中重复:我的问题是:这个实现安全吗?我错过了什么吗?如果是这样,上述规范甚至可以实施吗?或者这是矫枉过正?

谢谢你坚持这么久。我对你的意见很感兴趣!我是在正确的轨道上,还是一个彻头彻尾的白痴?你决定!:)

0 投票
1 回答
422 浏览

encryption - 电子邮件回复中的 RSA 技巧

A 对她的电子邮件使用 RSA 加密。B 找到一封给 A 的加密电子邮件:c = m^e mod n 他想知道纯文本。B 知道,当 A 回复她的电子邮件时,她总是在回复中包含她正在回复的消息的文本

假设 A 只接收长度最多为 log n 的位串的消息,可以映射到 Zn。

还假设 B 不能简单地将 c 作为他自己的电子邮件发送给 A 并期望得到回复,但 A 将回复除 c 之外的电子邮件消息。

B 如何仅使用来自 Zn 的 c、e、n 和随机值来学习 m?

0 投票
1 回答
3372 浏览

putty - 选美似乎有干扰,根本不起作用

我用我的公钥设置了一个服务器,并将我的私钥添加到 putty 允许我正确连接到服务器。但是,当我使用选美时,它不起作用。我的研究表明,运行选美的事件日志应如下所示:

....
选美正在运行。请求密钥。
选美有 X SSH-2 密钥
正在尝试选美密钥 #0
....

但是,我的事件日志看起来像

...
选美正在运行。请求密钥。
...

似乎选美没有响应 putty 的关键请求。对此的任何帮助将不胜感激。

谢谢

0 投票
1 回答
220 浏览

url - 使用公钥/私钥/证书限制对下载 URL 的访问

如何限制对我网站上 url 的访问,并且只允许我的客户端应用程序访问这些 url。我正在输入一个 rest api 来请求 url,并认为我可以像 AWS S3 那样使用公钥/私钥。我的理解是,在传输过程中我仍然需要 SSL 证书来保护数据。

这看起来是正确的方法吗?我也不确定如何在服务器端生成密钥。我在 Rails 和 php 中编码。

0 投票
3 回答
1393 浏览

c# - 多方公钥密码术

虽然 2 方公钥加密在 .net 框架中得到了很好的布局,但我非常关心 n 方。例如保护两方视频会议。沟通很容易:

1) 每一方生成会话特定的 RSA 密钥对,并获得由受信任的权威机构(即受信任的服务器)签名的公钥。2)每一方交换密钥,ECDiffieHellmanCng因此连接现在既真实又安全(认为他们使用Vista/W7)。

现在向此通信添加第三个参与者将不起作用,因为密钥交换算法旨在仅从 2 个公钥派生共享密钥(尤其是使用 .NET 和 BouncyCastle)。所以问题是,您将如何实施仍然是真实的(即抵抗中间人攻击)和安全(即防止窃听)的 n 方公钥加密模式。

编辑:目前的想法如下,我将继续实现最受欢迎的一个作为NBusy.Communicator库的一部分:

  • 使用两方通信方案,其中一方充当联合服务器。
  • 发起两方通信,让一方对第三方进行身份验证并共享秘密/对称密钥。
  • 使用多方密钥协议方案。

Edit2:我将使用“n-Party Diffie Hellman”算法,类似于此处描述的算法,但有一些修改: http: //www.codeproject.com/KB/cs/diffy_helman.aspx

0 投票
7 回答
1398 浏览

encryption - 我可以使用带有两个私钥的非对称加密吗?

根据维基百科(和其他来源),非对称加密总是这样工作:

  • 甲方拥有公私钥
  • 乙方用甲的公钥加密东西
  • 甲方用他们的私钥解密东西

但是,我不希望甲方能够加密他们自己的数据,只希望他们能够解密它。使用不对称逻辑,这将导致:

  • 甲方有私钥
  • 乙方有一个私钥(即甲方的公钥)
  • 乙方用他们的私钥加密东西
  • 甲方用他们的私钥解密东西

我们将使用它来进行某种许可证生成/检查。我们的客户可能不会生成许可证,但许可证文件必须在客户端可读。

这仍然是非对称加密还是我应该寻找不同的方法?

0 投票
6 回答
13931 浏览

php - SSL 替代方案 - 使用 JavaScript 加密密码提交给 PHP 进行解密

我正在建立一个网站,我的付款方式将是 Google Checkout 和 Paypal。会有链接/按钮将用户重定向到安全的 Google/Paypal 网站以处理付款。这意味着我不需要每年 150 美元的额外费用和为我的站点安装 SSL 证书的复杂性。

但是,我想在用户登录时加密用户的密码,这样如果他们在网络上,一些运行 FireSheep 等的恶意人员在发送到服务器时无法读取用户的实际密码。该站点的其余部分不需要加密,因为它不是真正的敏感数据,并且可能会显着降低用户体验。

我的想法是这可以用公钥加密来实现。可以说这个过程是这样的:

  1. 公钥在 JavaScript 外部文件中,私钥在服务器上的 PHP 中
  2. 用户在表单中输入他们的用户名和密码并点击提交
  3. JavaScript 运行并加密密码,将其存储回文本字段中
  4. 表单提交到服务器,密码用PHP解密
  5. PHP 中的纯文本密码经过加盐和哈希处理,然后与数据库中的哈希值进行比较。
  6. 注册/更改密码功能可能类似的过程。

我在想像 RSA 这样的东西可以解决问题。但是我在网上搜寻了一个可以工作的 JavaScript 库来做这件事,但似乎没有一个与可用的 PHP 库兼容。无论如何,它需要生成一组与 JavaScript 和 PHP 兼容的密钥。

有人知道这个的实际工作解决方案吗?如果不是,我们写一个怎么样,然后开源它。不幸的是,编写加密/解密代码非常复杂,所以我真的不知道现有库在做什么以及如何修改它们以使其工作。我已经对会话固定/劫持提供了保护,所以我对此不感兴趣。只是对在数据到达 Web 服务器之前对其进行加密感兴趣。

注意:请不要发布一堆指向独立 Javascript 或 PHP 加密库的链接,我已经在 Google 上找到了这些链接。这实际上没有用。我需要的是用于 JavaScript 加密和 PHP 解密的代码,它们实际上可以和谐地协同工作以产生上述预期结果。

另外,如果您可以避免发布诸如“仅使用 SSL”之类的评论。我实际上想要一个解决这个确切问题的方法,即使它不是最佳实践,它仍然会很有趣。

非常感谢!