SecureMsg

Verified safeOpen sourceExclusive
No reviews reviews
2
downloads
12
android

AI summary

Self-hosted E2E-encrypted SMS sync app that replaces your default Android SMS app. Lets you read and reply to carrier SMS/MMS from a web PWA across devices while blocking spam locally before it reaches the server. Requires email verification for signup; past messages cannot be recovered if all approved devices are lost.

Generated by AI. May contain inaccuracies.

About this app

자가호스팅 E2E 암호화 SMS 동기화 — Android 기본 SMS 앱 + 웹 PWA (Flask + Socket.IO relay)

Android 휴대폰의 실제 SMS 번호를 소스(source)로 삼아, Google Messages처럼 웹 PWA와 여러 기기에서 SMS를 확인하고 답장하는 자가호스팅 앱이다.

핵심 동작은 다음과 같다.

Android 앱이 사용자가 선택한 기본 SMS 앱이 된다. 수신 SMS를 휴대폰에서 먼저 판정한다. 사용자 키워드/문구 차단 차단 발신번호 URL·금융·도박·홍보 문구를 조합한 보수적 자동 스팸 판정 차단된 문자는 Android 로컬 격리함에만 저장하고, 시스템 SMS Provider에도 쓰지 않으며, 알림·서버 동기화를 하지 않는다. 통과한 문자는 Android SMS Provider에 저장한 뒤 기기별 envelope E2E 암호화로 relay 서버에 전달한다. 웹/PWA에서 보낸 답장은 Android가 복호화해 통신사 SMS 또는 MMS로 발신한다. MMS는 텍스트·제목·첨부파일을 암호화 envelope 안에 넣어 웹/Android 기기에 동기화하고, Android framework의 carrier-configured MMSC 경로로 발신한다. Android 대화 화면은 오래된 문자부터 위에 쌓고 최신 문자를 최하단에 고정한다. 최하단을 보고 있을 때 새 문자가 오면 기존 대화가 위로 밀리며, 과거 기록을 읽는 중에는 화면을 강제로 이동하지 않는다.

SMS의 통신사 구간 자체는 SMS 표준 특성상 E2E 암호화가 아니다. 서버는 통과한 SMS의 평문을 볼 수 없지만, 대화 라벨(현재는 전화번호)·기기·시간·메시지 크기 같은 메타데이터는 볼 수 있다.

계정과 비밀번호 정책 개인정보 없이 임의의 아이디만 사용한다.

아이디: a-z, 0-9, _ 만 허용, 3~20자. 실명·전화번호·이메일을 쓰지 않는다. 비밀번호: 총 8자 이상이면 된다. 영문·숫자·특수문자(한글 포함)를 자유롭게 섞을 수 있으며, 문자 종류별 개수나 조합 같은 추가 제한은 없다. 상한은 1,024자. 비밀번호는 클라이언트(웹/Android)에서 Argon2id로 해시된 값만 서버로 전송되므로 서버는 원문 비밀번호를 보지 못하고, 서버는 이를 다시 bcrypt로 감싸 저장한다. 비밀번호와 Argon2id 결과는 클라이언트에 저장하지 않는다. 웹 JWT는 메모리에만 두고, Android JWT와 기기 개인키는 Android Keystore 기반 AES-256-GCM 암호문으로만 DataStore에 저장한다. 로그아웃 시 서버의 기기별 세션 버전을 회전해 현재 토큰과 기존 Socket.IO 세션을 즉시 무효화한다. 기기 키는 보존하므로 다음 로그인에서 같은 기기를 안전하게 재사용할 수 있다. 가입은 이메일 인증 경로만 가능하다(v0.11+). 인증 없이 계정을 만들던 /api/register는 제거됐다. 비밀번호 재설정은 가입 시 인증한 이메일의 6자리 코드로만 가능하다(v0.10.6+). 코드는 10분·5회 시도 제한이며, 재설정 완료 시 계정의 모든 기기 세션(토큰·Socket.IO)이 즉시 폐기된다. 이메일을 등록하지 않은 구 계정은 재설정 수단이 없다. 비밀번호는 메시지 암호화 키가 아니므로, 재설정으로 과거 메시지를 새 기기에서 읽을 수는 없다. 새 브라우저·새 앱 설치는 해당 기기 등록 이전의 메시지를 복호화할 수 없다. 과거 envelope에는 새 기기의 wrapped key가 없기 때문이다. v0.14.0부터는 이미 승인된 기기에서 과거 내역 공유를 실행하면 그 기기가 message key를 대상 공개키로 다시 감싸 넘겨주므로 새 기기도 과거 대화를 읽을 수 있다. 공유 대상은 같은 계정의 승인된 기기로 서버가 제한하고, 이 과정에서도 서버는 wrapped key만 본다. 암호화된 서버 백업은 제공하지 않으므로, 승인 기기가 하나도 남지 않은 상태에서 브라우저 사이트 데이터·앱 데이터·기기 개인키를 삭제하면 과거 내역을 복구할 수 없다. Android 로그아웃 시 복호화 평문은 기기에서 삭제되고(기기 키는 보존) 재로그인 후 서버 이력을 다시 동기화한다.

About this version

Version
0.21.0 (38)
Size
47.64 MB
Requires Android
12
Target SDK
31
Architecture
armeabi, mips, mips64, x86, x86_64, arm64-v8a, armeabi-v7a
Downloads
2
Updated
Sep 10, 2026
Package
com.yunjelee.securemsg

Similar apps

Ratings & reviews

0 ratings
  • 5
    0
  • 4
    0
  • 3
    0
  • 2
    0
  • 1
    0

Write a review

Tap a star to rate this app