非对称加密算法之EIGamal公钥密码体制
非对称加密算法之EIGamal公钥密码体制
依赖数学难题:离散对数问题
什么是离散对数问题?在掌握这个问题之前,得先知道一点数学概念
欧拉函数
在RSA中,有提到,不再详细叙述。就是求对于正整数n,有多少个小于它并且和它互质的正整数。表达式
欧拉定理
若n,a为正整数,且n、a互质,则,这也就是所谓的欧拉定理。
原根
仍然设n、a为互质的正整数,令,如果用表示使该式子成立的最小整数d,此时如果成立,则称a为模n的原根。
通俗点来讲,使成立的d有很多的值,而如果所有的d值中,的值是最小的,那么久称a是n的原根
举例说明:
假如n=7,a=3,两数互质.则分别等于3、6、2、4、5和1。很显然,只有d=6时满足这个时候就可以称a=3为模7的原根。
再举一个反例:
假如n=7,a=2,两数互质,但分别等于2、4、1、2、4、1。发现d分别为3和6时,都满足式子,但是d取最小时,不等于。所以a=2不是模7的原根。
而且原根有个性质,那就是一定能整除,所以在判断a是不是原根的时候,只需要检验a的的可约次方模n的值即可。
还有就是我们可以运用以上性质,很轻易地就完成一些看似很复杂的运算,比如求解的个位是几。
计算过程如下
而中的4为欧拉函数的值,而是一个计算个位非常重要的存在,因为需要mod10运算所以原式为
由欧拉定理得
=
离散对数
终于讲回了正题,离散对数是什么,如果对于一个整数b和质数p和质数p的原根a,可以找到一个唯一的指数i,使得成立,那么指数i也就称为b的以a为基数的模p的离散对数。
离散对数难题
而离散对数的难题则是指,当已知一个大质数p和它的一个原根a,如果给定一个b,要计算b的以a为基数的模p的离散对数i的值是很困难的。
ELGamal加密算法
介绍完其数学基础后,就该直接介绍加密算法了。
私钥与公钥的计算
以下步骤依次进行
- 随机地选择一个大素数p,要求p-1有大素数因子,p是公开的,作为公钥一部分
- 选择一个模p的原根,公开,作为公钥一部分
- 选取整数,使,这个是私钥,作为私钥保管。
- 计算,b也是公开的。
自此,我们得到了公钥集合和私钥。
这个保密效果为什么好呢,因为本运算基于离散对数困难性,b的以α为基数的模p的离散对数i的计算是很困难的,也就是由公钥得出私钥是很困难的。
加密过程
对于明文消息M,采取以下步骤进行加密
- 随机地选取一个整数
- 计算,使用公钥中的b、p
- 计算,使用公钥中的α、p
- 计算,使用明文M和前面得到的U和公钥中的p
- 得到的也就是我们的密文
解密过程
- 计算
- 计算
tip:模逆运算可采用拓展欧几里得算法,比较常规。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库