通过套接字发送公钥的安全方法

2024-04-29

通过套接字向另一个用户发送 RSA::PublicKey 的安全方法是什么?我正在考虑将密钥导出到 ByteQueue 并将字节数组发送给用户,他可以在其中再次构造公钥。

或者这是否会泄露可能被滥用的信息?

//Generate keys
AutoSeededRandomPool rng;

InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 3072);

//Create
RSA::PublicKey publicKey(params);

//Save
ByteQueue queue;
publicKey.Save(queue);

byte publicKeyBuffer[1000];
size_t size = queue.Get((byte*)&publicKeyBuffer, sizeof(publicKeyBuffer));

//Load
RSA::PublicKey loadkey;
ByteQueue queue2;
queue2.Put2((byte *)&publicKeyBuffer, size, 0, true);

loadkey.Load(queue2);

通过套接字向另一个用户发送 RSA::PublicKey 的安全方法是什么?

是的,如果不担心隐私,您可以发送纯文本。接收者需要验证公钥,这意味着他们需要确保这是您的真实密钥,而不是冒名顶替的密钥。

公钥的认证是密钥分配问题,也是密码学中的一个棘手的难题。如果密钥分发问题能够得到解决,那么很多隐私问题就会消失。

有两种方法可以尝试解决密钥分发问题:信任根和信任网。信任根用于公共和私有 CA 的 PKI;而信任网则由 PGP 和朋友使用。

密钥分发问题已通过 PKI 和公共 CA 在互联网上得到了不同程度的成功“解决”。例如,参见 RFC 5280,互联网 X.509 公钥基础设施证书和证书吊销列表 (CRL) 配置文件 http://www.ietf.org/rfc/rfc5280.txt,关于它应该如何工作;并参见彼得·古特曼的工程安全 http://www.cs.auckland.ac.nz/~pgut001/pubs/book.pdf%E2%80%8E关于它在实践中如何失败(有时以惊人的方式)。

对于不使用“信任根”或 PKI 的点对点应用程序,最新趋势是 (1) 使用短身份验证字符串 (SAS) http://www.iacr.org/archive/crypto2005/36210303/36210303.pdf%E2%80%8E与初始消息,以及(2)将所有后续会话与过去的会话联系起来(本质上从第一个会话形成一个链)。在初始消息期间,接收方使用语音通过读回一个小的摘要(如公钥指纹)来验证发送方的公钥密钥(语音是一种很好的身份验证机制)。

如果您的对等应用程序无法使用 SAS 来验证公钥,那么您应该采用首次使用信任 (TOFU) 策略并实践密钥连续性。古特曼在他的书中详细介绍了安全多元化策略工程安全 http://www.cs.auckland.ac.nz/~pgut001/pubs/book.pdf%E2%80%8E.


将密钥导出到 ByteQueue 并发送字节数组

这只是演示级别的细节。您可以按照自己喜欢的任何方式对其进行编码,包括原始、十六进制、Base32 或 Base64。真正的威胁是确保您的对等方收到您发送的公钥(如ntoskrnl https://stackoverflow.com/users/2424896/ntoskrnl指出)。


还要注意隐私can成为一个令人担忧的问题,就像受压迫国家中的持不同政见者一样。持不同政见者和压迫政权并不是唯一的用例,这可能会引起人们的担忧以及。

我曾经因为泄露了一个电子邮件地址而未能通过美国联邦的审计。在本例中,电子邮件地址与密钥一起位于用户证书中。 (证书所做的就是通过“权威”签名将公钥与身份绑定在一起)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过套接字发送公钥的安全方法 的相关文章

  • 如何在 ios、swift 中生成公钥/私钥对,如下所示

    这就是我生成公钥 私钥对的方式 var statusCode OSStatus var publicKey SecKey var privateKey SecKey let publicKeyAttribute NSObject NSObj
  • Erlang - 导入 GPG 公钥

    我正在尝试在 Erlang 中做一些与公钥相关的事情 它们要求我跟踪公钥 根据这一页 http www erlang org doc apps public key using public key html id61611 我应该能够通过
  • java.lang.IllegalArgumentException:字符串 curve25519 不是 OID bouncycastle 1.52

    我正在尝试使用曲线 25519 的 java bouncy castle 1 52 实现生成密钥对 这给了我 java lang IllegalArgumentException 字符串 curve25519 不是 OID 这是我的代码 p
  • 如何使用salsa20计数器随机数?

    我不确定我是否做对了 消息计数器可以用作 代替随机数 我的意思是这样的消息 标头 2 字节 计数器 8字节 正文 n 字节加密 HMAC SHA1 计数器 1 63位 0 可以吗 我知道我不应该两次使用相同的密钥和相同的随机数 当新的连接启
  • C# 中的字符串加密和解密? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 C 中加密和解密字符串 编辑 2013 年 10 月 虽然我随着时间的推移编辑了这个答案以解决缺点 但请参阅jbtule 的回
  • 使用 3DES 和 CBC 损坏的加密数据的前 8 个字节

    我在应用程序中使用 PyCrypto 来加密数据 但由于某种原因 无论我做什么 前 8 个字节 对应于第一个块 都会损坏 gt gt gt from Crypto Cipher import DES3 gt gt gt from Crypt
  • 从 Java 访问 Firefox 的证书信任存储

    我对这个几乎失去希望了 我正在尝试使用 Firefox 安装附带的 NSS 库通过 PKCS 11 从 Java 7 访问 Firefox 信任存储 这是代码 import java security KeyStore import jav
  • 兼容 C# 和 javascript 的 AES 加密和解密

    我正在尝试用 C 和 Javascript 编写两个类 我可以在整个项目中使用它们在交换数据时使用 AES 加密或解密数据 使用 AES 我将 Salt 32 字节 和 IV 16 字节 嵌入到加密结果中 这在测试时分别适用于这两个类 将
  • 从 X.509 证书中提取 PEM 公钥

    我已经创建了一个包含公钥 DER 文件的证书 但我现在需要 PEM 格式的公钥用于不同的平台 目的是使用相同的公钥 我使用创建它iOS 中的 RSA 加密并使用 PHP 解密 http jslim net blog 2013 01 05 r
  • gitosis 要求输入密码

    我已经按照以下说明设置了 gitosis 服务器here http scie nti st 2007 11 14 hosting git repositories the easy and secure way 它对于初始用户来说效果很好
  • Java如何使用私钥文件而不是PEM来解密?

    使用 Java 和 Bouncy Castle 1 52 我可以使用以下代码通过 PEM 证书加载私钥 我还有一个相同的 PKCS8 格式的 private key 文件 直接使用private key文件而不是PEM的代码是什么 Stri
  • 许可证密钥模式检测? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这不是真实情况 请忽略您可能认为适用的法律问题 因为它们并不适用 假设我有一组 200 个已知的有效许可证密钥 用于假设的软件许可算法
  • 从 X509Certificate2 获取私钥时偶尔出现异常“指定的提供程序类型无效”或“密钥不存在”

    我在尝试从 X509Certificate2 证书获取私钥时遇到以下异常之一 System Security Cryptography CryptographicException 指定的提供程序类型无效 OR System Securit
  • 无需动态分配的RSA实现

    典型的 RSA 实现包含一个多精度整数库 典型的多精度整数库使用动态分配将大整数表示为大小合适的机器字数组 我预计当使用多精度整数仅使用 RSA 2048 来加密或解密已知长度的消息 通常是对称加密密钥 时 可能会遇到数学整数的限制 并且它
  • 代码签名证书选项

    我被分配了为我的公司购买数字证书来签署我们的代码的任务 我们在 Microsoft 领域开发应用程序 主要是 WPF 或基于 Web 我调查了选项 发现 Comodo 价格合理且反应灵敏 我们准备继续通过它们购买证书 但是在注册表单中有各种
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • 使用 System.Security.Cryptography 将 Win32 Crypto API 调用转换为 C#

    我接到一项任务 要删除我们产品的一个 dll 并将其替换为纯 C 的 dll 旧的 DLL 是 NET 2 0 托管 C C CLI 它包装了对 Win32 本机加密 API 的调用 新的 DLL 应公开具有相同名称和方法的新对象 但应使用
  • 在同步函数中使用 javascript `crypto.subtle`

    在javascript中 是否可以使用浏览器内置的sha256哈希 https developer mozilla org en US docs Web API SubtleCrypto digest Converting a digest
  • 如何将 pem 公钥转换为 openssl RSA* 结构

    假设我必须像这样公开 pem 密钥 BEGIN PUBLIC KEY MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp TR fQi
  • 在 C# 中生成 HMAC-SHA1

    我正在尝试使用 C 来使用 REST API API 创建者提供了以下用于 hmac 创建的伪代码 var key1 sha1 body var key2 key1 SECRET KEY var key3 sha1 key2 var sig

随机推荐