以太坊与椭圆曲线

参考

  1. TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别:https://blog.csdn.net/mrpre/article/details/78025940
  2. 百度百科-RSA算法:https://baike.baidu.com/item/RSA%E7%AE%97%E6%B3%95/263310?fromtitle=RSA&fromid=210678&fr=aladdin
  3. 百度百科-椭圆加密算法:https://baike.baidu.com/item/%E6%A4%AD%E5%9C%86%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/10305582
  4. 以太坊源码分析(47)p2p-rlpx节点之间的加密链路:https://blog.csdn.net/itcastcpp/article/details/80305636
  5. 以太坊RLPx加密通信协议(详细讲解rlp握手过程):https://blog.csdn.net/weixin_41814722/article/details/80680749
    https://blog.csdn.net/Fly_hps/article/details/81026221
    https://www.8btc.com/article/158949
    https://www.8btc.com/article/261311

两种非对称加密算法

  1. 基于大质数因子分解困难性:RSA
  2. 基于椭圆曲线方程式:ECC

RSA vs ECC

  1. ECC安全性更高,ECC164位的密钥产生的安全级,相当于RSA 1024位密钥提供的保密强度
  2. ECC处理速度快,计算量较小,处理速度更快,存储空间和传输带宽占用较少。
  3. ECC设计困难,实现复杂,如果序列号设计过短,那么安全性并没有想象中的完善
  4. ECC加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。
  5. RSA的私钥和公钥是可以互换加解密的,但椭圆加密只能私钥加密公钥解密。

保密级别

安全级别(security level)的概念是:N bits的安全级别,意味着攻击者大约要经过2^N的运算才能获得本次加密用的私钥。安全级别所代表的bits越长,意味着安全性能越好,越难以被攻破,当然同时在加密时的代价,包括公钥长度和生成签名长度,自然也会相应增加。

下表列出了对称加密和非对称加密(RSA,ECC),对同一安全级别所对应的密钥长度。


图片.png

美国国家标准与技术局和ANSI X9已经设定了最小密钥长度的要求,RSA和DSA是1024位,ECC是160位,相应的对称分组密码的密钥长度是80位。

RSA

使用最广泛的非对称加密算法,RSA密钥长度随着保密级别提高,增加很快。

  • 安全性要求高的,使用RSA 2048[bits]的密钥,
  • 安全性一般的,使用RSA 1024[bits]的密钥。
因数分解

在数学中, 因数分解,又称素因数分解,是把一个正整数写成几个约数的乘积。

例如,给出45这个数,它可以分解成3×3×5,根据算术基本定理,这样的分解结果应该是独一无二的。

因数分解的关键是寻找因子(约数),而完整的因子列表可以根据约数分解推导出,将幂从零不断增加直到等于这个数。

例如,因为45= 3×3×5,45可以被 1,5,3,9,15,和 45整除。相对应的,约数分解只包括约数因子。

RSA破解

RSA对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。

  1. 针对RSA最流行的攻击一般是基于大数因数分解。
  • 1999年,RSA-155 (512 bits)被成功分解,花了五个月时间
  • 2009年,RSA-768(768 bits, 232 digits)数也被成功分解。这一事件威胁了现通行的1024-bit密钥的安全性,普遍认为用户应尽快升级到2048-bit或以上
  1. 量子计算-秀尔算法
    在未来量子计算机出来时,理论上讲,密钥为1024位长的RSA算法,用一台512量子比特位的量子计算机在1秒内即可破解。

前向安全和前向不安全

前向安全或前向保密(英语:Forward Secrecy,缩写:FS)
有时也被称为完美前向安全(英语:Perfect Forward Secrecy,缩写:PFS),是密码学中通讯协议的安全属性。

  1. 指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。
  2. 前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。
  3. 如果系统具有前向安全性,就可以保证万一密码或密钥在某个时刻不慎泄露,过去已经进行的通讯依然是安全,不会受到任何影响,即使系统遭到主动攻击也是如此。
    参考https://blog.csdn.net/itcastcpp/article/details/80305636
    参考https://blog.csdn.net/mrpre/article/details/78025940
    案例:
    比如A与B之间通信时,使用RSA密钥交换算法,A首先随机生成一个共享密钥S,通过B的RSA公钥加密传给B,B使用RSA私钥解密获得S,这样双方就可以使用S加密报文进行通信了。
    这样有一个不安全的地方是:
    假如,有人拦截了A与B所有通信内容并保存下来,如果有一天B的私钥泄露或破解(量子计算机分解大素数),那么就可以通过私钥解密报文获取共享密钥S,然后所有报文内容都可以被破解,那么A和B就没有什么私密性可言了。
    这就是所谓的前向不安全,私钥参与了密钥交换,安全性取决于私钥是否安全保存。

ECDHE(DHE)算法属于DH类密钥交换算法, 私钥不参与密钥的协商,故即使私钥泄漏,客户端和服务器之间加密的报文都无法被解密,这叫 前向安全(forward secrity)。由于ECDHE每条会话都重新计算一个密钥(Ra、Rb),故一条会话被解密后,其他会话仍旧安全。

然而,ECDH算法服务器端的私钥是固定的,即证书的私钥作为Rb,故ECDH不被认为前向安全,因为私钥泄漏相当于Rb泄漏,Rb泄漏,导致会话密钥可被第三方计算。

传送信息时,为什么要使用对称加密,不直接使用非对称加密?

  1. 计算量大,因为不管是RSA还是ECC非对称加密,加密的计算量都非常大,只适合用于加密少量字符。
    所以为了减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用AES(或IDEA)密钥加密,然后使用RSA密钥加密AES密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
  2. 非对称加密数据存在二义性,比如RSA算法,要加密明文m,使用公式m^e mod n,如果m大于n,那么其加密的结果和k的结果时一样的,这就有二义性了,所以RSA本身就不允许m>n的情况出现。所以拿来直接加密数据时不可取的。参考https://blog.csdn.net/mrpre/article/details/78025940

椭圆曲线和secp256k1

椭圆曲线简单的说就是用X和Y坐标画一个曲线,这个曲线怎么画,需要很多个参数来确定,不同的参数画的曲线也不一样,比如prime256v1、secp256r1、nistp256、secp256k1等。
secp256k1就是其中一种曲线,使用这种曲线的椭圆曲线加密签名算法就叫ECDSA-secp256k1。
比特币选择的数字签名算法就是ECDSA-secp256k1,而以太坊几乎完全沿用了比特币这一套,只有哈希的生成方式不一样。

ECDSA-secp256k1,用于计算私钥所对应的非压缩公钥,生成的公钥一共65个字节,以太坊的非压缩公钥是一个65字节的数,这个是继承至比特币的。但以太坊只使用了其中64个字节,有一个字节这64个字节中,32字节表示椭圆曲线的X坐标,32字节表示椭圆曲线的Y坐标。

你可能感兴趣的:(以太坊与椭圆曲线)