
<aside>
🗳️
완전 동형 암호(FHE) 기반 비밀 투표 서비스
</aside>
소개
암호화된 상태에서도 연산이 가능한 완전 동형 암호(FHE) 스킴을 활용하여, 투표의 기밀성을 완전 보장하는 비밀 투표 서비스
기술적 특징
- 완전 동형 암호화 라이브러리인 Microsoft SEAL(C++) 채택
- Android 내에서 C++ 바이너리를 사용하기 위해 NDK 활용
- Android (Kotlin)와 Flask (Python)로 구성된 클라이언트-서버 구조
- Flask 서버 구현은 최소한 단순하게 진행하고, 암/복호화 관련 작업을 모두 Android 측에서 처리
- 테스트 용이성을 위해 저장소 패턴 적용, 필요에 따라 구현체를 바꿀 수 있게 구현
서비스 플로우
- Android 단말기에서 투표 생성
- 생성된 투표에 참여할 수 있는 투표 코드와 딥 링크를 유권자에게 전달
- 유권자도 Android 단말기에서 투표에 참여하고, 해당 값은 SEAL로 암호화되어 서버에 전달
- 서버는 단순히 투표 값을 저장하기만 함 (멍청한 서버; dumb server)
- 주최자가 투표 종료 시, 서버는 모아 둔 모든 투표 값을 주최자에게 전달
- 주최자의 Android 단말은 복호화를 하지 않고 암호화된 투표 값을 FHE 덧셈 연산으로 합산
- 주최자의 Android 단말을 합산된 값을 복호화하여 투표 결과를 서버에 전달
⚙️ 스택
Front-end
- UI 프레임워크 Jetpack Compose
- 언어 Kotlin
- 의존성 주입 Hilt (with KSP)
- 네트워킹 Retrofit2
- HTTP 요청 okhttp3
- FHE 라이브러리 Microsoft SEAL
Back-end
- API 서버 Flask
- 언어 Python
- DB SQLite
🧑💻 규모
🙋 담당 업무
- Front-end 개발
- UI 개발
- C++/Android 브릿지 개발
- SK 보관을 위한 내부 암호화 모듈 개발
- Back-end 개발
- 기획 등 PM 업무
🔗 링크