encrypt

최대 레벨로의 암호화

Engine.encrypt(plaintext, public_key)
인코딩 된 Plaintext를 암호화합니다. 생성된 암호문의 최대 곱셈 횟수는 plaintext의 지정된 최대 곱셈 횟수와 같습니다.
  • 인풋:
    • Plaintext
    • SecretKey
  • 아웃풋:

    • Ciphertext
    from desilofhe import Engine
    
    engine = Engine()
    secret_key = engine.create_secret_key()
    public_key = engine.create_public_key(secret_key)
    
    message = [1, 2, 3]
    plaintext = engine.encode(message)
    ciphertext = engine.encrypt(encoded, public_key)
    

암호화 자체만 놓고 보면 인코딩과 암호화가 통합된 API를 호출하는 것이 더 빠르기 때문에 분리된 API를 호출하는 것은 권장하지는 않습니다. 동일한 메시지를 여러번 암호화해야하는 경우나, 이미 다른 용도로 인코딩된 메시지를 암호화하는 경우에만 사용하는 것을 추천합니다.

특정 레벨로의 암호화

Engine.encrypt(message, public_key, level)
리스트 형태의 메시지를 암호화합니다. 한번에 암호화 될 수 있는 최대 크기는 Engine.slot_count로 확인할 수 있습니다. 메시지의 길이가 최대 크기를 넘어서면 에러가 발생하며, 최대 크기보다 작은 경우에는 0으로 패딩되어서 암호화 됩니다.
  • 인풋:
    • data: 파이선 리스트나 numpy 어레이 혹은 plaintext를 받습니다. dtype은 int, double, complex double 모두 가능합니다.
    • SecretKey
    • level: optional
      • 지정된 경우에는 해당 최대 곱셈 횟수에 필요한 만큼만 인코딩을 합니다. 레벨이 낮을 수록 차지하는 공간이 작지만 최대 곱셈 횟수가 줄어듭니다.
  • 아웃풋:
    • Plaintext
from desilofhe import Engine

engine = Engine()
secret_key = engine.create_secret_key()
public_key = engine.create_public_key(secret_key)

message = [1, 2, 3]
ciphertext = engine.encrypt(message, public_key)
from desilofhe import Engine

engine = Engine()
secret_key = engine.create_secret_key()
public_key = engine.create_public_key(secret_key)

message = [1, 2, 3]
ciphertext = engine.encrypt(message, public_key, level=3)