28,724
次編輯
變更
创建页面,内容为“{| class="wikitable" style="float:right; margin: -10px 0px 10px 20px; text-align:left" |<center>'''ElGamal加密算法'''<br><img src="https://www.newton.com.tw/img/…”
{| class="wikitable" style="float:right; margin: -10px 0px 10px 20px; text-align:left"
|<center>'''ElGamal加密算法'''<br><img src="https://www.newton.com.tw/img/9/9b8/cGcq5SYxcTO3UGN1MWZidTZwIjYhZ2N0gTMyMTOlFDMwEDZ4kDZjdzYjJTYv0WZ0l2LjlGcvU2apFmYv02bj5SdklWYi5yYyN3Ztl2LvoDc0RHa.jpg" width="280"></center><small>[https://www.newton.com.tw/wiki/ElGamal 圖片來自newton]</small>
|}
在[[密码学]]中,'''ElGamal加密算法'''是一个基于[[迪菲-赫尔曼密钥交换]]的[[非对称加密]]<ref>[https://www.zhihu.com/question/33645891 非对称加密],zhihu</ref> 算法。它在1985年由[[塔希尔·盖莫尔]]提出。[[GnuPG]]和[[PGP]]等很多密码学系统中都应用到了ElGamal算法。
ElGamal加密算法可以定义在任何[[循环群]]<math>G</math>上。它的安全性取决于<math>G</math>上的[[离散对数]]难题。
=== 实际使用 ===
ElGamal加密系统通常应用在混合加密系统|hybrid cryptosystem中。例如:用对称加密体制来加密消息,然后利用ElGamal加密算法传递密钥。这是因为在同等安全等级下,ElGamal加密算法作为一种非对称密码学系统,通常比对称加密体制要慢。对称加密算法的密钥和要传递的消息相比通常要短得多,所以相比之下使用ElGamal加密密钥然后用对称加密来加密任意长度的消息,这样要更快一些。
== 算法 ==
ElGamal加密算法由三部分组成:密钥生成、加密和解密。
=== 密钥生成 ===
密钥生成的步骤如下:
* Alice利用[[群的生成集合|生成元]]g产生一个q\,阶循环群G\,的有效描述。该循环群需要满足一定的安全性质。
* Alice从\{1, \ldots, q-1\}中随机选择一个x。
* Alice计算h := g^x。
* Alice公开h\,以及G, q, g\,的描述作为其'''公钥''',并保留x作为其'''私钥'''。私钥必须保密。
=== 加密 ===
使用Alice的公钥(G,q,g,h)向她加密一条消息m的加密算法工作方式如下:
* Bob从\{1, \ldots, q-1\}随机选择一个y,然后计算c_1:=g^y。
* Bob计算共享秘密s:=h^y。
* Bob把他要发送的秘密消息m映射为G上的一个元素m'。
* Bob计算c_2:=m'\cdot s。
* Bob将密文(c_1,c_2)=(g^y, m'\cdot h^y)=(g^y, m'\cdot(g^x)^y)发送给Alice。
值得注意的是,如果一个人知道了m',那么它很容易就能知道h^y的值。因此对每一条信息都产生一个新的y可以提高安全性。所以y也被称作临时密钥|ephemeral key。
=== 解密 ===
利用私钥x对密文(c_1,c_2)进行解密的算法工作方式如下:
* Alice计算共享秘密s:=c_1{}^x
* 然后计算m':=c_2 \cdot s^{-1},并将其映射回明文m,其中s^{-1}是s在群G上的逆元。(例如:如果G是[[整数模n乘法群]]的一个子群,那么逆元就是[[模逆元]])。
: 解密算法是能够正确解密出明文的,因为
:: c_2 \cdot s^{-1} = m'\cdot h^y \cdot (g^{xy})^{-1} = m'\cdot g^{xy} \cdot g^{-xy} = m'.
== 參考文獻 ==
{{reflist}}
[[Category: 310 數學總論]]
|<center>'''ElGamal加密算法'''<br><img src="https://www.newton.com.tw/img/9/9b8/cGcq5SYxcTO3UGN1MWZidTZwIjYhZ2N0gTMyMTOlFDMwEDZ4kDZjdzYjJTYv0WZ0l2LjlGcvU2apFmYv02bj5SdklWYi5yYyN3Ztl2LvoDc0RHa.jpg" width="280"></center><small>[https://www.newton.com.tw/wiki/ElGamal 圖片來自newton]</small>
|}
在[[密码学]]中,'''ElGamal加密算法'''是一个基于[[迪菲-赫尔曼密钥交换]]的[[非对称加密]]<ref>[https://www.zhihu.com/question/33645891 非对称加密],zhihu</ref> 算法。它在1985年由[[塔希尔·盖莫尔]]提出。[[GnuPG]]和[[PGP]]等很多密码学系统中都应用到了ElGamal算法。
ElGamal加密算法可以定义在任何[[循环群]]<math>G</math>上。它的安全性取决于<math>G</math>上的[[离散对数]]难题。
=== 实际使用 ===
ElGamal加密系统通常应用在混合加密系统|hybrid cryptosystem中。例如:用对称加密体制来加密消息,然后利用ElGamal加密算法传递密钥。这是因为在同等安全等级下,ElGamal加密算法作为一种非对称密码学系统,通常比对称加密体制要慢。对称加密算法的密钥和要传递的消息相比通常要短得多,所以相比之下使用ElGamal加密密钥然后用对称加密来加密任意长度的消息,这样要更快一些。
== 算法 ==
ElGamal加密算法由三部分组成:密钥生成、加密和解密。
=== 密钥生成 ===
密钥生成的步骤如下:
* Alice利用[[群的生成集合|生成元]]g产生一个q\,阶循环群G\,的有效描述。该循环群需要满足一定的安全性质。
* Alice从\{1, \ldots, q-1\}中随机选择一个x。
* Alice计算h := g^x。
* Alice公开h\,以及G, q, g\,的描述作为其'''公钥''',并保留x作为其'''私钥'''。私钥必须保密。
=== 加密 ===
使用Alice的公钥(G,q,g,h)向她加密一条消息m的加密算法工作方式如下:
* Bob从\{1, \ldots, q-1\}随机选择一个y,然后计算c_1:=g^y。
* Bob计算共享秘密s:=h^y。
* Bob把他要发送的秘密消息m映射为G上的一个元素m'。
* Bob计算c_2:=m'\cdot s。
* Bob将密文(c_1,c_2)=(g^y, m'\cdot h^y)=(g^y, m'\cdot(g^x)^y)发送给Alice。
值得注意的是,如果一个人知道了m',那么它很容易就能知道h^y的值。因此对每一条信息都产生一个新的y可以提高安全性。所以y也被称作临时密钥|ephemeral key。
=== 解密 ===
利用私钥x对密文(c_1,c_2)进行解密的算法工作方式如下:
* Alice计算共享秘密s:=c_1{}^x
* 然后计算m':=c_2 \cdot s^{-1},并将其映射回明文m,其中s^{-1}是s在群G上的逆元。(例如:如果G是[[整数模n乘法群]]的一个子群,那么逆元就是[[模逆元]])。
: 解密算法是能够正确解密出明文的,因为
:: c_2 \cdot s^{-1} = m'\cdot h^y \cdot (g^{xy})^{-1} = m'\cdot g^{xy} \cdot g^{-xy} = m'.
== 參考文獻 ==
{{reflist}}
[[Category: 310 數學總論]]