class
ECC
:
def
__init__
(
self
,
coe
:
list
,
p
:
int
,
G
:
list
)
:
self
.
coe
=
coe
self
.
p
=
p
self
.
G
=
G
def
add
(
self
,
a
:
list
,
b
:
list
)
-
>
list
:
euc
=
Euclid
.
euclid
(
)
a_x
,
a_y
=
a
[
0
]
,
a
[
1
]
b_x
,
b_y
=
b
[
0
]
,
b
[
1
]
if
(
a_x
!=
b_x
)
:
c
=
(
b_y
-
a_y
)
*
euc
.
get_valid_X_Y
(
self
.
p
,
(
b_x
-
a_x
)
%
self
.
p
,
ret_String
=
False
)
[
1
]
c
%=
p
elif
(
(
a_y
+
b_y
)
%
p
!=
0
)
:
c
=
(
3
*
a_x
**
2
+
self
.
coe
[
0
]
)
*
euc
.
get_valid_X_Y
(
self
.
p
,
(
2
*
a_y
)
%
self
.
p
,
ret_String
=
False
)
[
1
]
c
%=
self
.
p
else
:
return
None
x
=
(
c
**
2
-
a_x
-
b_x
)
%
self
.
p
y
=
(
c
*
(
a_x
-
x
)
-
a_y
)
%
self
.
p
return
[
x
,
y
]
def
mul
(
self
,
n
:
int
,
T
:
list
)
-
>
list
:
res
=
T
while
(
n
>
1
)
:
res
=
self
.
add
(
res
,
T
)
if
(
res
==
None
)
:
print
(
"横坐标相等, 纵坐标为相反数, 不可计算!!!"
)
return
None
n
-=
1
return
res
if
__name__
==
'__main__'
:
coe
=
[
1
,
1
]
p
=
23
n
=
27
G
=
[
0
,
1
]
dh_ecc
=
ECC
(
coe
,
p
,
G
)
n_a
=
5
n_b
=
11
mul_a
=
dh_ecc
.
mul
(
n_a
,
G
)
mul_b
=
dh_ecc
.
mul
(
n_b
,
G
)
Share_a
=
dh_ecc
.
mul
(
n_a
,
mul_b
)
Share_b
=
dh_ecc
.
mul
(
n_b
,
mul_a
)
print
(
'用户a计算出的共享密钥: {}'
.
format
(
Share_a
)
)
print
(
'用户b计算出的共享密钥: {}'
.
format
(
Share_b
)
)
DH
-度娘版
算法
描述
假设用户A和B希望
交换
一个
密钥
,用户A选择一个作为私有
密钥
的随机数XA(XA<q),并计算公开
密钥
YA=a^XA mod q。A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选择一个私有的随机数XB<q,并计算公开
密钥
YB=a^XB mod q。B对XB的值保密存放而使YB能被A公开获得。
看完感觉懵懵的
——来自度娘的例子
密钥
交换
基于素数q = 97和97
Diffie-Hellman
密钥
交换
协议(
python
实现
)
1、
DH
密钥
交换
过程
假设Alice和Bob需要共享一个对称密码的
密钥
,这时,Alice和Bob可以通过下面的方法进行
DH
密钥
交换
,从而生成共享
密钥
。
1.Alice向Bob发送大素数P和原根G,P和G可以由Alice和Bob中的任意一方生成。
2. Alice生成一个随机数A,A是一个1~P-2之间的整数。这个数是Al...
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
public class
DH
{
private ...
DH
交换
算法
简介
Deffie-Hellman(简称
DH
)
密钥
交换
是最早的
密钥
交换
算法
之一,它使得通信的双方能在非安全的信道中安全的
交换
密钥
,用于加密后续的通信消息。 Whitfield Diffie 和 Martin Hellman 于 1976 提出该
算法
,之后被应用于安全领域,比如 Https 协议的 TLS(Transport Layer Security) 和 IPsec 协议的 IKE(Internet Key Exchange) 均以
DH
算法
作为
密钥
交换
算法
。
DH
算法
理解Diffie-Hellman
算法
的
实现
原理,编程
实现
Diffie-Hellman
算法
的程序,能够
实现
密钥
协商的目的
二、
实验
原理
w.Diffie与M.Hellman在1976年提出一个称为Diffie——Hellman
密钥
交换
的公钥密码
算法
。该
算法
能用来在两个用户之间安全地
交换
密钥
材料,从而使双方得到一个共享的会话
密钥
,但该
算法
只能用于
交换
密钥
,不能用于加/解密。
Diffie...
迪菲-赫尔曼
密钥
交换
(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。
它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个
密钥
。这个
密钥
可以在后续的通讯中作为对称
密钥
来加密通讯内容。
(1)、
算法
描述
离散对数的概念:
原根:如果a是素数p的一个原根,那么数值:
mod p,a^2 mod
1.
DH
算法
简介
Diffie-Hellman
密钥
交换
算法
是在1976年由这两个人发明的
算法
。它可以在不安全的网络中,通过
交换
一些公开的信息协商出共享
密钥
,使用此共享
密钥
建立安全通讯。它实际上并没有直接
交换
密钥
,而是通过数学计算,得出共享
密钥
。
有限域的离散对数问题的复杂度正是支撑
DH
密钥
交换
算法
的基础。
⚠️⚠️⚠️
DH
算法
属于非对称
算法
。
DH
算法
专利已经与.
代码:https://github.com/Clara998/
DH
-demo
实验
环境:
方法1:为了统一依赖,我们采用 Pyenv 来管理
Python
的版本,Pipenv 来管理依赖的版本。
Windows 10 下安装 Pyenv
Pipenv 的安装
简明操作指南
方法2:
实验
环境为
python
3.7及django3.0.6,可以自行下载
算法
流程:
随机生成大素数p
生成大素数p的一个原根g
Alice,Bob,C
椭圆曲线
算法
(Elliptic Curve Algorithm, ECA) 是一种
密码学
算法
,它在数学基础上使用
椭圆曲线
来
实现
公钥密码体制。
C 语言中可以通过
实现
椭圆曲线
数学模型并使用相应的数学运算来
实现
椭圆曲线
算法
。下面是一个简单的代码
实现
示例:
#include <stdio.h>
#include <gmp.h>
int main(void) {
mpz_t a, b, p, x, y, n;
int result;
mpz_init_set_str(a, "0", 10);
mpz_init_set_str(b, "7", 10);
mpz_init_set_str(p, "
11
", 10);
mpz_init_set_str(x, "9", 10);
mpz_init_set_str(y, "6", 10);
mpz_init_set_str(n, "2", 10);
result = mpz_legendre(y, p);
if (result == 1) {
mpz_mul(y, y, y);
mpz_mod(y, y, p);
mpz_mul(x, x, x);
mpz_mul_ui(x, x, 3);
mpz_add(x, x, a);
mpz_mod(x, x, p);
mpz_mul(x, x, x);
mpz_mul(x, x, y);
mpz_mul_ui(x, x, 2);
mpz_mod(x, x, p);
mpz_mul(y, y, y);
mpz_mul_ui(y, y, 3);
mpz_add(y, y, a);
mpz_mod(y, y, p);
mpz_mul(y, y, y);
mpz_mul(y, y, y);
mpz_mul(y, y, b);
mpz_mod(y, y, p);
mpz_powm(x, x, n, p);
mpz_powm(y, y, n, p);
gmp_printf("x = %Zd, y = %Zd\n", x, y);
else {
printf("Point is not on the curve\n");
mpz_clear(a);
mpz_clear(b);
mpz_clear(p);