山东大学网络空间安全学院(研究院)2023年网络空间安全创新创业实践课程相关project完成情况及相应代码。
本课程选择进行个人组队,所有项目由个人完成,队伍序号为group6 num1。
| 小组成员姓名 | 学号 | Github账户名称 |
|---|---|---|
| 高培民 | Peimin Gao |
本课程共有21个项目,而本仓库完成了所有的项目内容。
| 项目序号 | 项目名称 | 对应项目文件夹 | 项目完成情况 | 项目实现方式及效果 |
|---|---|---|---|---|
| Project1 | implement the naïve birthday attack of reduced SM3 | birthday attack of SM3 | ✔️ | 利用C++与Openssl库来进行攻击,可在秒级实现对前24bit的攻击。 |
| Project2 | implement the Rho method of reduced SM3 | rho attack of SM3 | ✔️ | 利用C++与Openssl库来进行攻击,可在微秒级实现对前24bit的攻击。 |
| Project3 | implement length extension attack for SM3, SHA256, etc. | length extension attack | ✔️ | 利用C++与Project4中所实现的SM3算法,针对SM3算法开展了长度扩展攻击 |
| Project4 | do your best to optimize SM3 implementation (software) | optimized SM3 | ✔️ | 通过C++语言,分别抽取了Openssl库中对于SM3的实现与自己手动实现的SM3算法,并采用了SIMD指令、循环展开与宏定义函数的方式来进行优化,最后可实现约10%~15%的加速。 |
| Project5 | Impl Merkle Tree following RFC6962 | Merkle Tree | ✔️ | 利用C++语言来实现,采用的哈希函数实例为SHA256算法。 |
| Project6 | impl this protocol with actual network communication | Hash Wires for Range Proof | ✔️ | 仿照课程PPT流程,为了使得Alice向Bob证明她的年龄大于21岁,依赖于可信第三方,利用C++语言与实例化的SM3算法来进行零知识的范围证明(by hash wires)。 |
| Project7 | Try to Implement this scheme | Generalizing Hash Chains | ✔️ | 通过C++语言并借助于Openssl库,完成一般化的hash wires,并完成相应的范围证明测试。 |
| Project8 | AES impl with ARM instruction | AES impl with ARM | ✔️ | 借助于云服务器,通过C++语言,采用ARM处理器所提供的AESNI指令来完成AES的加解密函数,并验证了其正确性,加解密时间可以做到纳秒级。 |
| Project9 | AES / SM4 software implementation | AES/SM4 impl | ✔️ | 通过C++语言,首先利用x86处理器的AESNI指令完成了对于AES的软件实现,之后通过AES与SM4算法数域结构的同构特性,也利用AESNI指令完成了对于SM4算法的实现,对于所实现的AES与SM4分别验证了其正确性,并且加解密时间均可做到纳秒级。 |
| Project10 | report on the application of this deduce technique in Ethereum with ECDSA | the deduce technique of ECDSA | ✔️ | 主要介绍了从ECDSA签名中推导出公钥的方法,并介绍了此种方法对于区块链网络的优势所在。 |
| Project11 | impl sm2 with RFC6979 | impl sm2 with RFC6979 | ✔️ | 通过Python语言,以SM2签名算法版本为例,并根据RFC6979标准修改了随机数选取的方法。 |
| Project12 | verify the above pitfalls with proof-of-concept code | verify the pitfalls | ✔️ | 主要根据课程PPT中所介绍了4种安全性漏洞,通过C++语言,借助于Openssl库所提供的椭圆曲线运算函数,对这4种安全性漏洞依次进行了验证。 |
| Project13 | Implement the above ECMH scheme | ECMH | ✔️ | 通过Python语言,基于secpk256k1曲线,将哈希值映射到了椭圆曲线上的一个点。 |
| Project14 | Implement a PGP scheme with SM2 | PGP scheme with SM2 | ✔️ | 通过Python语言,将公钥加密算法(SM2)与分组密码(AES)相结合,实现了课程PPT所述的PGP方案。 |
| Project15 | implement sm2 2P sign with real network communication | sm2 2P sign | ✔️ | 通过Python语言,并通过socket库来模拟网络通信,在SM2曲线上实现了两方共同参与的SM2签名流程。 |
| Project16 | implement sm2 2P decrypt with real network communication | sm2 2P decrypt | ✔️ | 通过Python语言,并通过socket库来模拟网络通信,在SM2曲线上实现了两方共同参与的SM2加解密流程。 |
| Project17 | 比较Firefox和谷歌的记住密码插件的实现区别 | compare FireFox with Google | ✔️ | 根据课程PPT及网络文档资料,比较了Google与Firefox对于记住密码插件的区别并分别阐述了其各自的优劣所在。 |
| Project18 | send a tx on Bitcoin testnet, and parse the tx data down to every bit, better write script yourself | send a tx on Bitcoin testnet | ✔️ | 在实际的比特币测试网络上成功创建了一笔交易,并获取了其交易脚本的内容。 |
| Project19 | forge a signature to pretend that you are Satoshi | forge a signature | ✔️ | 按照课程PPT所述流程,通过C++语言,借助于Openssl库来完成椭圆曲线上的运算,完成了对于ECDSA签名的伪造并成功对其进行验证。 |
| Project21 | Schnorr Batch | Schnorr Batch | ✔️ | 按照PPT所述流程,通过Python语言,在secpk256k1曲线上完成了对于Schnorr签名的批量验证。 |
| Project22 | research report on MPT | research report on MPT | ✔️ | 首先分别介绍了默克尔树与前缀树,之后介绍了二者的结合——即MPT树,包含其节点类型,编码方式,增删查改操作及其特点的内容介绍。 |
其中:
- ✔️:项目已完成
- ❌:项目未完成
所有项目的详细报告内容,可进入对应的项目文件夹详细查看README.md文件。与此同时,本仓库还添加了本学期所作的其它的一个额外项目的子模块:用于公钥密码学的CUDA平台大整数加减乘运算实现,主要基于多标量乘法来实现对于256bit, 512bit, 1024bit或其它长度数据的快速运算,虽然与本课程内容并无直接关系,但可能会对于CUDA平台的密码学项目开发比较有用,因而也引入到本仓库当中。