보안을 검토하는 분들을 위한 기술 개요입니다. 여기 적힌 내용은 모두 소스 코드로 확인할 수 있습니다. 우리에게 불리한 부분도 빼지 않고 그대로 적었습니다.
백엔드가 없습니다. 이 확장 프로그램은 Manifest V3 기반 Chrome 확장 프로그램으로, OTPAuth를 사용해 TOTP/HOTP 코드를 기기에서 생성합니다. 서버를 운영하지 않고, 계정을 보관하지 않으며, 사용자 데이터가 우리에게 도달할 수 있는 경로 자체가 없습니다.
서버가 없으므로 서버 측 키 자료도, 키 위탁도, 우리가 통제하는 복구 경로도 없습니다. 사용자가 비밀번호를 잊고 복구 코드까지 잃으면 우리가 해줄 수 있는 일은 없습니다. 의도된 설계입니다.
비밀번호 보호는 선택 사항이며 기본값은 꺼짐입니다. 켜면 다음과 같습니다:
데이터를 비밀번호에서 유도한 키로 직접 암호화하는 일은 없습니다. 레코드는 무작위 마스터 키가 암호화하고, PBKDF2 출력은 그 마스터 키를 감싸기만 합니다. 여기서 두 가지 결과가 따라오는데, 둘 다 중요합니다:
비밀번호 보호를 켜면 식별자와 지문을 제외한 계정 레코드 전체가 암호화됩니다. 서비스 이름도 포함되므로, 프로필이 유출돼도 사용자가 어떤 서비스에 계정을 두고 있는지는 드러나지 않습니다. 기능을 켜면 레코드를 암호화한 뒤 복호화해 대조하는 방식으로 검증하고, 그다음에야 평문 사본을 모두 제거합니다. 브라우저 로컬 저장소, 동기화, 그리고 7일치 순환 백업 스냅샷 전부가 대상입니다.
평가에 영향을 주는 부분이라 그대로 밝힙니다:
요약하면, 이것이 지키는 것은 저장된 상태의 데이터입니다. 사용 중에 이미 공격자 통제 아래 있는 기기는 지켜 주지 못하며, 지킬 수도 없습니다.
매니페스트가 선언하는 권한은 정확히 두 개이며, 호스트 권한은 없습니다:
콘텐츠 스크립트가 전혀 없고, tabs·cookies·webRequest 권한도 없으며, 웹에서 접근 가능한 리소스도 없습니다. 이 확장 프로그램은 어떤 페이지의 내용도 읽거나 바꿀 수 없습니다.
카메라 QR 스캔은 팝업이 아니라 탭으로 열린 확장 프로그램 페이지에서 실행됩니다. 팝업은 포커스를 잃으면 파괴되는데, 권한 요청이 바로 그 포커스를 빼앗기 때문입니다. 여기에는 매니페스트 권한이 필요하지 않습니다. 브라우저의 표준 카메라 요청을 사용하고, 확장 프로그램 출처 단위로 부여되며 사이트 설정에서 취소할 수 있고, 사용자가 스캐너를 열기 전에는 절대 요청하지 않습니다. 영상은 기기에서 디코딩되며 전송되거나 저장되지 않습니다.
일반적인 사용 중에는 어떤 자동 요청도 하지 않으며, Manifest V3는 원격 코드를 금지합니다. 발생할 수 있는 연결은 다음이 전부입니다:
| 호스트 | 시점 | 사용자 데이터를 담나요? |
|---|---|---|
| worldtimeapi.org timeapi.io | 시계 오차 확인. 캐시되며 실패해도 조용히 넘어갑니다. 시계가 어긋나면 TOTP가 어긋납니다. | 아니요 |
| authenticator.sh | 설치 시 환영 페이지, 삭제나 평가 시 피드백 페이지. | 아니요(일반적인 웹 서버 로그) |
글꼴, 스크립트, 스타일, 이미지 중 어느 것도 제3자 호스트에서 불러오지 않습니다. 화면을 그리는 데 필요한 것은 모두 패키지 안에 들어 있습니다.
위 내용 중 어느 것도 그냥 믿을 필요가 없습니다. 확장 프로그램은 오픈 소스이며 모든 릴리스를 재현할 수 있습니다:
.crx를 내려받아 압축을 풉니다npm ci && npm run build를 실행합니다dist/를 압축을 푼 패키지와 비교합니다빌드된 dist/ 안 모든 파일의 SHA-256을 GitHub 릴리스마다 SHA256SUMS-v<version>.txt 파일로, sha256sum 형식으로 함께 배포합니다. 그래서 4단계는 sha256sum -c 한 번 실행으로 끝납니다. 차이는 아카이브 내부의 파일 순서와, Node 패치 버전에 따른 최소화 출력의 공백 정도로 제한되어야 합니다.
런타임 의존성은 의도적으로 적습니다. OTPAuth, React, jsQR, Zustand, Framer Motion, Lucide뿐이며 저장소에 커밋된 lockfile로 고정되어 있습니다. CycloneDX 형식의 SBOM은 요청하시면 제공합니다.
소스 코드 보기저희는 작은 독립 개발사입니다. 다음 중 하나라도 귀사 절차의 필수 요건이라면, 평가가 3주쯤 진행된 뒤보다 지금 아시는 편이 낫습니다:
대신 제공하는 것은 소스 코드의 완전한 공개, 검증 가능한 빌드, 최소한의 권한, 그리고 애초에 귀사의 데이터를 보관할 수 있는 서버 인프라가 존재하지 않는다는 사실입니다.
취약점 제보와 보안 문의는 security@authenticator.sh로 보내주세요. 공개 정책, 적용 범위, 응답 시간, 세이프 하버 조건은 보안 정책 페이지에 있고, 무엇이 저장되고 무엇이 기기를 떠나는지는 개인정보처리방침에 정리되어 있습니다.
서면 공급업체 평가 설문에 답변하거나, 보안팀과 함께 코드를 짚어 나가는 일도 기꺼이 하겠습니다.
보안과 무관한 사안(설치, 계정 복구, 배포 과정의 청구 문의 등)은 지원 페이지을 참고하세요. 취약점 제보는 그쪽으로 보내지 말아 주세요. 그 메일함은 기밀로 취급하지 않습니다.