公钥密码学(Public-key cryptography)
公开密钥密码学也称非对称式密码学,是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文。
基于公开密钥加密的特性,它还能提供数字签名的功能,使电子文件可以得到如同在纸本文件上亲笔签署的效果。
公钥密码学的两个最著名的应用是公钥加密和数字签名。
公钥加密
公钥加密指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。
常见算法
RSA、ECC、Diffie-Helmlan、ElGamal等等
数字签名
数字签名是一种功能类似写在纸上的普通签名、但是使用了公钥加密领域的技术,以用于鉴别数字信息的方法。什么是数字签名?
数字签名算法(DSA)
RSA
RSA是目前计算机密码学中最经典算法,也是目前为止使用最广泛的数字签名算法。RSA数字签名算法主要包括MD和SHA两种算法。
DSA算法
和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,所以它比RSA要快很多,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。
ECDSA
ECC与DSA的结合。相同密钥长度下,安全性能更高。计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。存储空间占用小,且带宽要求低。
EdDSA
在ECDSA上进行了优化,使用了爱德华曲线。签名过程中不需要唯一的随机数,能够避免随机数引发的安全问题。公钥和签名值都较小,计算更完备。
上文主要介绍了一些密码学的常识,后面主要介绍论文Elliptic Curve Cryptography with Efficiently Computable Endomorphisms and Its Hardware Implementations for the Internet of Things中的内容,即ECDSA和涉及到的证书验证计算优化。
ECDSA(椭圆曲线数字签名算法)
ECDSA(Elliptic Curve Digital Signature Algorithm)中文介绍&wiki
In cryptography, the Elliptic Curve Digital Signature Algorithm (ECDSA) offers a variant of the Digital Signature Algorithm (DSA) which uses elliptic curve cryptography.
ECDSA使用椭圆曲线密码学进行数字签名。
ECDSA方程
Weierstrass曲线形式:
曲线关于X轴对称
参数
点的加法与乘法
将一个点和另外一个点相加将得到点,如果我们从到 画一条线,并延长与曲线相交于第三个点,则为 的负值,别忘记曲线是关于轴对称的。在这种情况下,我们定义来表示在 轴上面的对称点。具体可以看下面这张图。
如果
同样的机制,如果你进行,其结果为经过的切线与曲线的交点关于轴的对称点,然后可以看作是点与 点相加的结果。这就可以用来对椭圆曲线点乘法进行定义:就是点自身进行次相加,以下图为例。
私钥与公钥
私钥是一个随机数,公钥是将曲线上的点与私钥相乘以后得到的曲线上的点。其中是曲线上面的参考点。
1.随机私钥
2.公钥
生成签名
1.产生随机数
2.计算
3.
4.整数
5.
签名内容
签名验证
计算上述点
安全性
需要同时知道随机数
有一个点
文章关注问题
ECDSA的一个重要问题是,验证过程非常耗时。
在ECDSA签名验证时,需要计算一个双标量乘法——
文献中涉及的一些算法内容:
GLV方法(使用自同态)
假设
对于特殊的曲线,
可以将
本文的样例曲线
本文通过CM判别式和一些性能因素,选择了曲线
计算双标量乘法的加速方法(*)
目标:计算出
两个单标量乘法
最简单直接的方法,分别计算两个标量乘法
其中
由于
表示为
为了加速计算,点
对于所有可能的比特串
第二部分
由于
Interleaving Method
Shamir’s trick:给定宽度
在
特别地,本文中的Interleaving Method是将
首先计算出
然后从低位开始一位一位搜索比特,如果
Joint Sparse Form
与上面的方法相似,不同的是,该JSF方法先将
需要提前计算
Window Method
在Shamir’s trick中提到的方法,更类似于一个划分方法,一般是与其他方法结合使用(alg3.44中的window)。本文中,Interleaving Method和Joint Sparse Form都可以看做是window宽度为1的方法。
Double Scalar Multiplication with Endomorphism
本文主要研究的方法。结合了自同态,查表,交叉计算的方法(还可以结合window的方法,但理论分析后结合window方法不如不结合的方法)
Algorithm3.74是一个用于分解
然后通过Montgomery’s trick计算点
生成15个点的查找表,该表包括
最后以交叉的形式计算
具体就是写成二进制形式,从高到低遍历每一位,然后累加器先乘2,再根据该位(可以看做是window框柱的一列)中4个元素的该位值,在表中查找相应的点,累加器加上该点。
上述方法表现比较
考虑到本文研究的场景主要是为资源受限的iot设备涉及加速方法,所以根据表现和RAM需求,方法(d)是最适合用于加速双标量乘法的方法。