区块链大学密码学区块链研习社

椭圆曲线加解密和签名验签的基本原理

2018-11-27  本文已影响4人  Bitoken

椭圆曲线加密算法原理

设某人的私钥、公钥分别为K_{priv} K_{pub} 。公钥为G点跟私钥倍乘所得,即K_{pub}  = K_{priv} \cdot G,其中G点为椭圆曲线的基点。

公钥加密:

      选择一个随机数r,将消息M生成密文C,该密文是一个点对,即:

      C = \{r\cdot G,  M+r\cdot K_{pub}\}

私钥解密:

            计算如下:

            \begin{equation*}
\begin{split}
&M + r\cdot K_{pub} - K_{priv}\cdot (r\cdot G)  \\
= &M + r\cdot (K_{priv}\cdot G) - K_{priv}\cdot (r\cdot G)  \\
= &M
\end{split}
\end{equation*}

椭圆曲线签名算法原理

椭圆曲线签名算法,即ECDSA

私钥签名:

选择一个随机数r,倍乘椭圆曲线基点G,得到一个点G',即:

        G^{\prime}(x^{\prime}, y^{\prime}) = r \cdot G(x, y)

对消息M的哈希h进行计算得到s,即:

        s = (h + x^{\prime} \cdot K_{priv})) / r

消息签名结果:

        {G^{\prime}(x^{\prime}, y^{\prime}),  s}

公钥验签:

需要得到签名者的公钥K_{pub},签名的结果{G'(x', y'), s},消息原文M(计算可得其哈希h),进行如下计算:

        \begin {equation*}
\begin {split}
&h \cdot G/s + x^{\prime}\cdot K_{pub}/s \\
= &h \cdot G/s + x^{\prime} \cdot (K_{priv} \cdot G)/s \\
= &(h+x^{\prime} \cdot K_{priv}) \cdot G/s \\
= &r \cdot (h + x^{\prime} \cdot K_{priv}) \cdot G / (h + x^{\prime} \cdot K_{priv}) \\ 
= &r \cdot G \\
= &G^{\prime}
\end {split}
\end {equation*}

h \cdot G/s + x^{\prime}\cdot K_{pub}/s = G^{\prime}成立,即验签成功,否则验签失败,说明签名或原文已经篡改伪造。

上一篇 下一篇

猜你喜欢

热点阅读