콘텐츠로 이동

동형암호란?

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

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

암호화 방식

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

암호문의 특성

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

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

  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) 키: 동형암호문의 부트스트랩 연산에 사용되는 공개 키