Set It and Forget It! Turnkey ECC for Instant Integration:设置即可忘!提供即时集成的一站式ECC
前述
坐标2021.1.14
看论文真是隔领域如隔山,隔壁的区块链看得我虽懵懂但津津有味,今天的ECC看得我一头雾水还自惭形秽。。。o(╥﹏╥)o
关于paper
首先论文的题目:“turnkey”-一站式方案(英语:Turnkey project,又称turnkey,turn-key),是一种专案类型,指的是卖方将专案架设好并调整完成,在可立即使用的情况下卖给买家,是科技业中一种常见的技术转移方式。 “卖方什么事情都帮你搞定了,买方最后只需要拿钥匙验收就可以了”[百度百科]
该论文实现了ECC堆栈的自动化实现、测试和集成,旨在提供一个集成的ECC架构,解决密码学上的ECC一些问题,以自动化的方式实现,跨越密码学研究成果和部署的软件之间的鸿沟。
Keyword:applied cryptography; public key cryptography; elliptic curve cryp-tography; software engineering; software testing; formal verification; GOST; NSS; OpenSSL
成果在 https://gitlab.com/nisec/ecckiila,汗,得现下git,彩笔属性暴露无遗
椭圆曲线加密ECC
ECC椭圆曲线加解密原理详解(配图). <—大佬们都好会写,膜
椭圆曲线方程:y2=x3+ax+b。。。
阿贝尔群运算:相加、倍点。。。
有限域运算(mod p),注:如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=无穷远点O∞,则称n为P的阶;否则为无限阶。。。
ECC加密过程。。。
正文
ECC背景
短Weierstrass曲线 Ew:y2=x3+ax+b,a∈GF( p),b∈GF( p).
假设E的元素个数等于h·q,其中q是一个素数,lg(q)≈lg(P),h∈{1,4,8}。P为E上的定点,当4整除h,有:
Twisted Edwards 曲线 Et:eu2+v2=1+du2v2,二者元素个数相同,且线上的点具有一 一对应的关系。
1、Short Weierstrass曲线上的投影点:混合点加法都以投影点和仿射点作为输入,O是例外,它没有仿射表示——异常过程攻击。
2、Twisted Edwards曲线上的投影点:O不会对加法产生异常。
ECC加密三步:
(1)Key generation:给定一个q阶点g,用户随机均匀地从{1, . . . ,q−1}选择一个密钥α,并计算公钥P=[α]g。
(2)Key agreement with cofactor clearing (ECC CDH):Alice生成私钥αa∈{1, . . . ,q−1}和公钥Pa=[αa]g;Bob生成αb和Pb=[αb]g。接下来,Alice和Bob分别计算sab=[h·αa]Pb和sba=[h·αb]Pa。因此,sab=[h·αa]Pb=[h·αa·αb]g=[h·αb·αa]g=[h·αb]Pa=sba是共享密钥。h的乘法称为辅因子清除
(3)Digital signature algorithm (ECDSA):用一个公式签名(r,s)
GOST
1、数字签名:与上述相同。RFC 4357[39]中描述了前三条lg(p)=256的曲线,所有这些曲线都只有平凡的余因子h=1,即它们是循环群,所有曲线点都可以是合法的公钥。采用新的数字签名标准后,标准化了两条lg(p)=512和h=1的曲线,以及两条h=4的Twisted Edwards曲线:一条lg(p)=256,另一条lg(p)=512,所有这些都在RFC 7836[44]中描述。一个重要的方面是Twisted Edwards曲线仍然指定为短曲线由于兼容性。
2、密钥生成:无规定,随机数。
3、密钥协议:VKO,使用了UKM:双方已知的可选非秘密参数,VKO直接在ECC级别对UKM进行编码。
4、公钥加密:根据GOST R 34.10,经常使用不正确的短语加密,但实际上从未使用过非对称密钥加密。相反,VKO计算一个共享密钥,然后对称加密算法使用该密钥进行数据加密。因此,它是混合加密。
GOST OpenSSL Engine:gost engine是作为GOST加密算法的参考实现而创建的,有各种加密部分的实现
支持密钥生成、密钥协议(用OpenSSL术语派生)、数字签名和验证以及混合加密/解密。它支持相关RFCs的所有曲线,从测试曲线到h=1短曲线,再到h=4短曲线,具有Twisted Edwards等值。在标准化级别上,总共有八条具有多个对象标识符(OID)别名的不同曲线。
ECC单元测试:ECCKAT
用于ECC实现的库无关单元和回归测试框架
使用数据驱动测试(DDT)方法,严重依赖于已知答案测试(KATs)
流程:
- 从各种来源(如标准、RFC和验证工作)收集现有的KATs;-ECC-CDH、ECDSA、确定性ECDSA的各种曲线测试
- 用负测试和潜在的拐角情况来增强这些KAT,并使用独立的 测试中实现(IUT)扩展到任意曲线;-扩展到素数域和二进制域上的一般曲线,一个最显著的缺陷是缺乏对ECC-CDH的负测试
—具体:— 即曲线h≠1,ECCKAT生成ECC CDH的负测试,如下所示。首先,用SageMath方法找到一个完全椭圆曲线群的生成元,即如果群是循环的,则找到一个 hq阶点,或者在(实际上,很少见的)非循环情况下找到一个最大阶的生成元。然后,q标量乘产生一个最大的小子群的恶意生成器。这正是应该导致ECC-CDH协议失败的对等点,因为清除辅因子(即标量和h之间的整数乘法)将导致产生的标量乘法产生O:对等点具有h阶(循环情况)或h的某些除数(非循环情况)。 - 以标准化格式输出这些测试,易于下游使用,以便集成到特定于库的测试工具中。ECCKAT目前支持的三个后端:测试万物协议(TAP)-下游项目必须解析TAP测试本身;OpenSSL的测试框架-确定性ECDSA KATs能够顺利地集成,但经典的ECDSA不能;gost-engine的测试框架-本文提出,目前不支持GOST数字签名
应用在了几个发现缺陷的地方:ECC标量乘法失败、ECC CDH漏洞、VKO漏洞
生成ECC层:ECCKIILA
它允许动态创建有关ECC层的C代码
1、域上的计算:从fiat-crypto项目获得了GF( p)算法的大部分
2、关于两条曲线:gost-engine中的大多数传统曲线都工作在素数基数q≈p的曲线Ew上,但其中两条曲线集中在基数4q为素数q≈p的曲线上。对于这两条特殊曲线,gost-engine曲线在规范级别以Short Weierstrass形式表示(即“在线”或序列化时),但在内部我们使用Twisted Edwards曲线Et 表示。此外,我们通过将(4)和(3)写成投影形式来实现连接Ew-Et的映射,以延迟GF §中代价高昂的逆。
3、点加。。。
4、点乘。。。
5、装配:ECCKiila目前支持三个后端:OpenSSL、NSS和gost engine。对于OpenSSL,ECCKiila生成一个EC_GROUP结构,它是曲线的OpenSSL内部表示,带有用于各种操作的函数指针。我们为三个相关的函数指针设计了简单的包装器,它们是浅层的,最终(在检查参数是否正确并将输入转换为预期格式之后)调用图1中相应的标量乘法实现。NSS类似于ECGroup结构。gost-engine装配(大部分)将它与OpenSSL的EC模块分离,因为它只需要支持带有显式参数的GOST曲线。
结果
应用程序级视图,完全集成,测量了未修改的OpenSSL3.0alpha、gost-engine和NSS3.53(称为基线)以及随后使用ECCKiila输出(集成)修改的相同版本的时间。对于它们中的每一个,我们测量了第2节中描述的操作的计时,例如密钥生成、密钥协商(派生)、签名和验证。。。
gitlab上,有机会下载看看。。。
心得
稀里糊涂的,仿佛看懂了,又仿佛啥都没看懂,囧,明日再战
特此声明,该博文所写均为本人自己理解,如有争议以论文原作者为准,(鞠躬