동형암호란? 암호문 연산의 원리와 CKKS·BFV·TFHE 선택 기준

1장 개념과 보호 목표#

동형암호는 데이터를 복호화하지 않은 상태에서 정해진 연산을 수행하고, 결과를 복호화하면 평문 연산에 대응하는 값을 얻는 기술입니다. 서버에 원문을 공개하지 않고 집계나 분석을 수행할 때 검토할 수 있습니다.


2장 원리와 구분#

부분 동형암호는 덧셈이나 곱셈 같은 제한된 연산을 지원합니다. 완전 동형암호는 더 일반적인 계산을 지원하지만 회로 표현과 파라미터, 노이즈 관리가 필요합니다. BFV·BGV는 정수 계열 계산에, CKKS는 근사 수치 계산에 활용됩니다. TFHE는 부트스트래핑을 활용한 게이트 등의 계산에 사용됩니다. 같은 계열도 구성과 부트스트래핑 지원에 따라 가능 범위가 달라집니다.


3장 비교와 판단 기준#

검토 항목 구분 실무 영향
연산 정수·근사 실수·논리 연산 스킴과 데이터 표현 선택
연산 깊이 곱셈 등으로 누적되는 조건 파라미터·노이즈·성능
부트스트래핑 계산 지속을 위한 재정비 추가 시간·메모리
출력 집계와 반복 질의 결과 권한·정보 추론 제한

4장 평문을 읽지 않고 계산한다는 뜻#

보통 암호화된 데이터를 계산하려면 복호화한 뒤 처리합니다. 동형암호는 지원되는 연산을 암호문에 적용하고 결과를 복호화했을 때 대응되는 계산 결과를 얻는 구조입니다. 계산 서버에 평문을 맡기지 않을 수 있지만 키 소유자·입력·출력·위협 가정을 별도로 정해야 합니다.

flowchart LR
 P["입력 데이터"] --> E["데이터 소유자의 암호화"]
 E --> C["계산 서버의 암호문 연산"]
 C --> R["결과 암호문"]
 R --> D["허용된 키로 복호화"]
 D --> O["계산 결과"]

5장 부분·준·완전 동형암호의 구분#

지원하는 연산 종류와 연속 계산의 범위를 나누어 봅니다. 특정 연산만 지원하는 방식, 정해진 깊이까지 계산하는 방식, 필요한 갱신 절차로 더 일반적인 계산을 지원하는 방식은 비용과 표현 능력이 다릅니다. 완전이라는 말이 모든 프로그램을 평문과 같은 속도로 실행한다는 뜻은 아닙니다.

처리할 함수와 입력 범위·정밀도·연산 깊이를 먼저 정해야 파라미터를 선택할 수 있습니다. 알고리즘 이름부터 고르고 나중에 업무를 억지로 맞추면 정확성이나 성능 요구가 맞지 않을 수 있습니다.


6장 암호문 덧셈의 작은 개념 예제#

A가 가진 수 10과 B가 가진 수 20의 합을 계산한다고 가정합니다. 적합한 키와 구성이 준비된 환경에서 각각 암호화한 값을 서버가 지원되는 덧셈 연산으로 합칩니다. 결과 암호문을 허용된 주체가 복호화하면 30에 대응하는 값을 얻습니다.

평문 기준: 10 + 20 = 30
암호문 계산: Enc(10) ⊕ Enc(20) → Enc(30)에 대응하는 결과
복호화: 허용된 키로 결과를 확인

여기서 ⊕는 실제 파일 바이트의 XOR가 아니라 해당 방식의 암호문 덧셈 인터페이스를 뜻합니다. 서로 다른 키의 암호문을 아무 규칙 없이 더할 수 있다는 의미도 아닙니다.


7장 BFV의 정수 계산과 범위#

BFV 계열은 정수와 모듈러 표현에 맞춘 계산에 사용됩니다. 결과가 처리 범위를 넘으면 평문에서 기대한 일반 정수 결과와 달라질 수 있어 입력 범위와 모듈러 조건을 설계해야 합니다. 정확한 정수 계산이 필요할 때에도 표현·파라미터의 조건이 있습니다.

합계·빈도·정수 기반 분석의 기준 결과를 먼저 만들고 최댓값·최솟값·경계 입력에서 비교합니다. 지원되는 연산과 깊이의 한도를 넘는 조건도 시험해야 합니다.


8장 CKKS의 근사 계산과 허용 오차#

CKKS는 근사 수치 계산을 지원하는 데 활용됩니다. 부동소수점 계산을 그대로 복사하는 것이 아니라 스케일·정밀도와 연산의 오차를 계획해야 합니다. 복호화 결과가 평문 기준과 조금 다를 수 있어 업무가 허용하는 오차와 판단 경계를 정합니다.

평균이 임계값을 넘으면 의사결정을 하는 서비스라면 오차가 경계 판단에 어떤 영향을 주는지 확인합니다. 수치가 대략 맞아 보인다는 관찰만으로 계산 검증을 끝내서는 안 됩니다.


9장 노이즈와 곱셈 깊이#

암호문 연산을 반복하면 계산이 유지되는 조건과 노이즈의 관리가 중요해집니다. 특히 곱셈 깊이는 파라미터·비용·가능한 계산에 영향을 줍니다. 덧셈만 많은 회로와 연속 곱셈이 깊은 회로는 다른 요구를 갖습니다.

(a+b+c+d)             → 덧셈 중심
((a×b)×c)×d          → 연속 곱셈 깊이 발생
(a×b) + (c×d)        → 병렬 계산의 깊이와 비용 검토

함수를 다항식이나 회로로 표현하는 과정에서 연산 수와 깊이를 줄일 수 있지만 정확성과 누출 요구도 유지해야 합니다. 성능 최적화가 업무 결과를 바꾸는지 기준 계산과 비교합니다.


10장 부트스트래핑은 무료 갱신이 아니다#

부트스트래핑은 이후 계산을 이어갈 수 있도록 암호문 상태를 갱신하는 중요한 방법입니다. 계산·메모리·지연 비용이 있으며 사용하는 방식과 파라미터에 따라 달라집니다. 필요 횟수를 줄이는 설계와 정확성 요구를 함께 평가합니다.

TFHE 계열은 이런 갱신과 논리·정수 연산 구성을 특징으로 활용할 수 있습니다. 제품 이름이나 벤치마크 한 개만으로 다른 기기와 업무에 동일한 성능을 기대하지 않습니다.


11장 배칭·자료 표현과 처리량#

여러 값을 한 암호문에 묶어 계산하는 기능은 처리량을 높일 수 있지만 슬롯 배치·회전·집계의 비용을 고려해야 합니다. 자료 배치가 바뀌면 같은 함수도 연산 수가 달라질 수 있습니다. 암호문 크기와 네트워크 전송을 함께 측정합니다.

비교 항목 확인할 내용
정확성 정수 범위·근사 오차·경계 판단
비용 연산·갱신·메모리·전송량
신뢰 키 소유자·결과 공개·계산 검증
운영 실패·업데이트·키 회수·복구

12장 계산 서버가 올바르게 계산했는지는 별도 문제#

입력을 읽지 못하게 만드는 것과 정해진 함수를 정확히 실행했다는 증명을 얻는 것은 다릅니다. 서버가 연산을 생략하거나 잘못된 함수를 적용하는 위협을 고려한다면 추가 검증 구조가 필요할 수 있습니다. 결과의 기밀성과 계산의 진본·정확성을 구분합니다.

입력 데이터도 사실이라는 보장은 없습니다. 데이터의 출처·품질·중복·악성 입력을 별도 절차로 확인해야 실제 분석 결과를 신뢰할 수 있습니다.


13장 작은 집단의 결과가 개인을 드러낼 수 있다#

암호문 상태에서 안전하게 평균을 계산해도 한 사람으로 구성된 집단의 평균을 공개하면 개인 값과 같아집니다. 여러 질의의 차이를 이용해 특정 값을 추론할 수도 있습니다. 결과 공개 범위·집단 크기·반복 질의와 외부 정보 결합을 평가합니다.

필요하면 차등 프라이버시 등 다른 통제의 목적과 비용을 구분해 적용합니다. 암호문 연산을 했다는 사실을 익명화나 처리 적법성의 자동 근거로 사용하지 않습니다.


14장 도입 전 평문 기준과 암호문 계산을 대조한다#

flowchart TB
 F["필요 함수와 공개 범위 정의"] --> B["평문 기준 결과 만들기"]
 B --> P["방식과 파라미터 선택"]
 P --> T["정상·경계 입력의 암호문 계산"]
 T --> C["정확성·오차·비용 비교"]
 C --> R["키·결과 공개·운영 위험 검토"]

입력 최댓값·연산 깊이·오류·자원 부족·키 변경을 포함합니다. 성능이 좋은 예제 하나보다 실제 업무 범위에서 정확성과 운영 조건이 유지되는지 확인하는 것이 중요합니다.


15장 적용 사례와 운영 방법#

고객별 점수를 암호화한 채 평균을 계산하는 예에서는 결과 열람 권한과 반복 질의에 의한 정보 추론도 검토해야 합니다. 성능은 데이터 규모·연산 깊이·배치 처리·하드웨어에 따라 달라지므로 일반 암호의 몇 배라는 단일 수치로 도입 가능성을 단정할 수 없습니다.


16장 계산 결과의 정밀도와 노이즈 예산을 설계한다#

동형암호는 암호문 상태에서 지원되는 연산을 수행하고 복호화한 결과가 평문 계산과 대응하도록 합니다. BFV 계열은 정수 기반 연산, CKKS는 근사 수치 연산에 자주 사용됩니다. TFHE 계열은 부트스트래핑과 논리·정수 연산 구성이 특징이며 실제 지원 범위는 구현마다 확인합니다. 모든 평문 프로그램을 그대로 암호문 프로그램으로 바꿀 수 있는 것은 아닙니다.

연산을 거치며 커지는 노이즈와 곱셈 깊이는 파라미터 선택에 영향을 줍니다. 부트스트래핑은 계산을 이어가도록 암호문을 갱신하지만 비용이 듭니다. CKKS에서 복호화 결과의 오차를 허용할 수 있는지와 BFV에서 모듈러 연산으로 값이 돌아가는 조건을 함께 검토해야 합니다.


17장 암호화된 통계 서비스의 설계 순서#

여러 기관의 수치를 분석한다면 먼저 합계·평균 등 필요한 연산과 출력 공개 범위를 정의합니다. 평문 기준 계산을 만든 뒤 같은 데이터의 동형 연산 결과, 오차, 시간, 암호문 크기를 비교합니다. 키를 누가 갖는지, 여러 기관이 다른 키를 쓰는 경우 어떤 구성이 필요한지도 결정해야 합니다.

최종 통계가 너무 작은 집단을 드러내면 암호문 계산을 했어도 개인정보가 추론될 수 있습니다. 입력 보호, 결과 공개 정책과 필요하면 차등 프라이버시 같은 별도 통제를 구분합니다. 데이터의 진실성이나 서버가 계산을 올바르게 수행했는지도 추가 요구사항입니다.


18장 적용 전 확인할 사항#

  • 정확한 정수와 근사 실수 중 필요한 결과를 정한다
  • 대표 데이터로 지연·메모리·오차를 측정한다
  • 결과 권한·반복 질의·키 보관을 함께 설계한다

19장 자주 묻는 질문#

동형암호를 쓰면 개인정보 규제를 고려하지 않아도 되나요?#

암호화는 보호 수단 중 하나입니다. 결과로 개인을 추론할 가능성과 처리 목적·권한·보유기간을 함께 검토해야 합니다.

동형암호로 데이터 검색과 모든 분석을 바로 수행할 수 있나요?#

지원 연산·깊이·정밀도·비용에 맞춰 회로와 자료 표현을 설계해야 합니다. 분기나 문자열 처리도 평문과 같은 비용으로 동작한다고 가정하면 안 됩니다.

암호문으로 계산하면 결과도 언제나 익명인가요?#

복호화된 결과의 식별 가능성은 별도입니다. 집단 크기·외부 정보 결합·반복 질의의 누적 노출까지 평가해야 합니다.


함께 읽기#