问题标签 [diffie-hellman]
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.
security - 局域网中间人攻击
我在这种事情上很新。
我有一个局域网,一些用户通过电缆访问,一些用户通过 wifi 访问。我在 php 中开发了一个本地应用程序,它只接收一些 LAN 客户端作为真实用户;系统可以使用类似于 Diffie-Hellman 的密钥交换算法来识别它们,以建立密钥。然后,客户要求通过这样的渠道进行识别。
问题是,在这种情况下,MITM 攻击是可能的。我阅读了有关如何执行此类攻击的维基百科:有人监听了两者的消息,并将自己置于他们之间,为客户端和服务器创建了两个不同的密钥。
这种攻击是现实的,所以它一定是可能的;但我不明白它在 LAN 中是如何发生的:攻击者可以监听消息,并注入他自己的消息,如有必要,通过伪造 https 的 IP 字段来冒充通信的两个主体......但他不能防止原始未伪造消息同时(但也稍后,因为伪造过程占用攻击者计算机一段时间)与他恶意伪造的接收者一起到达!特别是在 wifi 连接中,单个用户无法切断,例如切断他的电缆。因此,客户端和服务器从对方接收到两个不同的 http 请求,一个是真实的,一个是伪造的;这不是让他们认识到这种攻击正在进行的一种方式吗?
也许这个问题是新的;正如我所说,我对此很陌生。
java - Diffie Hellman 与 Android 应用程序的密钥交换
我目前正在尝试与 android 应用程序进行 diffie hellman 密钥交换。我得到了 diffie hellman 的代码,如下所示。
但是,我只是迷失了如何在服务器端和客户端实现它,以便它们相互通信。
我的代码如下所示
DH.java
公共类 DH {
我的问题是如何合并我在托管 apache tomcat 的服务器上的 servlet 中编码的 DH 算法。我希望你们能用一些示例代码启发我,因为我真的很迷茫。
我的servlet代码如下
登录Servlet.java
希望大家能就这个问题给我指点一下。提前致谢!=)
c# - 将证书密钥加载到 CngKey 类中以用于 DiffieHellman(ECDiffieHellmanCng 类)
这与 .NET / C# 有关。假设在 PFX 或 PKCS#12 文件中有证书 + 私钥(P521 ECC 之一)。我们已通过安装(双击 PFX 或运行certutil -f -p myPfxPassword -importPFX MY SomeEcCert.pfx
)将此证书及其私钥加载到 Windows 证书存储中。我注意到如果证书兼容(例如 p521 曲线),它会自动安装为 CNG 证书/密钥。
现在,如何将私钥加载到 CngKey 中,以便在ECDiffieHellmanCng
类中使用它?我还想加载 X509 (CNG) 证书以读取它的序列号、发行者、通用名称等以进行一些簿记。
cryptography - 在 Diffie-Hellman 密钥交换期间协商使用哪个 DH 组是否常见?
当我阅读有关 DH 密钥交换如何工作的描述时,没有提到密钥交换器如何就应该使用哪个“组”(p
和g
参数)来计算公共和私有值达成一致。查看RFC 5114,似乎有很多选择。
我想知道这种协商是否通常是在交换过程中完成的,如果没有,是否在某处描述了如果包含该步骤,算法会有什么不同。
谢谢阅读。
java - 用于 c++ 和 java 的 Diffie-Hellman 库
我想在 c++ 应用程序和 android 应用程序之间交换公钥。我决定使用Diffie-Hellman。在 C++ 方面,这个库看起来很有希望用 C++ 生成密钥。现在我正在寻找一种java实现来在android智能手机上生成密钥。
你会建议什么库,也在 c++ 方面?最后,我想通过 UDP 将公钥作为字符串共享。
亲切的问候
c - 如何访问 OpenSSL 的 EVP_PKEY 结构中的原始 ECDH 公钥、私钥和参数?
我正在使用 OpenSSL 的 c 库来生成椭圆曲线 Diffie-Hellman (ECDH) 密钥对,遵循此处的第一个代码示例。它用这一行掩盖了公钥的实际交换:
变量和pkey
返回值都是 type EVP *
。pkey
包含前面生成的公钥、私钥和参数,返回值只包含对端的公钥。所以这提出了三个问题:
- 实际上如何
get_peerkey()
仅提取公钥pkey
以发送给对等方? - 代码如何从中提取私钥和参数
pKey
以存储它们以供密钥交换后使用? - 如何从对等方的原始公钥
get_peerkey()
生成新结构?EVP_PKEY
我见过 OpenSSL 函数EVP_PKEY_print_public()
, EVP_PKEY_print_private()
,EVP_PKEY_print_params()
但这些是用于生成人类可读的输出。而且我还没有找到任何将人类可读的公钥转换回EVP_PKEY
结构的等价物。
java - 我为锻炼编写的代码是否有效?
我已经学会了编写代码来实现下面的 Diffie-Hellman 密钥交换算法,但我觉得我的代码并不是最有效的。谁能更正我的代码...?
上面的代码是否适合 java 规则?
ssh - ssh2如何协商基数'G'和模数'P',未知领域
(首先我很抱歉我的英语不是我的母语)我尝试用wireshark理解ssh2(你可以在这里找到wireshark记录:https ://dl.dropboxusercontent.com/s/e9ut8z6v8oldg7g/ssh_wireshark .pcap?token_hash=AAGtkPMwKLt4IIr1Rlrht5_21HpMwQZBfeEFjGoRA85cjQ&dl=1 ) 和 rfc 4253 但我有一些困难:
在 SSH_MSG_KEXINIT 消息之后有 SSH_MSG_KEXDH_INIT (30) 和 SSH_MSG_KEXDH_REPLY (31)。
我的问题是对 SSH_MSG_KEXDH_INIT 和 SSH_MSG_KEXDH_REPLY 的理解。根据 rfc4253:
但是有了wireshark,我看到了:
什么是“有效载荷”字段?如何协商基数“G”和模数“P”?ecdsa 公钥是质数还是合数?
这是我的分析:
a)wireshark 是错误的。
如果 rfc 正确,则有效载荷字段为 'e' 和 'f'!
但是有一个问题:如果 rfc 是正确的,模数 p 和基数 g 必须在 SSH_MSG_KEXDH_INIT 之前知道,因为我们需要它们来计算 'e';所以wireshark解码是错误的,因为wireshark告诉我P和G是在SSH_MSG_KEXDH_INIT之后传输的。
还有其他东西告诉我wireshark 是错误的:如果我解码我可以在/etc/....pub 文件中找到的base64,我可以看到wireshark DH_modulus 字段的值。所以 DH_modulus 字段不是真正的 DH_modulus 而是服务器公共主机密钥:rfc 是正确的,wireshark 是错误的!
在这种情况下,基数和模数不会通过“Diffie-Hellman 密钥交换回复”传输,那么“g”和“p”是如何传输的?它们在所有 ssh 客户端/服务器中是否“加前缀”并且从不传输?
b)wireshark 是对的
如果我们假设服务器公共主机密钥是一个素数,它可以是 DH_modulus 和 rfc 和 wireshark 是正确的。
但是在这里,又出现了一个问题:来自客户端的有效负载不能是“e”,因为有效负载是在 DH_modulus 和 DH_base 之前传输的...
那么什么是有效载荷字段?
什么时候发送'e'和'f'?因为就在“Diffie-Hellman 密钥交换回复”之后,我有“Newkeys 消息”,表示密钥交换结束
但另一方面,我有 4 个来自端口 22 的数据包,它们没有被解码为 ssh,但它可能是“e”和“f”?
前两个数据包长度为 48 字节,另外两个数据包长度为 64 字节。
'e' 和 'f' 在这 4 个 tcp 数据包中传输吗?也许 e 和 f 是 64+48=112 字节长度?
如您所见,我很困惑。你能帮我吗(也许不是所有的问题,但一些迹象可以帮助)
谢谢你。
c# - 椭圆曲线 Diffie-Hellman (ECDH) - SecretPrepend 和 SecretAppend 的用途是什么?
我只是在玩,ECDiffieHellmanCng
我想知道什么SecretAppend
和SecretPrepend
可能是为了什么。谷歌没有那么有帮助。任何想法?
model - Diffie-Hellman using Casper
I have an assignment to model the Diffie-Hellman Key exchange protocol using Casper (in a .spl file). I got the basics down and am finding it really hard to come up with the correct protocol desciption (#Protocol description). I searched everywhere and tries everything(as far as my knowledge of Casper can take me) and no solution. I'm very surprised that there is so little documentation on this.
If anyone could help me get started on this, it would be greatly appreciated.
Thanks in advanced!