목록으로
GitHub - Mineru98/client-side-cryptography
Service2025.06.08

GitHub - Mineru98/client-side-cryptography

요약

이 시스템은 클라이언트와 서버 간의 JSON 데이터 통신을 위한 완전 자동화된 양방향 암호화/복호화 웹 애플리케이션을 구축합니다.
️ 클라이언트에서는 WebAssembly 기반 Go 암호화 모듈을, 서버에서는 Express.js 미들웨어를 사용하여 AES-256-GCM 암호화를 투명하게 처리합니다.
/api/secure/* 경로의 사용자 및 데이터 관리와 같은 민감한 API 통신에 자동 암호화를 적용하여 개발자가 평문 데이터를 다루는 듯한 투명성을 제공하면서 강력한 보안을 보장합니다.

상세 내용

본 논문은 클라이언트와 서버 간의 모든 JSON 데이터 통신을 자동으로 암호화 및 복호화하는 Web Security - 양방향 암호화 통신 시스템 구현에 대해 설명한다. 이는 개발자가 평문 JSON 데이터를 다루는 것처럼 코딩하면서도 백그라운드에서 모든 통신이 안전하게 암호화되도록 설계된 보안 웹 애플리케이션이다.

1. 핵심 방법론 및 시스템 구조

본 시스템의 핵심은 투명한(transparent) 암호화/복호화 메커니즘을 제공하는 데 있다. 이는 클라이언트 측과 서버 측에서 각각 암호화/복호화 모듈을 통합하여 구현된다.

* 데이터 플로우:
* 클라이언트 → 서버: 클라이언트(브라우저)에서 전송할 평문 JSON 데이터는 crypto-utils.js 모듈을 통해 WebAssembly 기반 암호화 모듈로 전달된다. 이 모듈은 Go 언어로 구현된 고성능 암호화 엔진(Go 암호화 엔진)을 WebAssembly(main.wasm)로 컴파일하여 사용한다. 여기서 AES-256-GCM 알고리즘을 사용하여 JSON 데이터를 암호화하고 Base64로 인코딩된 암호화된 JSON 데이터(Encrypted JSON Data)를 생성한다. 이 데이터는 네트워크를 통해 서버로 전송된다.
* 서버 → 클라이언트: 서버(Express.js Server)는 수신된 암호화된 JSON 데이터를 자동 암호화 미들웨어를 통해 처리한다. 이 미들웨어는 crypto.js 모듈을 사용하여 수신된 데이터를 복호화하여 비즈니스 로직(Business Logic)이 평문 JSON 데이터를 다룰 수 있도록 한다. 비즈니스 로직의 응답 JSON 데이터는 다시 미들웨어를 통해 암호화되어 클라이언트로 전송된다. 클라이언트에서는 WebAssembly 모듈을 통해 이를 복호화하여 평문 JSON 데이터를 브라우저에 전달한다.

* 기술 스택 및 구성 요소:
* 클라이언트 계층:
* 브라우저: 사용자 인터페이스.
* crypto-utils.js: 클라이언트 측 암호화 유틸리티 및 웹 API 호출을 래핑하여 암호화/복호화를 투명하게 처리한다.
* WebAssembly 암호화 모듈: Go 언어(main.go)로 구현된 암호화 로직을 WebAssembly 바이너리(main.wasm)로 컴파일하여 브라우저에서 고성능으로 실행된다. wasm_exec.jsWebAssembly 모듈의 실행을 돕는다.
* 서버 계층:
* Express.js 서버: Node.js 기반의 백엔드 서버.
* 자동 암호화 미들웨어: 특정 API 경로(api/secure/*)로 들어오는 요청의 본문(request body)을 자동으로 복호화하고, 응답(response)을 자동으로 암호화하는 역할을 한다. 이를 통해 비즈니스 로직은 암호화/복호화 과정에 직접 관여하지 않고 평문 데이터를 처리할 수 있다.
* crypto.js 모듈: 서버 측 암호화 및 복호화 작업을 담당한다.
* 비즈니스 로직: 실제 애플리케이션의 핵심 기능을 수행하며 평문 JSON 데이터를 입출력으로 사용한다.

* 경로별 처리:
* /api/secure/* 경로는 모든 요청과 응답에 대해 자동 암호화/복호화가 적용된다.
* 그 외 경로는 개발자의 필요에 따라 선택적으로 암호화를 적용할 수 있다.

2. 보안 특성 및 암호화 스펙

본 시스템은 강력한 암호화 알고리즘을 사용하여 데이터의 기밀성과 무결성을 보장한다.

* 암호화 알고리즘: AES-256-GCM (Advanced Encryption Standard with Galois/Counter Mode)을 사용한다. 이는 현재 널리 사용되는 대칭키 암호화 알고리즘 중 하나로, 기밀성(Confidentiality)과 무결성(Integrity), 인증(Authenticity)을 동시에 제공한다.
* 키 크기: 256비트 (32바이트)의 암호화 키를 사용한다.
* IV 크기: 96비트 (12바이트)의 초기화 벡터(Initialization Vector)를 사용한다. GCM 모드에서 IV는 Nonce(Number used once)로 사용되며, 각 암호화 작업마다 고유해야 한다.
* 태그 크기: 128비트 (16바이트)의 인증 태그(Authentication Tag)를 사용한다. 이는 데이터의 무결성을 검증하는 데 사용된다.
* 인코딩: 암호화된 데이터는 Base64로 인코딩되어 전송된다.
* 키 관리: 암호화 키는 환경 변수(ENCRYPTION_KEY)를 통해 관리되어 코드에 하드코딩되는 것을 방지한다.
* 보안 고려사항: 프로덕션 환경에서는 HTTPS 사용이 권장되며, 정기적인 암호화 키 교체(Key Rotation) 및 민감한 데이터의 로그 제외가 강조된다.

3. 실용적인 API 및 배포

본 시스템은 사용자 관리, 데이터 관리, 메시징 시스템 등 다양한 API에 자동 암호화를 적용하여 실제 웹 애플리케이션에 바로 적용 가능한 형태로 제공된다. Docker Compose를 통해 전체 스택의 개발 및 프로덕션 환경 배포가 용이하게 구성되어 있다.

이 시스템은 WebAssembly를 통한 고속 암호화 처리, 미들웨어 기반의 효율적인 데이터 처리, 비동기 처리를 통한 UI 블로킹 방지 등 성능 최적화와 확장성을 고려하여 설계되었다.

원본 보기
GitHub
Shared by Anonymous