예제 #1
0
This is a sample that shows how to rotate ciphertext. 
First we will generate message, and encrypt it to ciphertext.
In this sample, homomorphic operation is performed in defined function.  

'''

import heaan

# Step 1. Setting Parameters
params = heaan.Parameters()
context = heaan.Context(params)

# Step 2. Generating Keys
secret_key = heaan.SecretKey(context)
public_key_path = "./public_key_path"
public_key_pack = heaan.PublicKeyPack(context, secret_key, public_key_path)

conj_key = public_key_pack.get_conj_key()
enc_key = public_key_pack.get_enc_key()
mult_key = public_key_pack.get_mult_key()
encryptor = heaan.Encryptor(context)
evaluator = heaan.HomEvaluator(context)

# Step 3. Generating Messages
_list = [i for i in range(128)]
msg = heaan.Message(_list)

# Step 4. Encrypt Message to Ciphertext
ciphertext_a = heaan.Ciphertext()
encryptor.encrypt(msg, enc_key, ciphertext_a)
#!pip install pi-heaan

import heaan
params = heaan.Parameters()  #동형암호 연산에 필요한 파라미터 객체를 생성한다.
context = heaan.Context(
    params
)  # 컨텍스트 객체는 파라미터 저장, 알고리즘의 시간복잡도 계산을 수행한다. 암호문의 부트스트랩을 가능하도록 하는 메소드를 가지고 있다.

secret_key = heaan.SecretKey(context)  # generate secret key

public_key_path = "./public_key_path"
public_key = heaan.PublicKeyPack(context, secret_key, public_key_path)
# ConjKey : 암호문을 결합하기 위한 공개 키
# EncKey : 메시지를 암호화하기 위한 공개 키
# MultKey: 암호 텍스트의 곱셈을 위한 공개 키
# RotKey{rot_idx} : {rot_idx} 암호문을 회전하기 위한 공개 키

# 메시지를 암호화하거나 동형 작업을 평가하는 동안 다음과 같은 공개키가 제공된다.
conj_key = public_key_pack.get_conj_key()  # 암호문 결합을 위한 공개키
enc_key = public_key_pack.get_enc_key()  # 메세지를 암호화 하기 위한 공개키
mult_key = public_key_pack.get_mult_key()  # 암호문 곱셈을 위한 공개키

#매개 변수 및 비밀키 저장
#매개 변수와  비밀키를 이진 파일로 저장할 수 있다.
param_path = "./params.bin"
params.save(param_path)
secret_key_path = "./secretkey.bin"
secret_key.save(secret_key_path)

# 저장된 파라미터 로드
param_path = "./params.bin"