【密码学Sage代码】椭圆曲线加密/解密(基于《密码编码学与网络安全——原理与实践(第七版)》)

教材内容:

实践的Sage代码:

#【静水流深Sage代码】使用椭圆曲线密码体制进行加密/解密print("使用《密码编码学与网络安全——原理与实践(第七版)》的P228页的【椭圆曲线加密、解密】")
q = 257 # 书上选区素数 q=257
F = GF(q)
print(F)
print("素数域的阶: {0}".format(F.order()))
E = EllipticCurve(F, [0,0,0,  0, -4]) # 书上: Eq(a,b) = E257(0, -4)
print("【椭圆曲线E257(0, -4)】:{0}".format(E))#获取基点坐标
print("默认的基点坐标:{0}".format( E.gens() ))
print("G = E.gens()[0] 中的G:{0}".format( E.gens()[0] ))#获取基点的阶
print("椭圆曲线的【阶】,又叫【点群阶】,就是椭圆曲线密码体制中的【点】的个数。【注意:个数包括无穷远点o】")
q = E.order()
print("椭圆曲线的【阶】: {0}".format(q))
allPoints = E.points()
print("椭圆曲线上的所有点:{0}".format(allPoints))print("(仅仅是试验一把)我们可以这么做 ==> 从椭圆曲线上任意随机选择一个点:")
print( E.points()[randint(2, E.order()-1)] )print("") #打印空行
print("根据P228页:准备挑选【基点G(2,2)】,该基点G(2, 2)是Alice盒Bob共用的:")
G = E(2, 2)
print("挑选的【基点G】:{0}".format( G ))print("Alice要给Bob发送**密文**,需要Bob的公钥!")
print("而Bob的公钥构造方法是: 一个随机数 * 基点G")
PrivateB = 101 # 私钥就是一个随机整数
print("Bob的私钥【PrivateB】是否初始化为101:{0}".format( PrivateB == 101 ))
Public_B = PrivateB * G
print("Bob的公钥【Public_B】:{0}".format( Public_B ))
print("")# Alice要使用椭圆曲线发送密文了
print("Alice要使用椭圆曲线发送密文了...")
print("Alice将密文编码为椭圆曲线上的一个点 Pm(112, 26)")
Pm = E(112, 26)
print("明文Pm是否初始化为(112, 26)? {0}".format( Pm==E(112, 26) ))# 密文的构造方式: Cm = { k*G, Pm+k*Public_B }
print("密文的构造方式: Cm = { k*G, Pm+k*Public_B }")
k = 41 # 书上选择随机数为 41
kG = k * G #密文中的第1个点 k*G
Cm1 = kG
Cm2 = Pm + k*Public_B
print("随机数k={0}, 密文Cm的第1个点【kG】={1}, 密文Cm的第2个点【Pm+k*Public_B】={2}".format(k, Cm1, Cm2))
print("")# Bob接收后进行解密,解密的算法是 P_recovery = Cm2 - PrivateB*Cm1
print("Bob接收后进行解密,解密的算法是 P_recovery = Cm2 - PrivateB*Cm1")
P_recovery = Cm2 - PrivateB*Cm1
print("Bob解密后的明文(温馨提示,应该还是椭圆曲线上的某个点):{0}".format(P_recovery))
print("解密结果是否正确? {0}".format( P_recovery == Pm ))

Sage代码运行的结果:

使用《密码编码学与网络安全——原理与实践(第七版)》的P228页的【椭圆曲线加密、解密】
Finite Field of size 257
素数域的阶: 257
【椭圆曲线E257(0, -4)】:Elliptic Curve defined by y^2 = x^3 + 253 over Finite Field of size 257
默认的基点坐标:((169 : 49 : 1),)
G = E.gens()[0] 中的G:(169 : 49 : 1)
椭圆曲线的【阶】,又叫【点群阶】,就是椭圆曲线密码体制中的【点】的个数。【注意:个数包括无穷远点o】
椭圆曲线的【阶】: 258
椭圆曲线上的所有点:[(0 : 1 : 0), (0 : 32 : 1), (0 : 225 : 1), (2 : 2 : 1), (2 : 255 : 1), (3 : 58 : 1), (3 : 199 : 1), (4 : 46 : 1), (4 : 211 : 1), (5 : 11 : 1), (5 : 246 : 1), (9 : 89 : 1), (9 : 168 : 1), (10 : 15 : 1), (10 : 242 : 1), (11 : 82 : 1), (11 : 175 : 1), (13 : 44 : 1), (13 : 213 : 1), (15 : 95 : 1), (15 : 162 : 1), (17 : 119 : 1), (17 : 138 : 1), (19 : 78 : 1), (19 : 179 : 1), (20 : 85 : 1), (20 : 172 : 1), (23 : 37 : 1), (23 : 220 : 1), (24 : 126 : 1), (24 : 131 : 1), (29 : 22 : 1), (29 : 235 : 1), (30 : 36 : 1), (30 : 221 : 1), (31 : 80 : 1), (31 : 177 : 1), (34 : 39 : 1), (34 : 218 : 1), (36 : 69 : 1), (36 : 188 : 1), (39 : 125 : 1), (39 : 132 : 1), (42 : 117 : 1), (42 : 140 : 1), (44 : 65 : 1), (44 : 192 : 1), (45 : 20 : 1), (45 : 237 : 1), (47 : 48 : 1), (47 : 209 : 1), (49 : 14 : 1), (49 : 243 : 1), (51 : 99 : 1), (51 : 158 : 1), (52 : 5 : 1), (52 : 252 : 1), (53 : 29 : 1), (53 : 228 : 1), (54 : 113 : 1), (54 : 144 : 1), (55 : 116 : 1), (55 : 141 : 1), (56 : 9 : 1), (56 : 248 : 1), (59 : 17 : 1), (59 : 240 : 1), (60 : 87 : 1), (60 : 170 : 1), (61 : 118 : 1), (61 : 139 : 1), (63 : 53 : 1), (63 : 204 : 1), (64 : 0 : 1), (68 : 84 : 1), (68 : 173 : 1), (69 : 109 : 1), (69 : 148 : 1), (70 : 71 : 1), (70 : 186 : 1), (75 : 52 : 1), (75 : 205 : 1), (76 : 4 : 1), (76 : 253 : 1), (80 : 56 : 1), (80 : 201 : 1), (82 : 108 : 1), (82 : 149 : 1), (83 : 27 : 1), (83 : 230 : 1), (84 : 40 : 1), (84 : 217 : 1), (86 : 100 : 1), (86 : 157 : 1), (90 : 12 : 1), (90 : 245 : 1), (92 : 105 : 1), (92 : 152 : 1), (93 : 86 : 1), (93 : 171 : 1), (94 : 124 : 1), (94 : 133 : 1), (97 : 24 : 1), (97 : 233 : 1), (99 : 67 : 1), (99 : 190 : 1), (100 : 3 : 1), (100 : 254 : 1), (101 : 64 : 1), (101 : 193 : 1), (104 : 75 : 1), (104 : 182 : 1), (109 : 60 : 1), (109 : 197 : 1), (112 : 26 : 1), (112 : 231 : 1), (113 : 98 : 1), (113 : 159 : 1), (117 : 111 : 1), (117 : 146 : 1), (120 : 106 : 1), (120 : 151 : 1), (122 : 41 : 1), (122 : 216 : 1), (125 : 101 : 1), (125 : 156 : 1), (126 : 107 : 1), (126 : 150 : 1), (127 : 54 : 1), (127 : 203 : 1), (129 : 96 : 1), (129 : 161 : 1), (136 : 128 : 1), (136 : 129 : 1), (137 : 8 : 1), (137 : 249 : 1), (139 : 42 : 1), (139 : 215 : 1), (141 : 115 : 1), (141 : 142 : 1), (143 : 91 : 1), (143 : 166 : 1), (147 : 16 : 1), (147 : 241 : 1), (149 : 94 : 1), (149 : 163 : 1), (150 : 103 : 1), (150 : 154 : 1), (153 : 110 : 1), (153 : 147 : 1), (155 : 55 : 1), (155 : 202 : 1), (156 : 120 : 1), (156 : 137 : 1), (157 : 92 : 1), (157 : 165 : 1), (158 : 30 : 1), (158 : 227 : 1), (159 : 127 : 1), (159 : 130 : 1), (160 : 50 : 1), (160 : 207 : 1), (161 : 25 : 1), (161 : 232 : 1), (163 : 6 : 1), (163 : 251 : 1), (164 : 7 : 1), (164 : 250 : 1), (165 : 77 : 1), (165 : 180 : 1), (168 : 122 : 1), (168 : 135 : 1), (169 : 49 : 1), (169 : 208 : 1), (170 : 21 : 1), (170 : 236 : 1), (171 : 23 : 1), (171 : 234 : 1), (174 : 88 : 1), (174 : 169 : 1), (176 : 51 : 1), (176 : 206 : 1), (177 : 35 : 1), (177 : 222 : 1), (178 : 59 : 1), (178 : 198 : 1), (179 : 61 : 1), (179 : 196 : 1), (183 : 33 : 1), (183 : 224 : 1), (185 : 13 : 1), (185 : 244 : 1), (188 : 31 : 1), (188 : 226 : 1), (192 : 19 : 1), (192 : 238 : 1), (193 : 121 : 1), (193 : 136 : 1), (197 : 90 : 1), (197 : 167 : 1), (200 : 10 : 1), (200 : 247 : 1), (201 : 93 : 1), (201 : 164 : 1), (202 : 97 : 1), (202 : 160 : 1), (203 : 79 : 1), (203 : 178 : 1), (210 : 1 : 1), (210 : 256 : 1), (213 : 81 : 1), (213 : 176 : 1), (214 : 38 : 1), (214 : 219 : 1), (216 : 112 : 1), (216 : 145 : 1), (217 : 62 : 1), (217 : 195 : 1), (218 : 72 : 1), (218 : 185 : 1), (219 : 76 : 1), (219 : 181 : 1), (221 : 63 : 1), (221 : 194 : 1), (223 : 28 : 1), (223 : 229 : 1), (225 : 102 : 1), (225 : 155 : 1), (226 : 70 : 1), (226 : 187 : 1), (228 : 104 : 1), (228 : 153 : 1), (229 : 114 : 1), (229 : 143 : 1), (231 : 47 : 1), (231 : 210 : 1), (233 : 43 : 1), (233 : 214 : 1), (234 : 57 : 1), (234 : 200 : 1), (236 : 66 : 1), (236 : 191 : 1), (240 : 123 : 1), (240 : 134 : 1), (243 : 74 : 1), (243 : 183 : 1), (245 : 18 : 1), (245 : 239 : 1), (246 : 83 : 1), (246 : 174 : 1), (249 : 68 : 1), (249 : 189 : 1), (252 : 34 : 1), (252 : 223 : 1), (253 : 73 : 1), (253 : 184 : 1), (254 : 45 : 1), (254 : 212 : 1)]
(仅仅是试验一把)我们可以这么做 ==> 从椭圆曲线上任意随机选择一个点:
(97 : 24 : 1)

根据P228页:准备挑选【基点G(2,2)】,该基点G(2, 2)是Alice盒Bob共用的:
挑选的【基点G】:(2 : 2 : 1)
Alice要给Bob发送**密文**,需要Bob的公钥!
而Bob的公钥构造方法是: 一个随机数 * 基点G
Bob的私钥【PrivateB】是否初始化为101:True
Bob的公钥【Public_B】:(197 : 167 : 1)

Alice要使用椭圆曲线发送密文了...
Alice将密文编码为椭圆曲线上的一个点 Pm(112, 26)
明文Pm是否初始化为(112, 26)? True
密文的构造方式: Cm = { k*G, Pm+k*Public_B }
随机数k=41, 密文Cm的第1个点【kG】=(136 : 128 : 1), 密文Cm的第2个点【Pm+k*Public_B】=(246 : 174 : 1)

Bob接收后进行解密,解密的算法是 P_recovery = Cm2 - PrivateB*Cm1
Bob解密后的明文(温馨提示,应该还是椭圆曲线上的某个点):(112 : 26 : 1)
解密结果是否正确? True

【密码学Sage代码】椭圆曲线加密/解密(基于《密码编码学与网络安全——原理与实践(第七版)》)相关推荐

  1. 密码编码学与网络安全——原理与实践(第八版)——第一章:信息与网络安全概念

    密码编码学与网络安全--原理与实践(第八版) 第一章:信息与网络安全概念 1.1网络空间安全.信息安全和网络安全 1.2OSI安全架构 1.3安全攻击 1.4安全服务 1.5安全机制 1.6密码学 1 ...

  2. 密码编码学与网络安全----原理与实践(第八版)---第9章笔记

    第九章 公钥密码学与RSA 学习目标: 概述公钥密码体制的基本原理. 阐述公钥密码体制的两个不同应用. 列举和解释公钥密码体制的要求. 概述RSA算法. 理解计时攻击. 总结算法复杂性的相关问题. 公 ...

  3. 密码编码学与网络安全———原理与实践(第八版)第三章笔记

    第3章 传统加密技术 学习目标 简要介绍对称密码的主要概念. 解释密码分析和穷举攻击的差异. 理解单表代替密码的操作. 理解多表代替密码的操作. 简要介绍Hill密码. 目录 第3章 传统加密技术 3 ...

  4. 密码编码学与网络安全(2):对称密码之传统加密技术

    对称密码之传统加密技术 关于对称加密 对称密码模型 密码编码学 密码分析学与穷举攻击 古典加密算法 代替技术 置换技术 转轮机 隐写术 关于对称加密 对称加密,也称为传统加密或单密钥加密,是20世纪7 ...

  5. 《密码编码学与网络安全》William Stalling著---学习笔记(二)【知识点速过】【数字签名+密钥管理分发+用户认证】

    提示:博文有点长,请保持耐心哦~ 前一篇文章: <密码编码学与网络安全>William Stalling著-学习笔记(一)[知识点速过][传统密码+经典对称加密算法+经典公钥密码算法+密码 ...

  6. 《密码编码学与网络安全》William Stalling著---学习笔记(三)【知识点速过】【网络安全与Internet安全概览】

    提示:博文有点长,请保持耐心哦~ 前两篇文章: <密码编码学与网络安全>William Stalling著-学习笔记(一)[知识点速过][传统密码+经典对称加密算法+经典公钥密码算法+密码 ...

  7. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part3

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part3,辑录该书第135至第184页之代码,供有需要读者下载研究使用.代码执行结果请参见原书配图. --------- ...

  8. PHP代码的加密解密

    PHP语言作为脚本语言的一种,由于不需要进行编译,所以通常PHP程序的分发都是直接发布源代码.对于一些开源软件来说,这并没有什么问题,因为它本来就希望有更多的人阅读代码,希望有更多的人参与进来,而对于 ...

  9. base64解密后乱码_php实现php代码的加密解密

    php 代码加密类,大家可以根据自己的需求进行修改,原类如下,是对之前的加密解密类的有一次修改,希望能分享给大家.本次在ubuntu下测试没有问题,与之前的版本的区别在于,这次的版本更加的通用性. [ ...

最新文章

  1. Golang Study 一 定时器使用
  2. BFS(入门题--迷宫)
  3. Exception在方法继承中的限制
  4. 【面向对象】面向对象程序设计测试题7-对象之间的has-a/many关系测试题
  5. Linux下的Asp.Net配置指南
  6. xp计算机考试资源管理,职称计算机WindowsXP必备考点:资源管理器
  7. 一种去水印的营业执照识别方法
  8. java ts文件 播放_前端如何播放m3u8格式的视频
  9. word设置标题自动编号
  10. vht160什么意思_802.11n 中HT20 HT40是什么意思
  11. Cisco WLC和瘦ap的配置
  12. CLSR 11.2散列表
  13. 神经机器翻译(Neural machine translation, NMT)学习笔记
  14. Java 通过EWS JAVA API发送exchange邮件
  15. 【毕业设计】大数据大众点评评论文本分析 - python 数据挖掘
  16. 飞腾CPU BIOS固件生成教程
  17. 【蓝桥杯每日一练:小Z的序列游戏-version1】
  18. 个人练习小览---《微金所仿站》
  19. 爬取网站时返回的html是乱码问题解决
  20. 微信小程序系列(6)如何用微信小程序写一个论坛?贴心代码详解(四)搜索页

热门文章

  1. AWG、SWG、BWG线径规格对照表
  2. 【LaTeX应用】LaTeX绘图
  3. sotre react
  4. python 熊猫,Python:熊猫系列
  5. 沣东新城镐京遗址规划_潜力无限?沣东新城凭什么就成了热门?!
  6. 【Go语言实战】(2) Gin+Vue 电子商城
  7. Matlab R2021a 安装使用教程
  8. sqlpython—正则表达式
  9. Windows 10 各版本区别
  10. 集成电路工艺专题复习(续)