콘텐츠로 이동

동형암호란?

동형암호는 데이터를 암호화된 상태에서 직접 연산할 수 있도록 설계된 혁신적인 암호화 방식입니다. 덧셈, 곱셈 등의 연산을 암호화된 데이터에 수행할 수 있어, 기존에는 접근이 어려웠던 민감 데이터를 안전하게 활용할 수 있는 가능성을 열어줍니다. 그러나 암호화된 상태에서의 연산은 일반 연산보다 속도가 느리고, 특정 제약조건이 따르기 때문에 동형암호의 특성을 이해하고 적절히 활용하는 것이 중요합니다.

이 페이지는 동형암호 전문가가 아니더라도 동형암호의 특성을 이해할 수 있도록 작성되었습니다. 동형암호 전문가라면 굳이 읽을 필요가 없습니다.

암호화 방식

동형암호의 대표적인 암호화 방식으로는 비트 단위 연산을 지원하는 FHEW/TFHE, 정수 벡터 연산을 지원하는 BFV/BGV, 실수 및 복소수 벡터 연산을 지원하는 CKKS, 그리고 실수 및 복소수 행렬 연산을 지원하는 GL이 있습니다. 현재 DESILO FHE 라이브러리는 이들 중 가장 범용적으로 활용 가능한 CKKS과 행렬 연산에 가장 효율적인 GL을 지원하며, 향후 다른 암호화 방식도 순차적으로 추가될 예정입니다.

암호문의 특성

동형암호는 다음과 같은 특성을 갖습니다.

  1. 동시 암호화 (Packing) 다량의 데이터를 벡터 형식으로 변환하여 한꺼번에 동형암호화할 수 있습니다. DESILO FHE 라이브러리는 암호화 파라미터 설정에 따라 최대 \(2^{12}\), \(2^{13}\), \(2^{14}\), 혹은 \(2^{15}\)의 길이를 가진 벡터를 동형암호화할 수 있으며, 데이터에 알맞는 크기의 벡터로 암호화하는 것이 성능 면에서 가장 효율적입니다.

  2. 노이즈 및 부트스트랩(Bootstrapping) 동형암호문은 보안을 위해 일정량의 노이즈를 포함하며, 연산을 거듭할수록 노이즈가 증가합니다. 노이즈가 원본값에 영향을 미치기 시작하면 부트스트랩(Bootstrapping)을 통해 노이즈를 감소시키고 추가 연산을 수행할 수 있습니다.

  3. 연산 특성 동형암호문의 연산은 SIMD(Single Instruction, Multiple Data) 방식으로 이루어집니다. 예를 들어, (1, 2, 3) + (4, 5, 6) = (5, 7, 9), (1, 2, 3) * (4, 5, 6) = (4, 10, 18)와 같은 형태로 수행됩니다. DESILO FHE 라이브러리는 동형암호문 간 연산뿐만 아니라 상수와 벡터간의 연산, 회전(rotate) 연산도 지원합니다.

  4. 키(Key) 동형암호 체계에서는 다양한 종류의 키가 필요합니다. 키의 종류는 다음과 같습니다.

    • 복호화 키: 암호문의 복호화에 사용되는 비밀 키
    • 암호화 키: 암호화에 사용되는 공개 키
    • 재선형화(relinearization) 키: 곱셈 연산에 사용되는 공개 키
    • 켤레화(conjugation) 키: 동형암호문의 켤레 복소수 계산에 사용되는 공개 키
    • 회전(rotation) 키: 동형암호문의 회전 연산에 사용되는 공개 키
    • 부트스트랩(bootstrap) 키: 동형암호문의 부트스트랩 연산에 사용되는 공개 키