什么是ECC?ECC 和 RSA 之间有何区别?

椭圆曲线密码学 (ECC) 是一种基于椭圆曲线数学的公开密钥加密算法。

它提供了一种执行密钥交换、数字签名和加密等加密操作的安全方式ECC 为 1977 年首次发布的 Rivest-Shamir-Adleman (RSA) 加密算法提供了一种替代性方案。

继续阅读,进一步了解椭圆曲线密码学,以及为何它被认为是最安全的加密形式。

ECC 和 RSA 之间有何区别?

在讨论 ECC 和 RSA 之间的区别之前,了解公钥加密算法的工作原理非常重要。

最基础的强加密算法是“活板门函数”。 虽然掉进一扇活板门非常容易,但重新回到外面却很难,因为活板门只朝一个方向摆动。

因此,要使加密算法有效且安全,用来加密信息的方法必须很简单,但几乎不可能在没有解密密钥的情况下解密。

ECC 和 RSA 都是利用高等数学函数实现的公钥加密算法。

公钥加密包括两个组成部分,公钥和私钥。

公钥对消息进行加密的方法是,通过数学算法将消息转换为一个极大的随机数字。

消息只能用私钥解密,私钥获取这一随机大数后,对其应用另一种不同的算法,相当于“撤销”了该原始消息。

ECC 和 RSA 背后的数学问题非常复杂,只能通过计算机解决。 RSA 算法背后的数学问题超出了本篇博文的涵盖范围,但重点在于 RSA 的安全性就建立在分解两个大素数乘积的的巨大难度之上。

让我们来复习一下,对 20 这样的数字进行因数分解的方法如下:

20 = 4 * 5 = 2 * 2 * 5 = 2^2 * 5

看起来很简单,对吧?

那么,现在来想象一下如何对一个长度超过 100 位的数字进行因数分解。

这就是为什么即使拥有公钥,要在素因数未知的情况下计算出私钥,所需的计算密集程度也是非常高的。

RSA 加密算法的问题

虽然 RSA 算法是非常强的加密方法,但并非没有问题。

对大数进行因数分解非常困难,但困难比过去小。

因数分解是微积分和其他高等数学的核心组成部分,因此数学家们已经花费了数个世纪的时间来寻找更简单的解法。

目前存在的有效的大数因数分解算法包括通用数域筛法 (General Number Field Sieve),它是目前最著名的用于分解长度在 110 位以上的大数的算法。

与此同时,算力也在在以惊人的速度增长。 英特尔的联合创始人戈登·摩尔曾于 1965 年预测,芯片上的晶体管数量每两年就会增加一倍。 这一假说被称作“摩尔定律”,自 20 世纪 70 年代以来始终有效,甚至超额完成。 计算能力每两年翻一番 – 算力的价格也在不断下降。

由于分解极大整数所需的计算资源越来越容易获得,对普通人(包括网络犯罪分子)来说都处于可负担范围内,为适应变化的速度,RSA 密钥必须不断变大

正因为如此,RSA 的加密和解密速度都相当慢,这使得它不适合加密大量信息,特别是在移动设备上。

于是 RSA 通常用于密钥交换和数字签名,而其中的实际数据则使用对称加密算法和较短的会话密钥进行加密。

与之相反,**椭圆曲线加密能够以更短的密钥长度提供更出色的安全性,**因而从计算和带宽需求来看具有更高的效率。 在下一节中,我们将介绍 ECC 的工作原理。

椭圆曲线加密算法的工作原理是什么?

ECC 基于另一个称为椭圆曲线的高等数学领域。 椭圆曲线是由方程 y2 = x3 + ax + b 描述的曲线,其中 a 和 b 为常量,且该曲线的定义域是有限域。 绘制出的图形如下:

椭圆曲线具有的一些特殊性质,使它们对于数学家和密码学家而言既有趣又实用。 首先,椭圆曲线具有水平对称性。 位于 x 轴(水平轴)两侧的部分一模一样,就如同镜像。

此外,任意不垂直于椭圆曲线的直线与曲线的交点总是不超过三个。 在下面的示例中,这些点被标记为 P、Q 和 R。

椭圆曲线加密算法的安全性基于求解椭圆曲线离散对数问题的难度。 在给定曲线上的点 P 和标量 k 的情况下,要确定一个能够令 Q = k*P 的点 Q 非常困难 – 比因数分解一个极大整数要困难得多。

这一特性意味着 ECC 可以在密钥大小远小于 RSA 的前提下,提供与 RSA 相当甚至更可靠的安全性。

椭圆曲线加密算法的优势

ECC 能够以较短的密钥提供极高的安全性,这一点使其优于 RSA 和其他公钥加密算法。

使用椭圆曲线加密算法有以下两个优势。

  • ECC 生成密钥、加密和解密所需的计算资源和带宽都较低。
  • 由于 ECC 的密钥大小较小,与 RSA 相比,ECC 的密钥生成、加密和解密等操作可以执行得更快,这意味着最终用户的延迟更小。
  • 这些优势使 ECC 在资源有限的环境中尤其实用,例如手机和物联网 (IoT) 设备。

椭圆曲线加密算法的安全性如何?

虽然 RSA 加密算法具有极高的安全性,但 ECC 可以说是更胜一筹。

理论上,量子计算机或可有效解决 RSA 所依赖的因数分解问题,从而破解 RSA。 这种情况是否会很快成真,是一个很有争议的问题。 但我们可以肯定地说,考虑到 ECC 的复杂性,与 RSA 相比,它更能抵抗量子计算攻击。

有多大的抵抗能力?

荷兰数学家 Arjen Lenstra 在与他人合著的一篇研究论文中,将破解加密算法与烧水进行比较。

基本概念是计算出破解一个特定的加密算法需要多少能量,然后计算这些能量可以煮沸多少水。

通过这样的类比,破解一个 228 位 RSA 密钥所需的能量比煮沸一茶匙水所需的能量还少,但破解一个 228 位 ECC 密钥所消耗的能量可以煮沸地球上所有的水。

要达到相同的安全级别,RSA 密钥的长度需要达到 2380 位。

椭圆曲线加密算法的用武之地

如前所述,ECC 的密钥较小,因而尤其适合 CPU 和内存资源较低的设备,如移动设备和物联网设备。

这有助于 Web 和移动应用程序开发人员构建高性能、低延迟的网站和应用程序,同时为用户提供强大的数据安全性。 ECC 常常被用于保护蓝牙、Wi-Fi 和近场通信 (NFC) 等无线移动通信协议。

以下是一些更常见的 ECC 使用案例:

  • 安全通信协议:ECC 被用于各种安全通信协议,以提供加密、数字签名和密钥交换。 例如,用于安全网页浏览的传输层安全性 (TLS),用于安全远程登录的安全外壳 (SSH),以及用于安全网络通信的虚拟专用网络 (VPN)。
  • 加密货币和区块链技术:比特币、以太币和莱特币等许多加密货币都利用椭圆曲线加密来生成公钥和私钥对,以及签署交易。 ECC 能够提供保护数字资产和确保区块链网络完整性所需的加密安全性。
  • 智能卡和嵌入式系统:ECC 通常被用于保护支付系统、门禁系统、电子护照和其他需要既安全又小巧的加密解决方案的应用。
  • 数字签名和证书:ECC 可以用于生成数字签名,用于验证数字文档和消息的真实性和完整性。 基于 ECC 的数字签名还被部署在公钥基础设施 (PKI) 系统中,用于发放和验证数字证书。
  • 虽然与 RSA 相比,ECC 的历史还很短,但已充分标准化,并得到来自私营部门组织和行业机构的广泛支持。 例如,美国国家标准与技术研究院 (NIST) 在其加密算法套件中对 ECC 进行了标准化。 此外,流行的加密库、编程语言和操作系统也为 ECC 提供支持。 这一接受度进一步促进了金融、医疗和政府服务等众多部门对其的采用。

考虑到这些因素,我们可以肯定地说,椭圆曲线加密算法广受欢迎,并在众多应用和行业中得到了普遍的采用。 它的效率、安全性和广泛的支持使其成为安全通信和加密操作的可靠选择。

ECC 密钥对生成

首先,跟 RSA 一样,让我们先看下怎么使用 openssl 生成一个使用 prime256v1 曲线的 ECC 密钥 对:

# 列出 openssl 支持的所有曲线名称
openssl ecparam -list_curves

# 生成 ec 算法的私钥,使用 prime256v1 算法,密钥长度 256 位。(强度大于 2048 位的 RSA 密钥)
openssl ecparam -genkey -name prime256v1 -out ecc-private-key.pem
# 通过密钥生成公钥
openssl ec -in ecc-private-key.pem -pubout -out ecc-public-key.pem

# 查看私钥内容
❯ cat ecc-private-key.pem
-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIGm3wT/m4gDaoJGKfAHDXV2BVtdyb/aPTITJR5B6KVEtoAoGCCqGSM49
AwEHoUQDQgAE5IEIorw0WU5+om/UgfyYSKosiGO6Hpe8hxkqL5GUVPyu4LJkfw/e
99zhNJatliZ1Az/yCKww5KrXC8bQ9wGQvw==
-----END EC PRIVATE KEY-----

# 查看私钥的详细参数
❯ openssl ec -noout -text -in ecc-private-key.pem
read EC key
Private-Key: (256 bit)
priv:
    69:b7:c1:3f:e6:e2:00:da:a0:91:8a:7c:01:c3:5d:
    5d:81:56:d7:72:6f:f6:8f:4c:84:c9:47:90:7a:29:
    51:2d
pub:
    04:e4:81:08:a2:bc:34:59:4e:7e:a2:6f:d4:81:fc:
    98:48:aa:2c:88:63:ba:1e:97:bc:87:19:2a:2f:91:
    94:54:fc:ae:e0:b2:64:7f:0f🇩🇪f7:dc:e1:34:96:
    ad:96:26:75:03:3f:f2:08:ac:30:e4:aa:d7:0b:c6:
    d0:f7:01:90:bf
ASN1 OID: prime256v1
NIST CURVE: P-256

# 查看公钥内容
❯ cat ecc-public-key.pem
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5IEIorw0WU5+om/UgfyYSKosiGO6
Hpe8hxkqL5GUVPyu4LJkfw/e99zhNJatliZ1Az/yCKww5KrXC8bQ9wGQvw==
-----END PUBLIC KEY-----

# 查看公钥的参数
❯ openssl ec -noout -text -pubin -in ecc-public-key.pem
read EC key
Private-Key: (256 bit)
pub:
    04:e4:81:08:a2:bc:34:59:4e:7e:a2:6f:d4:81:fc:
    98:48:aa:2c:88:63:ba:1e:97:bc:87:19:2a:2f:91:
    94:54:fc:ae:e0:b2:64:7f:0f🇩🇪f7:dc:e1:34:96:
    ad:96:26:75:03:3f:f2:08:ac:30:e4:aa:d7:0b:c6:
    d0:f7:01:90:bf
ASN1 OID: prime256v1
NIST CURVE: P-256

可以看到 ECC 算法的公钥私钥都比 RSA 小了非常多,数据量小,却能带来同等的安全强度,这是 ECC
相比 RSA 最大的优势。

私钥的参数:

  • priv: 私钥,一个 256bits 的大整数,对应我们前面介绍的 k 倍运算 k 倍运算 k倍运算中的 $k
  • pub: 公钥,是一个椭圆曲线(EC)上的坐标 x , y {x, y} x,y,也就是我们 well-known 的基点 $G
  • ASN1 OID: prime256v1, 椭圆曲线的名称
  • NIST CURVE: P-256

使用安全随机数生成器即可直接生成出 ECC 的私钥 priv,因此 ECC 的密钥对生成速度非常快。

八、椭圆曲线加解密算法原理

设私钥、公钥分别为d、Q,即Q = dG,其中G为基点,椭圆曲线上的已知G和dG,求d是非常困难的,也就是说已知公钥和基点,想要算出私钥是非常困难的。

  • 公钥加密:选择随机数r,将消息M生成密文C,该密文是一个点对,C = {rG, M+rQ},其中Q为公钥。
  • 私钥解密:M + rQ - d(rG) = M + r(dG) - d(rG) = M,其中d、Q分别为私钥、公钥。

九、椭圆曲线签名算法原理

椭圆曲线签名算法(ECDSA)。设私钥、公钥分别为d、Q,即Q = dG,其中G为基点。

私钥签名:

  • 选择随机数r,计算点rG(x, y)。
  • 根据随机数r、消息M的哈希h、私钥d,计算s = (h + dx)/r。
  • 将消息M、和签名{rG, s}发给接收方。

公钥验证签名:

  • 接收方收到消息M、以及签名{rG=(x,y), s}。
  • 根据消息求哈希h。
  • 使用发送方公钥Q计算:hG/s + xQ/s,并与rG比较,如相等即验签成功。

原理:hG/s + xQ/s = hG/s + x(dG)/s = (h+xd)G/s = r(h+xd)G / (h+dx) = rG

10、签名过程

假设要签名的消息是一个字符串:“Hello World!”。DSA签名的第一个步骤是对待签名的消息生成一个消息摘要,不同的签名算法使用不同的消息摘要算法,而ECDSA256使用SHA256生成256比特的摘要。

摘要生成结束后,应用签名算法对摘要进行签名:

  • 产生一个随机数k
  • 利用随机数k,计算出两个大数r和s。将r和s拼在一起就构成了对消息摘要的签名。
    这里需要注意的是,因为随机数k的存在,对于同一条消息,使用同一个算法,产生的签名是不一样的。从函数的角度来理解,签名函数对同样的输入会产生不同的输出。因为函数内部会将随机值混入签名的过程。

11、验证过程

关于验证过程,这里不讨论它的算法细节。从宏观上看,消息的接收方从签名中分离出r和s,然后利用公开的密钥信息和s计算出r。如果计算出的r和接收到的r值相同,则表示验证成功,否则,表示验证失败。

12、工具

推荐一个在线ECC加密解密且可生成公钥私钥对的工具:在线ECC公钥私钥对生成,公钥加密/私钥解密

13 、参考资料

  • 椭圆曲线加密算法(ECC)
  • 小白也能看懂的 ECC 椭圆曲线加密算法
  • 什么是椭圆曲线密码学?
  • 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/512627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂!企业怎样才能选择适合自己的生产管理系统?

怎么选择适合所在企业的生产管理系统呢?该从哪些方面对生产管理系统进行评估?又怎样实现高效的生产管理呢? 本文我将和大家一起解决这些有关生产管理系统的问题? 生产管理系统模板,可直接查看和使用:https…

设备巡检系统革新:凡尔码平台的智能化配电箱管理

配电箱作为电气安全的关键环节,其巡检工作至关重要。传统的巡检方法依赖手工记录,不仅效率低下,而且难以确保数据的实时性和准确性。凡尔码平台的二维码设备巡检系统,以数字化解决方案,颠覆了这一过程,实现…

HWOD:自守数

一、知识点 break只会结束最里面的一层循环 int型数按位比较的时候,可以直接求余比较,无需转换为char型数组后再按下标比较 二、题目 1、描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 625,76^2 5776…

element-ui empty 组件源码分享

今日简单分享 empty 组件的源码实现,主要从以下三个方面: 1、empty 组件页面结构 2、empty 组件属性 3、empty 组件 slot 一、empty 组件页面结构 二、empty 组件属性 2.1 image 属性,图片地址,类型 string,无默认…

数据结构——栈(C语言版)

前言: 在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下栈的原理和应用。 准备工作:本人习惯将文件放在test.c…

线下陪玩小程序APP源码开发--线下游戏陪玩小程序App开发(源码平台)-APP小程序H5-前后端源码交付。

线下陪玩达人入驻服务系统软件开发(APP、公众号、小程序、H5搭建) 线下陪玩接单系统平台开发案例分析 1.丰富的娱乐项目:该平台提供了丰富的娱乐项目,包括但不限于桌游、运动、户外活动等,能够满足不同用户的需求。 2…

“不知今夕是何年”的周基年解法 | 得物技术

2024年1月5日,周五,本来是个美好的日子,期待着马上到来的周末。可是下午1点多,接到产品一个问题反馈,经过一番排查,23年7月份上线的功能,对于跨年场景的处理有问题,其核心在于“周的…

windows 11 如何使用 IE 浏览器

众所周知:IE 浏览器已经被微软废弃,像windows 11这种系统内置已经找不到 IE 浏览器了,这对前端工程师而言,肯定是不行的。因为项目中,经常有现场需要支持 ie 浏览器。(吐槽一下:微软都放弃了&am…

Centos7安装单机版Kafka

下载 链接:https://pan.baidu.com/s/1W8lVEF6Y-xlg6zr3l9QAbg?pwdhbkt 提取码:hbkt 上传到服务器/opt目录 安装 # kafka安装目录为 /opt/kafka cd /opt; mkdir kafka; mv kafka_2.13-2.7.0.tgz ./kafka;cd kafka; #解压 tar -zxvf kafka_2.13-2.7.0…

OpenHarmony实战开发-如何通过Stage模型实现一个简单的游戏卡片

介绍 本示例展示了如何通过Stage模型实现一个简单的游戏卡片。 通过卡片支持的点击事件进行交互,让用户通过点击的先后顺序把一个乱序的成语排列成正确的成语。使用了C和TS的混合编程方式,将获取随机数的能力下沉到C实现,并通过NAPI的能力将…

[RK3588-Android12] 调试MIPI-双通道-压缩屏(Video Mode/MIPI Dphy 8Lane/DSC 144HZ)

问题描述 被测屏幕:小米Pad6 分辨率:1800X2880 模式:Video Mode/MIPI Dphy 8Lane/DSC 144HZ PPS: 11 00 00 89 30 80 0B 40 03 84 00 14 01 C2 01 C2 02 00 01 F4 00 20 01 AB 00 06 00 0D 05 7A 06 1A 18 00 10 F0 03 0C 20 00 06 0B 0B 33…

ssh连接虚拟机 ubuntu

目录 虚拟机设置linux 安装sshFileZilla登录 虚拟机设置 linux 安装ssh sudo apt-get install openssh-server FileZilla登录

【问题处理】银河麒麟操作系统实例分享,理光打印机lpr协议打印问题处理

1.问题环境 系统版本:Kylin-Desktop-V10-SP1-General-Release-xxx-20221120-x86_64 内核版本:linux 5.4.18-44kt-generic 系统版本:麒麟v10 sp1 处理器:kx6640ma 2.问题描述 问题详细描述:用户通过lpr协议去连接…

2024052期传足14场胜负前瞻

2024052期售止时间为4月3日(周三)22点00分,敬请留意: 本期深盘多,1.5以下赔率7场,1.5-2.0赔率1场,其他场次是平半盘、平盘。本期14场难度中等偏下。以下为基础盘前瞻,大家可根据自身…

算法学习17:背包问题(动态规划)

算法学习17:背包问题(动态规划) 文章目录 算法学习17:背包问题(动态规划)前言一、01背包问题:1.朴素版:(二维)2.优化版:(一维&#xf…

蓝色wordpress外贸建站模板

蓝色wordpress外贸建站模板 https://www.mymoban.com/wordpress/7.html

搭建 Qt 开发环境

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、QT SDK 的下载和安装 1.QT SDK 的下载 二、QT SDK的安装 1、找到下载的文件并双击 2、双击之…

2.人机交互-图形化界面的小故事

文章目录 一、图形化界面的小故事二、什么是cmd? 计算机在刚开始出现的时候,因为占地广、造价高、耗电多,一般都是给军队或者政府使用的,而并不是给个人使用的。然后随着计算机不断地发展,体积越来越小,出现…

深度解析C语言——预处理详解

对C语言有一定了解的同学&#xff0c;相信对预处理一定不会陌生。今天我们就来聊一聊一些预处理的相关知识。预处理是在编译之前对源文件进行简单加工的过程&#xff0c;主要是处理以#开头的命令&#xff0c;例如#include <stdio.h>、#define等。预处理是C语言的一个重要…

数学建模-------MATLAB分支循环断点调试

1.if语句 &#xff08;1&#xff09;分段函数的引入&#xff08;这里的数据表示的是分数的不同区间对应的等级&#xff09; (1)这个就是一个十分简单的if语句&#xff0c;无论是if还是elseif后面都是不能添加任何分号的&#xff0c;这个例子就是一个分段的函数&#xff0c;在不…