VerbalChart 보안 백서
VerbalChart는 환자의 신원을 취득하지 않도록 설계된 서비스입니다. 다만 이것이 "환자 이름이 서버로 가지 않는다"는 뜻은 아닙니다 — 그 차이를 3항에서 밝힙니다. 무엇을 보호하고 무엇은 보호 범위 밖인지, 아래에 있는 그대로 적습니다.
1. 전송 구간 암호화
클라이언트와 서버 사이의 모든 통신은 TLS로 암호화되며, HSTS(max-age=31536000; includeSubDomains)로 평문 접속을 차단합니다.
다만 이것은 종단간 암호화(E2EE)가 아닙니다. 서버가 대화록을 읽어 SOAP 초안을 만들어야 하므로 구조적으로 E2EE일 수 없습니다. 그리고 서버가 읽는 내용에서 인명을 찾아 제거하는 처리도 하지 않습니다(3항).
사용자가 휴대폰을 마이크로 등록한 경우, 휴대폰과 데스크탑 사이 구간도 TLS 1.3으로 암호화되며 QR로 휴대폰을 연결할 때 고정한 데스크탑 공개키만 신뢰합니다.
2. 로컬에 남는 것과 서버로 가는 것
화자 분리(Diarization)와 무음 구간 제거(VAD)는 데스크탑 앱에서 로컬로 처리합니다. 그 밖의 처리는 다음과 같이 나뉩니다.
음성이 국외(미국)로 이전되는 점은 개인정보처리방침 제6조에 공시되어 있으며, 별도 동의 대상입니다.
3. 서비스는 환자 신원을 취득하지 않습니다
서비스는 환자의 이름·생년월일을 입력받지 않으며, EMR 화면에서 읽지도 않습니다. 차트 초안은 대화 내용만으로 작성되고, 그 초안이 어느 환자의 것인지는 전적으로 사용자(의사)가 판단합니다.
다만 이것이 "이름이 서버로 가지 않는다"는 뜻은 아닙니다. 진료 중 환자의 이름을 부르면 그 이름은 음성-텍스트 변환을 거쳐 대화록에 그대로 들어가고, 차트 초안 생성을 위해 그 상태로 AI 서비스에 전달됩니다. 서비스는 대화록에서 인명을 찾아 제거하는 처리를 하지 않습니다.
자동으로 걸러지는 것은 형식으로 식별되는 정보뿐입니다 — 차트 내용에 주민등록번호나 휴대전화번호 형식의 값이 있으면 해당 요청을 AI 서비스로 보내지 않습니다. 이름은 형식만으로 구별할 수 없어 이 방식으로 탐지되지 않습니다.
4. 서버는 진료 내용을 영속 저장하지 않습니다
서버에는 진료 대화록이나 SOAP 차트를 담는 저장소가 없습니다. 기능을 끈 것이 아니라 그런 테이블 자체가 존재하지 않습니다.
한 가지 예외를 정확히 적습니다. 진료 중 차트를 변경분만 이어 쓰는 동안에는, 직전에 만들어 둔 SOAP 본문이 다음 갱신의 기준이 되어야 하므로 서버의 휘발성 공유 캐시에 최대 30분 머무릅니다. 그 값은 AES-256-GCM으로 봉인된 상태로만 캐시에 들어가고 복호화 키는 처리 서버에만 있어 캐시 자체는 내용을 알지 못합니다. 캐시에는 디스크 볼륨이 붙어 있지 않아 프로세스가 내려가면 함께 사라지며, 배포할 때마다 그 컨테이너가 파일을 하나도 쓰지 않았는지 자동으로 검사합니다. 진료를 마쳐 최종 차트가 만들어지면 그 즉시 지워지고, 앱이 비정상 종료되어 완료 신호가 오지 않은 경우에도 위 시간이 지나면 소멸합니다. 이 동작은 배포 없이 즉시 끌 수 있는 운영 스위치 2개 아래에 있습니다.
5. 사용자 PC의 진료 기록 보관
- 작성 중인 초안은 30일이 지나면 자동으로 삭제됩니다.
- 삭제된 자리는 0으로 덮어쓰도록 설정되어 있어 삭제 후 복구되지 않습니다(
PRAGMA secure_delete=ON). - 공용 PC에서 다른 계정으로 로그인하면 이전 사용자의 초안은 파기됩니다.
- 채팅에 첨부한 이미지·파일은 로컬 데이터베이스에 담지 않습니다.
보호 범위 밖: 로컬 데이터베이스 파일 자체는 암호화되어 있지 않으며, 대화 중 이름이 말해졌다면 대화록에 그 이름이 포함된 채로 저장됩니다. 위의 자동 파기·복구 불가 삭제가 보관 기간을 제한할 뿐입니다. PC 자체의 접근 통제(로그인 암호, 디스크 암호화)는 의료기관에서 관리하셔야 합니다.
6. 저장 시 암호화의 범위
서버에 저장되는 값 가운데 의사면허번호는 AES-256-GCM으로 필드 단위 암호화합니다. 암호화 키가 설정되어 있지 않으면 운영 서버는 아예 기동하지 않습니다. 검색이 필요한 경우를 위해 암호화 키와 분리된 별도 키로 파생한 블라인드 인덱스를 사용하므로, 조회 과정에서도 평문이 드러나지 않습니다.
주민등록번호는 본인확인 처리 후 보관하지 않습니다. 이메일은 로그인 조회에 쓰이므로 평문으로 저장하되, 감사 로그에는 마스킹하여 기록합니다.
7. 계정 보호
- 세션은 HttpOnly 쿠키로만 유지하며 브라우저 저장소에 인증 상태를 두지 않습니다.
- 소셜 로그인은 PKCE를 필수로 사용하고, 리프레시 토큰은 회전 및 재사용 탐지를 적용합니다.
- 비밀번호는 bcrypt로 해시하여 저장합니다.
- 로그인 및 API 호출에 IP 단위 요청 제한을 적용합니다.
- 데스크탑 앱과 웹 콘솔 모두 유휴 시 자동 로그아웃됩니다.
8. 분석·광고 목적의 추적을 하지 않습니다
분석 도구나 광고 스크립트를 사용하지 않습니다. 쿠키는 로그인 세션 유지에 필요한 것뿐입니다. 고객의 진료 데이터를 AI 모델 학습에 사용하지 않습니다.
9. 잘못 쓰는 것을 막는 장치
이 차트가 어느 환자의 것인지 서비스가 보증하지는 않습니다. 환자 신원을 별도로 취득하지 않으므로(3항), 어느 환자의 기록으로 남길지 판단하는 것은 전적으로 사용자(의료인)의 몫입니다.
전자차트로 옮기는 작업이 저절로 실행되는 일은 없습니다. 사용자가 직접 실행하고, 입력 직전에 대상과 전송될 내용의 요약을 보여 주는 확인 창에서 한 번 더 승인해야 진행됩니다. 자동 대조가 아니라 사람의 확인에 의존하는 통제이며, 그 한계를 그대로 밝힙니다.
VerbalChart가 생성하는 것은 초안이며, 최종 검토와 책임은 의료인에게 있습니다. 자세한 내용은 책임 한계 고지를 확인해 주세요.
10. 현재 상태에 대한 고지
- ISMS-P 인증을 취득한 상태가 아닙니다. 해당 심사 기준에 따라 자체 코드 검토를 수행하고 개선을 진행하고 있습니다.
- HIPAA는 미국 법으로 국내 서비스에 적용되지 않습니다. 국내 「의료법」과 「개인정보 보호법」을 기준으로 합니다.