python
elgamal算法例题?
一、elgamal算法例题?
ElGamal算法是一种常见加密算法, 与Diffie-Hellman算法有密切关联。
该算法安全性依赖于计算有限域上离散对数难题:求解离散对数(目前)是困难的,其逆运算指数运算简单。
算法思路:
假设有2个用户Alice 和 Bob,Bob欲使用ElGamal加密算法向Alice发送信息。对于Alice,首先要选择一个素数q, α是素数q的本原根。 [本原根的概念对应模q乘法群(需循环群)中的生成元。
Alice产生一个
,
∈(1, q - 1)
计算
=
mod q
A的私钥为
, 公钥为 {q, α,
}
公钥存在于某个可信公开中心目录,任何用户都可访问对于Bob, 首先去上述中心目录访问得Alice的公钥 {q, α,
}
然后将自己欲发送的明文M, (M ∈ [1, q - 1])洗干净备好。
选一个随机整数k, k ∈ [1, q - 1]
计算可解密自己密文的秘钥 PrivateK =
mod q
C1 =
mod q , C2 = PrivateK * M mod q
明文对发送给Alice
Alice收到明文对:
PrivateK =
mod
M = C2 *
mod q
到这里..发现算法大多就是一些乘法,求幂之类的运算。剩下个关键内容就是如何寻找素数p的本原根,或者说如何找有限域GF(p)中的生成元。
我们在群这个概念里讨论。
p是素数,令Zp = {1, 2, 3, ..., p - 1},因为考虑乘法,去掉了0元素。
2个定理:
Euler定理:设P和a是互素的两个整数,则有aφ(p)=1 mod p
拉格朗日定理: 设 G 是有限群, H 是 G 的子群,|H| 整除 |G|
回顾这样2个概念:设G是群, a∈G, 使得等式ak = e成立的最小整数k称为元素a的阶。而群的阶是指该群中的元素个数。值得留意的是,以某个生成元去生成某个子群,该子群的阶就是该元素的阶(当然了)。
因Zp中所有元素与p互素,由欧拉定理,Zp中所有元素的阶不超过p-1,(因为群的阶φ(p)是p-1,而至少有aφ(p)=1 mod p)。
对于Zp中的任一元素,以该元素为生成元形成的一个循环群,设为S(群S的阶在数值上即该元素的阶),根据群的封闭性可知S必然为Zp的子群,根据拉格朗日定理,可知Zp的元素的阶必然是|Zp| (即p-1)的因子。
于是可以得到这样一个结论:若有这样一个元素a,其阶为Ka, Ka是p-1的平凡因子(即因子1 或者因子p-1), 那么a或者是单位元,或者是生成元。 又知Zp的单位元是1,那么根据单位元的唯一性,可知若a非1,则a必为生成元。问题在于,p-1的因子可能很多,我们还不是得一个个去找到阶是p-1的平凡因子的元素?
为此,我们构造一种特殊的素数,使得p-1的因子数量很少。取p - 1 = 2 * Q ,其中p是素数,Q也是素数。 因为Q是素数,因子仅1, Q。所以p - 1的因子只有 {1, 2, Q, p - 1}四个。
到此已经非常明朗,我们找到满足上述条件的素数p,然后在Zp中寻找这样一个元素a,a的阶非2,非Q,即a^2 mod p != 1 && a^Q mod p != 1,若a又非单位元1,那么a必然是生成元
留意Zp未必一定有生成元, 若1 到 (p - 1)经上述检验都不满足, 考虑另取一个素数p。至于代码实现上出现的问题:若mpz_probab_prime_p(tmp.mt, 6) == 1 改为 mpz_probab_prime_p(tmp.mt, 6) == 2,p一旦较大,程序运行速度很慢。取2为真素数检验,速度很慢,1为概率素数检验,速度快
二、elgamal体制的应用?
ElGamal是一种常见的加密算法,是在公钥密码体制和椭圆曲线加密体制的基础上发展来的,既能用于数据加密也能用于数字签名,此算法难破解是基于有限域上计算离散对数的难题,生成的密文长度是明文的两倍。
三、elgamal是哪个国家?
elgamal是美国的。
ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。
首先它是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。它可以定义在任何循环群G上。它的安全性取决于G上的离散对数难题。
四、elgamal公钥密码算法?
在密码学中,ElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法,它在1985年由塔希尔·盖莫尔提出。
EIGamal公开密钥密码体制是基于有限域中离散对数间题的难解性。它所根据的原理是:求解离散对数是困难的,而其逆运算可以应用平方乘的方法有效的计算出来。在相应的群 G中,指数函数是单向函数。
EIGam以公钥密码是一种国际公认的较理想公钥密码体制,是网络上进行保密通信和数字签名的较有效的安全算法。EIGam以公钥密码体制在网络安全加密技术中应用受到密码学界的广泛关注。
ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。在加密过程中,生成的密文长度是明文的两倍,且每次加密后都会在密文中生成一个随机数K,在密码中主要应用离散对数问题的几个性质:求解离散对数(可能)是困难的,而其逆运算指数运算可以应用平方-乘的方法有效地计算。也就是说,在适当的群G中,指数函数是单向函数。
五、elgamal数字签名原理?
Elgamal数字签名主要也是利用离散对数的特性来实现签名,具体方式如下:
1. 选择一个大素数P、一个本原元G、一个随机整数d,d属于[2,p-2];
2. 生成β,β=G^d mod P;
3. 此时P、G、β就是公钥,记作Kpub;
4. Elgamal数字签名记作sig(x,k)=(r,s); x是明文的摘要,k是临时私钥的随机值,记作Kpr,r,s是构成签名的两个整数;
5. 签名生成: r=G^k mod P; s=(x-dr)k^-1 mod (p-1);
6. 生成签名后,签名随明文一起发送给接收方;
7. 接收者收到消息后计算 t=β^r · r^s mod P
8. 验证:当t≡G^x modP 则该签名有效,数据未被篡改,反之则签名无效;
六、python?
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
它还有一个很惊人的中文名,叫蟒蛇。
七、python和python的区别?
python和python这2个是一样的,并没有区别。
很显然,两个一样的物品或者内容并不存在不同,提问的第一个元素与第二个元素是一模一样,本质上讲就是一个东西、一件事情。
建议把前后两个要做对比的元素描述清楚,比如python2.X和Python3.X有什么区别,才能正确结论。
八、python为什么叫python?
自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。
Python的创始人为荷兰人吉多·范罗苏姆 [4] (Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python's Flying Circus)。
九、Python Python语句list(range(1?
python2.x中,range返回的是一个列表
python3.x中,range返回的是一个迭代值
类似forninrange(1,10):之类的可以照常使用
如果要在3.x中产生1-10的列表,可以list(range(1,10))~~
十、python pyw需要python环境吗?
需要。只有完成打包好的exe文件才能脱离python环境,独立运行。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...