p2p节点连接中的秘钥交换RLPX (理论篇)

p2p秘钥交换中使用了ECDHE,下面我将介绍一些概念,并配上代码实现。

Diffie-Hellman`秘钥交换协议

迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议,是Whitefield Diffie和Martin Hellman在1976年公布的一种在公共信道中安全交换秘钥的密钥协商算法,不是加解密算法,目的在于使两个用户安全的交换一个共享秘钥,用于两边通讯报文的加密. 双方在没有对方任何预先信息的情况下,能够在不安全的信道上建立共享的私钥。该私钥作为对称秘钥用于加密后续的通信数据。Diffie-Hellman 秘钥交换是一种非认证 秘钥交换协议,但为很多认证协议提供了基础,在传输层临时安全中用于前向保密。

前向安全性 (维基百科)
前向安全或前向保密(英语:Forward Secrecy,缩写:FS),有时也被称为完美前向安全[1](英语:Perfect Forward Secrecy,缩写:PFS),是密码学中通讯协议的安全属性,指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。[2]前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。[3]如果系统具有前向安全性,就可以保证万一密码或密钥在某个时刻不慎泄露,过去已经进行的通讯依然是安全,不会受到任何影响,即使系统遭到主动攻击也是如此。

ECDH:Elliptic Curve Diffie-Hellman 是基于椭圆曲线Diffie-Hellman 的秘钥交换协议

ECIES:Elliptic Curve Integrated Encryption Scheme),是Certicom公司提出的公钥加密方案,可以抵挡选择明文攻击和选择密文攻击

KDF:秘钥导出函数(Key derivation function),使用伪随机函数从秘密值导出一个或多个密钥。KDF可用于将密钥扩展到更长的密钥或获得所需格式的密钥。在RLPX中是用本地随机私钥和对方随机公钥生成共享种子。

ecies.ImportECDSA(prv).GenerateShared(h.remote, sskLen, sskLen)

ECDHE:(Ephemeral Elliptic Curve Diffie-Hellman)临时椭圆曲线Diffie-Hellman 秘钥交换协议,字面多了一个E(ephemeral)代表了临时ECDHE每条会话都重新计算一个临时密钥,即使一方的私钥被泄露,过去的通信还是安全的,相比ECDH它是正向安全的

	ecdheSecret, err := h.randomPrivKey.GenerateShared(h.remoteRandomPub, sskLen, sskLen)

RLPx 使用了完全前向保密技术,通信双方生成随机公私钥对,交换各自本地公钥,并使用本地公钥对随机公钥加密发送到对方。使用自己的随机私钥和对方的公钥生成共享秘密(shared-secret)。后续使用这个共享秘密AES对称加密传输的数据,即使一方的私钥被泄露,过去的通信还是安全的

猜你喜欢

转载自blog.csdn.net/JIYILANZHOU/article/details/106568458