密码学基础---椭圆曲线一文打尽

1.ECC简介及密钥生成

当前公认安全有效的三大类公钥密钥体制分别为基于大数因子分解难题(RSA)、离散对数难题(DSA)和椭圆曲线离散对数(ECC)难题的密码体制。

最初RSA由于其容易理解被广泛运用,但随着计算机性能的提升,要保证RSA的安全性,则必须要增加密钥长度,所以我们可以看到RSA密钥从1024bits慢慢来到了4096bits。

由于汽车网络安全近几年才兴起,专为密钥存储设计的硬件资源有限,如果用RSA算法,密钥存储数量有限,而ECC(Elliptic Curve Cryptography)的出现有效弥补了这方面的缺憾,实现了密钥效率上的突破,根据NIST.SP.800-57pt1r5描述,对称算法和非对称算法的安全强度如下图所示:

图  安全性对比

可以看到,160bits的ECC密钥长度实现的安全强度等同于RSA 密钥长度1024bits,所以汽车行业越来越倾向使用ECC来实现验签、会话密钥协商等。

椭圆曲线离散对数问题如下定义:已知椭圆曲线E和点G,随机选择一个整数d,容易计算Q = d*G,但给定Q和G计算d就很困难。

基于上述定义,密钥生成的方法如下:

  1. 确定拥有素数阶n的点G(xG,yG),建议使用标准中推荐的椭圆曲线;
  2. 在[1, n-1]中随机选择整数d作为私钥;
  3. 计算Q = d * G,得到公钥;
  4. 因此公钥为点G(x,y),私钥为d;离散对数难解性保证了已知公钥Q的情况不能计算出私钥d。

2.椭圆曲线汇总

椭圆曲线是一个具有两个变量x、y的三次方程,满足公式:

的所有点(x,y)的集合,以及一个无穷远点O(y趋于无穷)。该公式也叫魏尔斯特拉斯方程(Weierstrass function),所有的曲线均属于该方程的变体。

例如,

针对素数有限域GF(P)的椭圆曲线是针对固定a、b,满足方程为:

的所有点(x,y)的集合,外加无穷远点O。

        其中,a、b、x和y均在有限域GF(p)({0,1,...,p-1})上取值,满足4a^2+27b^3≠0,;p是大于3的素数,因此用Ep(a,b)表示。

        针对阶为2m的有限域GF(2m)上的椭圆曲线是针对固定a、b,满足方程:

的所有点(x,y)的结合,再加上无穷远点O,

        其中,a、b、x和y均能在有限域GF(2m)上取值,该域上的元素是m位的二进制串。

        很明显,基于素域GF(p)对于软件计算比较友好,而基于二元扩域的GF(2^m)明显是硬件更有效率。

        密钥生成时提到标准中推荐的曲线,主要从如下标准进行整理:

  1. SEC 2:Recommended Elliptic Curve Domain Parameters
  2. NIST SP800-186:Recommendations for Discrete Logarithm-based Cryptography
  3. Brainpool:Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation
  4. SM2椭圆曲线公钥密码算法

2.1 SEC 2

SEC 2由1998年成立的行业联盟SECG发布,该联盟全称The Standards for Efficient Cryptography Group,旨在指定商业标准,促进在密码学的高效和易操作性。

该联盟主要输出的标准叫做SEC(Standards for Efficient Cryptography),包括如下内容:

  1. SEC 1: Elliptic Curve Cryptography, Version 2.0
  2. SEC 2: Recommended Elliptic Curve Domain Parameteres, Version 2.0
  3. SEC 4: Elliptic Curve Qu-Vanstone Implicit Certificates

其中,SEC 2列出了SEC 1以及其他ECC标准(如ANSI X9.62、ANSI X9.63、IEEE 1363、IEEE 1363a等)的中常见椭圆曲线参数,如下表2、表3所示。

曲线参数

Strength

Size

RSA/DSA

Koblitz\Random

secp192k1

96

192

1536

k

secp192r1

96

192

1536

r

secp224k1

112

224

2048

k

secp224r1

112

224

2048

r

secp256k1

128

256

3072

k

secp256r1

128

256

3072

r

secp384r1

192

384

7680

r

secp521r1

256

521

15360

r

表  基于素数域GF(p)的椭圆曲线

其中,每列参数解释如下:

  • 上述曲线命名方式如下:
  • Sec:Standards for Efficient Cryptography的简称;
  • P:表示参数在素数有限域GF(p);
  • 后续数字:表示p的比特长度,例如192表示p的长度为192bit;
  • K\R:表示参数是与Koblitz曲线(k)相关还是随机生成(r) 
  • Strength:表示密钥强度的大致位数,一般来讲近似为阶数的一半;
  • Size:密钥长度;
  • RSA\DSA:对应同等强度的RSA\DSA的密钥长度
  • Koblitz\Random:
    • Koblitz Curve来自数学家Neal Koblitz,它是一种特殊的曲线,参数是精心挑选设置,可以通过优化大幅提升计算效率;
    • Random:可验证的随机种子产生的参数
  • 末位数字:表示在当前曲线下的参数配置有几种,例如1就为1种推荐配置。

上述域参数用公式T = (p,a,b,G,n,h)进行表示,其中p为素数,a、b为椭圆曲线参数,G为拥有素数阶n的点G(xG,yG),n为阶N与点G的比,h= N/n。

如下为secp256k1和secp256r1的推荐参数设置:

secp256k1:

  • p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2^256 -2^32-2^9 -2^8 -2^7 -2^6-2^4-1
  • a=0
  • b=7
  • G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
  • 非压缩G=04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
  • n=FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
  • h = 01

secp256r1:

  • p = FFFFFFFF 00000001 00000000 00000000 00000000 FFFFFFFF FFFFFFFF FFFFFFFF
  • = 2^224 (2^32-1)+2^192 +2^96 -1
  • a=FFFFFFFF 00000001 00000000 00000000 00000000 FFFFFFFF FFFFFFFF FFFFFFFC
  • b=5AC635D8 AA3A93E7 B3EBBD55 769886BC 651D06B0 CC53B0F6 3BCE3C3E 27D2604B
  • 随机数种子:S = C49D3608 86E70493 6A6678E1 139D26B7 819F7E90
  • G = 03 6B17D1F2 E12C4247 F8BCE6E5 63A440F2 77037D81 2DEB33A0 F4A13945 D898C296
  • 非压缩G=04 6B17D1F2 E12C4247 F8BCE6E5 63A440F2 77037D81 2DEB33A0 F4A13945 D898C296 4FE342E2 FE1A7F9B 8EE7EB4A 7C0F9E16 2BCE3357 6B315ECE CBB64068 37BF51F5
  • n=FFFFFFFF 00000000 FFFFFFFF FFFFFFFF BCE6FAAD A7179E84 F3B9CAC2 FC632551
  • h = 01

曲线参数

Strength

Size

RSA/DSA

Koblitz\Random

sect163k1

80

163

1024

k

sect163r1

80

163

1024

r

sect163r2

80

163

1024

r

sect233k1

112

233

2240

k

sect233r1

112

233

2240

r

sect239k1

115

239

2304

k

sect283k1

128

383

3456

k

sect283r1

128

283

3456

r

sect409k1

192

409

7680

k

sect409r1

192

409

7680

r

sect571k1

256

571

15360

k

sect571r1

256

571

15360

r

表  基于GF(2^m)的椭圆曲线

同样的,基于GF(2^m)的椭圆曲线参数命名除了在sec后的字母为t,其余均类似。

2.2 NIST SP800-186

NIST SP800-186同样也是收集了一大堆各个标准的推荐曲线,其中包括了FIPS 186-4推荐曲线、SEC 2 secp256k1、Brainpool曲线等等,推荐曲线的安全强度总结如下:

安全强度

推荐曲线

112

P-224、K-233、B-233

128

P-256, W-25519, Curve25519, Edwards25519, K-283, B-283

192

P-384, K-409, B-409

224

W-448, Curve448, Edwards448, E448

256

P-521, K-571, B-571

表  推荐曲线及安全强度

其中,

  • 基于prime fields GF(p)的曲线,称为P-xxx曲线;
  • 基于Binary fields GF(2m)的曲线,称为B-xxx曲线;
  • Koblitz曲线,称为K-xxx曲线;
  • 维尔斯特拉斯曲线,称为W-xxx曲线;
  • 蒙哥马利曲线(Montgomery Cureves),包括Curve448、Curve25519

各曲线使用范围如下:

图 特定曲线的使用推荐

特别的,上述部分曲线与SEC 2的曲线推荐参数完全一致,仅在命名上有所不同,如下表所示:

NIST

SEC 2

P-192

secp192r1

P-224

secp224r1

P-256

secp256r1

P-384

secp384r1

P-521

secp521r1

K-163

sect163k1

K-233

sect233k1

K-283

sect283k1

K-409

sect409k1

K-571

sect521k1

B-163

sect163r2

B-233

sect233r1

B-283

sect283r1

B-409

sect409r1

B-571

sect521r1

表 4 NIST和SEC 2曲线

工具中的曲线命名采用SEC 2命名方式,如下图:

图  推荐椭圆曲线

2.3 Brainpool

Brainpool是由德国的电子支付系统研究中心(ECRYPT II)和德国电信(Deutsche Telekom)联合开发的一系列椭圆曲线。它主要想解决NIST\SEC 2曲线以下几个方面的问题:

  1. 参数以可验证的伪随机数方式生成(特别是对B-xxx、P-xxx的随机数种子的生成方式),并满足安全要求(例如Dual_EC_DRBG后门事件);
  2. 指定的域参数不包括所指定的所有位长度对应于对称的常用密钥长度加密算法。特别没有512位曲线定义,只有一个521位长度的曲线;
  3. 抵御侧信道攻击等

Brainpool曲线域参数长度位数包括160、192、224、256、320、384、512,曲线分为 brainpoolP160r1\t1、 brainpoolP192r1\t1、 brainpoolP224r1\t1、 brainpoolP256r1\t1、 brainpoolP320r1\t1、 brainpoolP384r1\t1、 brainpoolP512r1\t1

其中t1表示twisted curve,用于抵御侧信道攻击。

本程序仅实现用于TLS V1.3上所需的ECC Brainpool曲线,包括brainpoolP256r1、brainpoolP384r1、brainpoolP512r1。

根据标准,brainpoolP256r1推荐参数如下:

图  brainpoolP256r1域参数

其中,

  • p为基域的素数;
  • A、B满足方程y^2 = x^3 + A*x + B mod p的系数;
  • G(x,y)为基点;
  • q为G群的素数阶;
  • h为阶p与G的余数,例如E(GF(p))/q。

2.4 SM2

SM2是国家密码局推出的自主可控的算法。示例曲线包括:

素域GF(P)上椭圆曲线:Fp-192、Fp-256,满足方程y^2 = x^3+ax+b,域参数如下:

二元扩域GF(2^m)曲线F2m -193、F2m -257,满足方程y^2+xy=x^3+ax^2+b。示例如下:

3.数字签名

数字签名可以直接提供消息来源的真实性、消息的完整性、消息的不可否认性。

常见方案为发送方使用Hash函数对消息进行摘要计算,然后使用私钥对摘要进行加密生成一个特定的签名值,然后将消息和签名一起发送给接收方;接收方首先对消息进行Hash计算得到摘要,然后使用发送方公钥对签名值进行解密,得到摘要值1,将摘要和摘要值进行比对,保证了消息的完整性、消息来源未被伪造,同时具备不可抵赖性,因为理论上只有发送方才有私钥进行签名。

可用于数字签名的算法和方案包括RSA、DSA、ECDSA、EdDSA。

  • RSA:有简称RSASSA(来源RFC3447),主要基于大数因子分解的难点,是最早的公钥密码体制之一;
  • DSA(Digital Signature Algorithm):仅用于对消息进行签名,其安全性基于计算离散对数的难度;
  • ECDSA(Elliptic Curve Digital Signature Algorithm):基于椭圆曲线的签名;
  • EdDSA:Edwards Curve Digital Signature Algorithm
    • Ed25519:使用EdDSA算法和Curve25519曲线来进行签名的
    • Ed448:使用EdDSA算法进行签名

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第336题回文对

题目&#xff1a; 题解&#xff1a; // 哈希表实现 class Solution {public List<List<Integer>> palindromePairs(String[] words) {List<List<Integer>> res new ArrayList<>();int n words.length;Map<String, Integer> indices ne…

AIGC:clip-interrogator

文字生成图片是近年来多模态和大模型研究的热门方向&#xff0c;openai提出的CLIP提供了一个方法建立起了图片和文字的联系&#xff0c;但是只能做到给定一张图片选择给定文本语义最相近的那一个&#xff0c;实际项目开发中我们总是需要从一张图片获取描述&#xff0c;clip-int…

高效录制新选择:2024年Windows录屏软件

录屏能帮助我们捕捉屏幕上的精彩瞬间&#xff0c;作为老师可以用来录制课程&#xff0c;作为会议记录员可以用来录制远程会议。那么有什么软件是适合windows录屏的呢&#xff1f;这次我们一起来探讨一下吧。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款软…

什么是链表/双向链表

看csp j选择的时候看到链表题&#xff0c;那就来写一写吧 什么是链表 首先我们知道数组&#xff1a; 链表和数组有点像&#xff0c;他是这样的&#xff1a; 1----->2------->3------->4 链表中每个数据都有一个指针&#xff0c;指着自己的下一项数据是哪一个 比如…

Android高版本抓包总结

方案1 CharlesVirtualXposedJustTrustMe 推荐使用三星手机此方案 VirtualXposed下载链接&#xff1a;https://github.com/android-hacker/VirtualXposed/releases JustTrustMe下载链接&#xff1a;https://github.com/Fuzion24/JustTrustMe/releases/ 下载完成后使用adb命令…

编辑器和工具扩展

https://www.youtube.com/watch?vovpiYkYFlPM ui提示 检查资源的合法性

使用 Ollama 集成 GraphRag.Net:一步步教你如何实现

在当今的技术世界&#xff0c;人工智能 (AI) 正在以惊人的速度发展。对于开发者来说&#xff0c;使用最新的工具和框架来提升工作效率至关重要。而在 AI 领域&#xff0c;GraphRag.Net 作为一个强大的图算法框架&#xff0c;允许我们以高效的方式进行数据处理。同样&#xff0c…

【Java 并发编程】(二) 从对象内存布局开始聊 synchronized

对象的内存布局 首先抛出一个经典面试题: 一个 Object 对象占多大? 这里我用工具打印了出来, 发现是 “16bytes”, 也就是 16B; 为什么? 请继续往下看; 普通对象(除了数组), 由markword, 类型指针, 实例数据(就是对象里的成员), 对齐填充(整个对象大小要能被8B整数, 方便6…

电销机器人引领电销变革

以前电销都是都是通过盲打&#xff0c;现在有了电话机器人的出现&#xff0c;为电销公司带来新的篇章。 我们都知道外呼中心的人员离职率始终居高不下&#xff0c;人员的培训频繁成本很高&#xff0c;外部电话水平参差不齐&#xff0c;服务态度不够稳定等问题&#xff0c;都是难…

基础 - 前端知识体系详解

一、前端三要素 HTML&#xff08;结构&#xff09;&#xff1a; 超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;&#xff0c;决定网页的结构和内容。CSS&#xff08;表现&#xff09;&#xff1a; 层叠样式表&#xff08;Cascading Style Sheets&#xff0…

【Mac】Downie 打开提示试用的解决办法?

前情 我们在使用 Downie 的时候&#xff0c;可能遇到提示试用的问题&#xff0c;如下图所示。 原因 旧版本的 Downie 没有卸载干净导致的。 解决办法 先使用 AppCleaner 卸载掉电脑上的 Downie 旧版本软件&#xff0c;必须使用 AppCleaner 卸载。重新安装 Downie 即可。

如何保证数据不丢失?(死信队列)

死信队列 1、什么是死信 死信通常是消息在特定的场景下表现&#xff1a; 消息被拒绝访问消费者发生异常&#xff0c;超过重试次数消息的Expiration过期时长或者队列TTL过期时间消息队列到达最大容量 maxLength 2、什么是死信队列 只由死信构成的消息队列是死信队列 死信队…

PhpStorm完全配置指南:打造高效PHP开发环境!

Phpstorm环境配置与应用&#xff0c;具体包括安装PhpStorm、配置PHP运行环境、Apache集成、调试和部署等步骤。下面将详细展开每个步骤的具体操作和注意事项。 PhpStorm的下载与安装 下载地址&#xff1a;访问PhpStorm的官网下载地址&#xff0c;选择合适的版本进行下载。建议选…

springboot、spring@JsonAlias(velue)的作用

‌JsonAlias注解用于为字段或参数指定反序列化时的别名。‌‌ 在Java开发中&#xff0c;‌特别是在使用Jackson库进行JSON序列化和反序列化时&#xff0c;‌JsonAlias注解扮演着重要的角色。‌它允许开发者为字段或参数指定一个或多个别名&#xff0c;‌这样在反序列化过程中&…

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法&#xff0c;通过将原始数据分成若干个子序列&#xff0c;然后对子序列进行插入排序&#xff0c;逐渐减小子序列的间隔&#xff0c;最后对整个序列进行一次插入排序。 1.分组直接插入排序&#xff0c;目标接近有序--------…

玩机进阶教程-----回读 备份 导出分区来制作线刷包 回读分区的写入与否 修改xml脚本

很多工作室需要将修改好的系统导出来制作线刷包。前面分享过很多制作线刷包类的教程。那么一个机型中有很多分区。那些分区回读后要写入。那些分区不需要写入。强写有可能会导致不开机 不进系统的故障。首先要明白。就算机型全分区导出后在写回去 都不一定可以开机进系统。那么…

萌啦数据插件使用情况分析,萌啦数据插件下载

在当今数字化时代&#xff0c;数据已成为企业决策与个人分析不可或缺的重要资源。随着数据分析工具的日益丰富&#xff0c;一款高效、易用的数据插件成为了众多用户的心头好。其中&#xff0c;“萌啦数据插件”凭借其独特的优势&#xff0c;在众多竞品中脱颖而出&#xff0c;成…

基于SpringBoot的房屋交易平台的设计与实现

TOC springboot235基于SpringBoot的房屋交易平台的设计与实现 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这个新…

基于Web的农产品直卖平台的设计与实现

TOC springboot266基于Web的农产品直卖平台的设计与实现 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大&#xff0c;人为计算方面才是一个巨大的短板&#xff0c;所以发明了各种计算设备&#xff0c;从结绳记事&#xff0c;到算筹&#xff0c;以及算盘&#xff0c;到…

电路板元器件识别指南:电子技术核心知识

电子设备无处不在&#xff0c;从我们日常使用的手机到复杂的医疗设备&#xff0c;背后都有一个共同的组件——电路板。电路板上的各种元器件是电子设备功能实现的基础。在此&#xff0c;道合顺帮助读者们理解电路板上不同元器件的作用与识别方法&#xff0c;从而更好地维护和使…