개인 미디어 보관 서비스 · 여러 고객이 따로 쓰는 구조
서버도 못 보는 사진·영상 보관함
사진과 영상을 내 브라우저에서 잠근 뒤 올리게 해서, 서비스 운영자도 내용을 볼 수 없는 미디어 보관함을 만들었습니다.
범위 안내: 내부 점검과 내부 암호 감사만 거쳤고, 외부 전문 기관의 독립 감사는 아직 받지 않았습니다.
개발 파트너가 실제로 구축한 프로젝트입니다. 고객사 보호를 위해 회사 이름은 밝히지 않고 업종으로 표기합니다.
- 내부 침투 테스트의 심각·높음 등급 취약점
- 0건
- 자료의 내부 침투 테스트 결과(critical, high 0건)
- 내부 암호 감사 항목
- 44개 중 41개 통과
- 자료의 내부 crypto audit 결과. 나머지 3개는 문서 서술 문제로 이후 보완
Before도입 전
- 사람사진·영상 업로드
- 시스템서버가 열쇠 보관!운영자 접근 가능
- 사람영상 전체 내려받기재생까지 대기
- 사람비밀번호 분실!복구 수단 없음
- 일반 클라우드는 서버가 열쇠를 갖고 있어서, 마음만 먹으면 운영자가 사진과 영상을 열어 볼 수 있었습니다.
- 파일을 통째로 잠그면 긴 영상을 앞부분부터 바로 재생하기 어려웠습니다.
- 비밀번호를 잊으면 아무도 데이터를 되살릴 수 없다는 점이 사용자에게 큰 부담이었습니다.
After도입 후
- 시스템비밀번호로 열쇠 생성브라우저 안에서만
- 시스템파일별 열쇠로 잠금4MB 조각 단위
- 시스템잠긴 조각만 저장서버는 내용 모름
- 시스템조각 풀며 바로 재생
- 사람복구 문구 보관 확인가입 때 직접 확인
- 열쇠는 사용자 브라우저 안에만 있고, 서버에는 잠긴 데이터만 저장됩니다.
- 잠긴 영상을 조각 단위로 받아 풀면서 바로 재생합니다.
- 24단어 복구 문구로 비밀번호를 잊어도 되살릴 수 있고, 둘 다 잃으면 복구가 안 된다는 점을 가입할 때 확인받습니다.
How it works이렇게 작동합니다
사용자가 비밀번호를 넣으면 브라우저가 그 비밀번호를 여러 번 무겁게 가공해 열쇠를 만들고, 그 열쇠에서 용도별 작은 열쇠를 다시 나눕니다. 이 열쇠들은 브라우저 밖으로 꺼낼 수 없게 다룹니다. 파일마다 따로 무작위 열쇠를 만들어 잠그고, 그 파일 열쇠도 다시 잠가서 서버에 맡깁니다.
파일은 4MB 조각으로 나눠 조각마다 잠그고, 각 조각에 "몇 번째 조각인지"를 묶어 둡니다. 누가 조각 순서를 바꾸거나 다른 조각으로 바꿔치기하면 푸는 단계에서 바로 걸립니다. 재생할 때는 조각을 차례로 받아 브라우저에서 풀면서 화면으로 흘려보내므로, 긴 영상도 다 받기 전에 앞부분부터 볼 수 있습니다. 아이폰 사파리처럼 방식이 다른 환경도 따로 대응했습니다.
서버는 접근 권한을 확인하고 잠깐만 쓸 수 있는 업로드·다운로드 주소를 내주는 일만 합니다. 파일 이름과 태그 같은 정보까지 브라우저에서 잠가 저장하고, 검색도 브라우저 안에서 풀어 둔 정보로 처리합니다. 현재 여러 사용자가 각자 분리된 보관함을 쓰는 서비스로 실제 운영 중입니다.
서버를 믿어야 안전한 구조가 아니라, 서버를 믿지 않아도 안전한 구조를 목표로 했습니다. 그래서 잠그고 푸는 일은 전부 사용자 브라우저에서만 일어나게 했습니다.