椭圆曲线公钥密码
实验目的: 利用教材10.4节所给出的方法,编程实现椭圆曲线的加/解密。
该密码体制的参数是E11=(1,6)和G=(2,7),B的私钥nB=7。
(a)找出B的公钥PB。
(b)A要加密消息Pm=(10,9),其选择的随机值k=3,试确定密文Cm。
试给出B由Cm恢复Pm的计算过程。
这咋整啊?我都没教材,它的计算规则是啥都不知道。
椭圆曲线公钥密码加密与解密
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 之乎者也· 2023-12-19 21:42关注
在这个实验中,我们将使用椭圆曲线密码学进行加密和解密。首先,我们需要理解椭圆曲线密码学的基础知识,然后我们可以用这些知识来编程实现加密和解密过程。
参数
我们的参数是E11=(1,6),G=(2,7),B的私钥nB=7。
步骤
找出B的公钥PB
B的公钥PB可以通过下面的公式计算:PB = nB * G mod E11
这里,G是基点,nB是B的私钥,E11是椭圆曲线。计算结果就是B的公钥。
A要加密消息Pm=(10,9)
A要加密的消息Pm=(10,9),选择的随机值k=3。我们可以使用下面的公式来计算密文Cm:Cm = k * PB mod E11
这里,PB是B的公钥,k是A选择的随机值,E11是椭圆曲线。计算结果就是密文Cm。
B由Cm恢复Pm的计算过程
B可以从密文Cm恢复消息Pm,使用下面的公式:Pm = Cm * nB^-1 mod E11
这里,nB是B的私钥,Cm是密文,E11是椭圆曲线。计算结果就是恢复的消息Pm。
代码实现
下面是一个Python代码示例,实现了上述步骤:
```python # 导入需要的库 from sympy import symbols, Eq, solve, mod_inverse # 定义椭圆曲线参数 a, b, p = symbols('a b p') E11 = a*p**2 + b*p + 6 # 根据题目给出的椭圆曲线方程进行替换 G = 2, 7 # 根据题目给出的基点进行替换 nB = 7 # 根据题目给出的B的私钥进行替换 PB = nB * G[0], nB * G[1] # 计算B的公钥 Cm = 3 * PB[0], 3 * PB[1] # 假设A选择的随机值k=3,计算密文Cm Pm = Cm[0] * mod_inverse(nB, p) % E11[0], Cm[1] * mod_inverse(nB, p) % E11[1] # B从密文Cm恢复消息Pm的计算过程 print(f"B的公钥PB为:{PB}") print(f"A加密的消息密文Cm为:{Cm}") print(f"B从密文Cm恢复的消息Pm为:{Pm}")
```
注意:这个代码示例假设了椭圆曲线方程和基点,你需要根据题目给出的具体参数进行替换。此外,这个代码示例没有包括错误处理和异常处理,你可能需要在实际使用中添加这些功能解决 无用评论 打赏 举报
悬赏问题
- ¥30 模拟电路 logisim
- ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价