charm实现非对称加密中的循环群
非对称加密
非对称加密(也叫公钥加密)系统的密钥始终以(公钥 , 私钥)对的形式出现。公钥密码系统提供数学框架和算法来生成公钥+私钥对, 公钥通常与所有人共享,而私钥则保密。对于一般加解密而言,通常明文使用公钥加密后,只有私钥拥有者才能解密获得明文消息。公钥密码系统在设计时就确保了几乎不可能从其公开的公钥逆向演算出对应的私钥。
比较著名的非对称加密算法包括:RSA、ECC(椭圆曲线密码学)、ElGamal、Diffie-Hellman、ECDH、ECDSA 和 EdDSA等。主要用于加密和解密,签名与验证,密钥交换。目前流行的公钥密码系统基本都依赖于 IFP(整数分解问题)、DLP(离散对数问题)或者 ECDLP(椭圆曲线离散对数问题)
文章主要介绍DLP问题,以及如何在charm中实现循环群的运算
DLP问题
离散对数问题指的是,,在已知x与a的情况下求b是好求的;若是已知x与b,求a是困难的。如果给定整数x、a、b,则求
就是离散对数问题。离散对数问题是定义在一个群上的,这里取
,这里p是素数,关于乘法构成循环群(具体证明不多介绍)
证明与计算(2): 离散对数问题(Discrete logarithm Problem, DLP) - ffl - 博客园
这篇博客对于循环群怎么计算,有比较清楚的解释。
charm下实现循环群定义
我们一般将循环群同构于
域,循环群G,至少有一个生成元<g>,循环群中的每个元素都可以用
表示。
import numpy as np
from charm.toolbox.integergroup import IntegerGroup
import charm
from charm.core.math.integer import getMod
import math
import random
IntegerGroupElement = charm.core.math.integer.integerdef generate_group(sec_param):"""Generates a Schnorr mod p where p is a prime ofbit-size equal to sec_param生成一个随机的循环群,其中sec_param是安全参数Args:sec_param (int): security parameter, bit-size of pReturns:Tuple(): _description_"""group = IntegerGroup()group.paramgen(sec_param)return groupdef get_random_generator(group):'''生成随机的循环群的生成元'''return group.randomGen()def get_modulus(element: IntegerGroupElement) -> int:"""From a mod N returns N从一个循环群生成元取出模的数Args:element (IntegerGroupElement): Group element of form a mod NReturns:int: Modulus of modular expression, a mod N -> N"""mod = int(getMod(element))return mod
运行上面定义的函数生成循环群,并返回生成元g与模p
sec_param = 127
group = generate_group(sec_param)
g = get_random_generator(group)
p = get_modulus(g)
print("p={}, g={}".format(p, g))
将任意整数映射到循环群中
def encode_vector_to_group_elements(vector, group: IntegerGroup):encoded_vector = []for i in range(len(vector)):encoded_vector.append(encode_as_group_element(vector[i], group))return encoded_vectordef encode_as_group_element(x: int, group: IntegerGroup):return group.encode(int_to_bytes(x))def int_to_bytes(x: int) -> bytes:return x.to_bytes((x.bit_length() + 7) // 8, byteorder='big')x = random.randint(1, 256)
a = encode_as_group_element(x, group)
a_decode = decode_from_group_element(a, group)
print("x={}, x_encode={}, x_decode={}".format(x, a, a_decode))
测试定义的编码解码函数可不可以把任意整数映射到循环群中
def enoder_decoder_vector(sec_param):group = generate_group(sec_param)g = get_random_generator(group)p = get_modulus(g)print(g, '\n', p)A = np.random.randint(1, 256, size=(2, 2))# print(A, '\n', A.dtype)A_int = []for i in range(2):for j in range(2):A_int.append(A[i][j].item())# print(A_int, '\n', type(A_int[0]))print(A_int)A_encode = encode_vector_to_group_elements(A_int, group)# print(len(A_encode))print(A_encode, type(A_encode))A_decode = decode_vector_from_group_elements(A_encode, group)print(A_decode)# decode_A = decode_vector_from_group_elements(A_encode, group)# print(decode_A)return Trueev = enoder_decoder_vector(127)
结果显示成功了
charm实现非对称加密中的循环群相关推荐
- 非对称加密和证书总结
转载请注明文章来源:https://tlanyan.me/asymmetric... 前几日做支付对接时,被对方文档中的加密方式搞晕乎了一会.意识到证书加密方面的理解不够深入,事后查阅参考资料补习一波 ...
- [转载] 对称加密与非对称加密
标签 PostgreSQL , 对称加密 , 非对称加密 , Symmetric , ASymmetric , public , private , pgcrypto , 区块链 背景 转载: htt ...
- 密码篇——非对称加密
目录 非对称密码介绍 公钥通信流程: 公钥密码无法解决的问题: 公钥密码算法: 针对RSA的攻击 其他公钥密码: 总结: 非对称密码介绍 在对称加密中,加密与解密使用的密钥是相同的,因此必须向接收者配 ...
- 对称加密与非对称加密的区别_https原理及对称加密、非对称加密、数字证书、数字签名的含义...
一.为什么要使用https 使用https的原因其实很简单,就是因为http的不安全. 当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信.那么安全性将得不到保障 ...
- mysql对称连接什么意思_对称加密与非对称加密的区别是什么
区别:1.对称加密中加密和解密使用的秘钥是同一个:非对称加密中采用两个密钥,一般使用公钥进行加密,私钥进行解密.2.对称加密解密的速度比较快,非对称加密和解密花费的时间长.速度相对较慢.3.对称加密的 ...
- Java非对称加密KeyPairGenerator类
Java加密的常用的加密算法类型有三种 1单向加密: 也就是不可逆的加密,例如MD5,SHA,HMAC 2对称加密: 也就是加密方和解密方利用同一个秘钥对数据进行加密和解密,例如DES,PBE等等 3 ...
- 网络协议从入门到底层原理(7)网络安全 - 常见攻击、单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书
网络安全 网络层 - ARP欺骗 DoS.DDoS 介绍与防御 传输层 - SYN洪水攻击(SYN flooding attack) 传输层 - LAND攻击 应用层 - DNS劫持.HTTP劫持 H ...
- 理解区块链的“非对称加密”
区块链和密码学的关系,就像是鱼和水,可以说没有密码学,就没有区块链.比特币最早诞生的来源,正是中本聪当时所在的'"密码学邮件组".在所有的加密技术中,非对称加密又是加密术之中的皇冠 ...
- API接口加密—非对称加密解密之分段加解密
引言: 对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密. 优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开.计算量小.加密速度 ...
最新文章
- python staticmethod and classmethod方法
- 算法:程序设计之并查集
- 优秀HTML5网站学习范例:从“饥饿游戏浏览器”谈用户体验
- 再次“重新定义” 华为争做数据基础设施领航者
- 2017计算机湖北对口试题答案,2017年计算机专业对口考试试卷及答案
- 在 Mac 上的 Keynote 讲演中如何自动替换文本?
- mysql源码编译安装
- 论文笔记:Connectionist Temporal Classification: Labelling Unsegmented Sequence
- Windows10专业版重装系统教程
- Aras innovator: 如何制作一个itemtype的BOM结构
- 怎样建网站?(超详细)
- 只有A2L文件如何连接INCA
- LeetCode | 347. Top K Frequent Elements
- NFS笔记(二)NFS服务器配置实例
- ui设计一般用什么软件(ui学哪些软件)
- 媲美微信的二维码识别库
- 2019京东618活动提报要求一览
- 按成绩统计各层次学生(附随机生成学生姓名和成绩),现已解决
- Struts2学习笔记——StrutsTags(标签)
- 2017美国数学建模MCM A题(连续型)翻译 管理赞比西河 Managing The Zambezi River