우리 서버가 값을 볼 수 없는 이유

짧게: 값을 여는 열쇠가 우리 서버에 아예 없습니다.

값이 지나가는 길

여러분이 입력한 값은 브라우저 안에서 요청한 사람의 1회용 공개키로 봉인됩니다 (libsodium sealed box · X25519). 우리 서버로 나가는 것은 그 암호문뿐이고, 그것을 풀 개인키는 요청한 사람의 노트북 키체인에만 있습니다. 봉인한 브라우저조차 자기가 봉인한 것을 다시 열 수 없습니다.

서버는 받은 암호문을 저장하기 전에 AWS KMS 로 한 번 더 감쌉니다. 데이터베이스 덤프가 통째로 새도 그 안에는 암호문조차 보이지 않습니다.

요청한 사람이 값을 자기 금고에 넣고 나면 우리는 암호문을 지웁니다. 만료(최대 24시간)가 오면 마찬가지입니다. 그 순간 이후 그 값을 풀 조합은 세상에 남지 않습니다.

링크만으로는 열리지 않습니다

링크를 주운 사람이 값을 넣거나 볼 수 없도록, 메일로 오는 6자리 코드를 먼저 확인합니다. 코드를 확인하기 전에는 어떤 키를 요청했는지도 보여 드리지 않습니다 — 링크가 단톡방에 잘못 붙었을 때 키 이름 자체가 정보가 되기 때문입니다.

링크 끝의 #fp=… 조각은 브라우저가 서버로 보내지 않는 부분입니다. 이 값으로 「서버가 준 공개키가 정말 요청자의 것인지」를 여러분 브라우저가 대조합니다. 다르면 화면이 멈춥니다.

정직하게 — 우리가 막지 못하는 것

못 막는 것
키 이름·프로젝트·주고받은 사람·시각우리 서버가 봅니다. 감사·회수·알림에 필요해서 일부러 그렇게 두었습니다. 값은 보지 않습니다.
우리가 이 페이지의 코드를 악의적으로 바꾸는 경우웹 브라우저로 참여하는 1회성 상대는 이 코드를 신뢰할 수밖에 없습니다. 이것이 설치 없이 쓰는 방식의 근본 한계입니다. 반복해서 주고받는 상대에게는 설치형(okey)을 권합니다 — 설치형끼리는 이 신뢰가 필요 없습니다.
값을 받은 사람이 다시 어딘가에 붙여넣는 것기술로 막을 수 없습니다. 남는 것은 기록과 빠른 교체입니다.
이 도메인을 흉내 낸 피싱 사이트O'Key 링크는 항상 이 도메인 하나뿐이고, 메일 본문에 값을 절대 넣지 않습니다.

남기는 기록

언제 누가 열었고 넣었고 적용했는지는 남깁니다. 값·값의 일부·값의 길이는 남기지 않습니다. 충분히 무작위한 값에 한해 8바이트 지문만 남겨 「보낸 것과 적용된 것이 같은지」를 대조할 수 있게 합니다.