GGH
在GGH密码系统中需要生成一组优质基作为Alice的私钥
生成优质基
通过不断的随机生成指定维数方阵,同时进行Hadamard比率的比较,直到符合Hadamard比率下限。
一般来说h取0.9就足够了,算法可以较快的返回结果。
import numpy as np
from decimal import Decimal
import math
def Hadamard(v):
n = len(v)
detL = abs(np.linalg.det(v))
detL = Decimal(str(detL))
product = 1
for i in range(n):
product*=np.linalg.norm(v[i])
product = Decimal(str(product))
ab = detL / product
res = math.pow(ab, 1 / n)
return res
"""
随机生成一个v*v矩阵的优质基,
上限为N,
Hadamard下限是h
"""
def random_basis(N,v,h):
res = np.random.randint(-N,N+1,(v,v))
while Hadamard(res) < h:
res = np.random.randint(-N,N+1,(v,v))
print(Hadamard(res))
return res
print(random_basis(200,3,0.8))