ECC简介
随着分解大整数方法的进步及完善、计算机速度的提高以及计算机网络的发展,为了保障数据的安全,RSA的密钥需要不断增加,但是,密钥长度的增加导致了其加解密的速度大为降低,硬件实现也变得越来越难以忍受,这对使用RSA的应用带来了很重的负担,因此需要一种新的算法来代替RSA。
1985年N.Koblitz和Miller提出将椭圆曲线用于密码算法,全称:Elliptic curve cryptography,缩写为ECC,根据是有限域上的椭圆曲线上的点群中的离散对数问题ECDLP。ECDLP是比因子分解问题更难的问题,它是指数级的难度。
现在SSL证书普遍使用的是RSA算法,由于上述的RSA算法存在的缺点,使用ECC作为其公钥算法的数字证书近几年的发展也不容小觑:2008年左右CA开始储备ECC根证书,2012年左右CA开始对外公开销售ECC证书,2014年ECC证书在国外被普遍开始使用,2015年国内开始接受ECC证书。
ECC和RSA相比,在许多方面都有对绝对的优势,主要体现在以下方面:抗攻击性强
CPU占用少
内容使用少
网络消耗低
加密速度快
随着安全等级的增加,当前加密法的密钥长度也会成指数增加,而ECC密钥长度 却只是成线性增加。以下是一份ECC密钥大小的具体情况,以及与它们安全性对等的RSA密钥的大小:
ECC密钥长度RSA密钥长度
160位1024位
224位2048位
256位3072位
384位7683位
256位15306位
ECC 具有如此卓越的按位比率加密的性能,预计其特点将成为安全系统关注的重点。
使用ECC签名的证书比RSA签名的证书具有较明显的大小优势,通过实际证书对比,384位ECC签名证书可以比2048位RSA+384位ECC签名证书小550~600字节,可以节约网络带宽成本。
升级ECC证书
问题背景
使用ssl连接时,遇到不信任的证书,应用程序一般都会拒绝连接。
浏览网站时,我们可以通过在浏览器的设置中导入证书,把证书加入到信任列表中。
而在JAVA直接进行SSL连接应用时,默认没有一个界面来导入证书。JAVA进行不信任的ssl连接时,会报如下异常:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX p