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"