Sésame Éclair
하나의 비밀, 한 번의 열람, 흔적 제로: 키는 절대 링크를 떠나지 않고, 서버는 읽을 수 없는 블록만 보관합니다.
- 연도
- 2026
- 기술 스택
- Next.js · React · TypeScript · WebCrypto · WebAssembly · PostgreSQL
- 프로덕트 디자인
- 응용 암호학
- 웹 개발
- 애플리케이션 보안
- 접근성
- 다국어 SEO

- 계정 없이, 광고 없이
- 0 €
- 링크의 키, 서버로 절대 전송되지 않음
- 256비트
- 1회 열람 비밀 정보에서 수락되는 동시 열람Postgres를 대상으로 한 자동화 테스트.
- 100건 중 1건
- 개 사이트 언어
- 7
해결해야 했던 과제.
배경
Sésame Éclair는 KAYZEN이 리옹에서 만들어 제공하는, 한 번만 읽을 수 있는 비밀 정보 무료 공유 서비스입니다. 비밀번호나 키를 붙여 넣으면 종단 간 암호화된 링크가 만들어지며, 이 링크는 열람 후 또는 선택한 만료 시점에 사라집니다. KAYZEN의 비밀번호 관리자 Sésame의 자매 제품으로, Sésame은 오래 남아야 할 것을 지키고 Éclair는 사라져야 할 것을 전달합니다. 소프트웨어는 무료이지만 독점 소프트웨어입니다. 현재 공개된 것은 7개 언어를 지원하는 웹 애플리케이션뿐이며, 확장 프로그램, 데스크톱 및 모바일 앱, 명령줄 도구는 개발되었지만 아직 공개되지 않았습니다.
제약
이메일이나 Slack으로 보낸 비밀번호는 결코 완전히 사라지지 않습니다. 기록, 백업, 검색 색인에 남아, 언젠가 그 메일함에 접근하는 사람이라면 누구나 읽을 수 있습니다. 일회용 링크 서비스는 이미 있지만 일부는 자체 서버에서 암호화하며, 예를 들어 2026년 10월 6일에 확인한 Onetime Secret 페이지가 이를 명시하고 있습니다. 또한 많은 서비스가 파일, 비밀 정보 요청, 사용자 지정 도메인을 유료 요금제에서만 제공합니다. 무료이고 계정이 필요 없으며, 제공업체를 신뢰하지 않더라도 기밀성이 유지되는 서비스가 필요했습니다.
해법
키는 절대 링크를 떠나지 않습니다. 브라우저가 256비트 무작위 키를 생성해 비밀 정보를 암호화한 뒤, 이 키를 주소의 # 기호 뒤에 둡니다. 이 부분은 브라우저가 서버로 절대 보내지 않는 부분입니다. 서버는 암호화된 블록과 몇 가지 날짜만 저장하며, 이를 한 번만 전달한 뒤 같은 작업 안에서 삭제합니다. 나머지는 모두 이 규칙에서 나옵니다. 링크 페이지에는 비밀 정보가 절대 담기지 않고, 서버는 PIN 코드를 시험해 볼 수 없으며, 이 장치의 모든 한계는 숨기지 않고 사이트에 적어 두었습니다.
납품 시점에 측정한 점수.
운영 중인 사이트의 Lighthouse 점수입니다. 있는 그대로 공개합니다. 낮은 점수가 있으면 그 원인과 개선 계획을 아래에 적어 두었으며, 감추지 않습니다.
모든 선택에는 이유가 있습니다.
Sésame 패밀리, 브랜드를 위한 하나의 강조색
제목에는 네이비 #1F3B61, 주요 동작에는 테라코타 #B7481F를 사용합니다. kayzen-lyon.com과 Sésame의 디자인 가이드입니다. “번개” 앰버 #F2C14E는 로고타입 전용입니다. 시스템 설정과 관계없이 기본적으로 라이트 테마가 표시되며, 다크 테마는 사용자가 선택하고 그 선택이 기억됩니다.
양식이 곧 첫 화면
이 사이트에 오는 이유는 소개를 읽기 위해서가 아니라 비밀 정보를 보내기 위해서입니다. 그래서 입력 영역이 히어로를 차지합니다. 옵션은 접혀 있지만 “1회 열람 · 24시간 후 만료 · 코드 없음”이라는 읽기 쉬운 한 줄로 요약되어 있으며, 열람 횟수, 만료 시점, 보호, 수신자를 바꿀 때만 펼치면 됩니다.
아직 없는 것은 없다고 표시합니다
“기능” 페이지는 각 기능을 “사용 가능” 또는 “예정”으로 분류합니다. “다운로드” 페이지는 확장 프로그램, Windows, macOS, 명령줄, Android, iPhone을 “곧 출시”로 표시하고 웹 애플리케이션으로 안내합니다. 보안 제품에서 없는 기능을 내세우면 얻는 신뢰보다 잃는 신뢰가 더 큽니다.
읽기를 방해하지 않는 움직임
또렷한 애니메이션 곡선, 누르면 살짝 눌리는 버튼, 마우스에서만 작동하는 호버 효과, 스크롤할 때 순수 CSS로 자리 잡는 카드를 사용하며, 대비를 낮추지 않도록 페이드는 쓰지 않습니다. 시스템이 애니메이션 줄이기를 요청하면 모두 비활성화됩니다.
프로젝트 색상 팔레트
잉크
#1F2937
텍스트
네이비
#1F3B61
제목
테라코타
#B7481F
주요 행동 유도
번개 앰버
#F2C14E
로고타입
그린
#1F6B48
확인
타이포그래피 체계
제목용 서체
Outfit 800
본문용 서체
Plus Jakarta Sans 400
kayzen-lyon.com의 서체 패밀리를 가변 폰트 버전으로 자체 도메인에서 제공합니다. 보안 정책상 외부 폰트는 일절 허용되지 않습니다.
보이지 않는 곳의 기술.
- Next.js
- React
- TypeScript
- WebCrypto
- WebAssembly
- PostgreSQL
AES-256-GCM, 키는 프래그먼트에
콘텐츠는 WebCrypto를 통해 AES-256-GCM으로 암호화되며, 96비트 무작위 초기화 벡터와 비밀 정보의 식별자에 연결된 연관 데이터를 사용합니다. 키는 HKDF-SHA-256으로 파생합니다. 암호화 전에 콘텐츠를 단계별 크기(1, 4, 16, 64 KiB…)로 패딩해 서버가 실제 길이를 알 수 없게 합니다. 형식은 테스트 벡터와 함께 “형식 v1” 페이지에 공개되어 있습니다.
서버가 시험해 볼 수 없는 PIN 코드
코드는 Argon2id(64 MiB, 3회 반복)를 거치며, WebAssembly로 실행되고 코드를 요청한 경우에만 로드됩니다. 서버로 보내는 검증값은 코드와 링크의 키로 계산되므로, 이 키가 없으면 서버는 코드를 검증할 수도, 시도해 볼 수도 없습니다. 서버는 오류 횟수를 세고 다섯 번째 시도에서 비밀 정보를 파기합니다. 이 한계는 “보안” 페이지에 적혀 있습니다. 링크와 데이터베이스 사본을 모두 가진 사람은 짧은 코드를 오프라인에서 해독할 수 있습니다.
단 한 번의 열람, 100건이 동시에 와도
GET으로 가져오는 링크 페이지에는 암호문이 절대 포함되지 않으며, 암호문은 “표시”를 클릭한 뒤 POST 요청으로만 전달됩니다. 따라서 Slack, Teams, Outlook의 미리 보기 봇이 열람 횟수를 소진하지 않습니다. 전달과 삭제는 단 하나의 SQL 쿼리로 이루어지며, 한 테스트는 1회 열람 비밀 정보에 100건의 표시 요청을 동시에 보내 그중 하나만 수락되는지 확인합니다. 알 수 없는 링크, 만료된 링크, 이미 열람된 링크, 파기된 링크 모두 같은 응답을 받습니다.
서드파티 스크립트 없음, 닫힌 정책
Content-Security-Policy는 요청마다 nonce를 사용하며, 스크립트에 unsafe-inline도 unsafe-eval도 허용하지 않습니다. 허용되는 것은 Argon2id를 위한 wasm-unsafe-eval뿐입니다. connect-src는 자체 도메인으로 제한하고, frame-ancestors는 none, HSTS는 2년에 preload 적용, Referrer-Policy는 no-referrer입니다. 그 대가는 감수하고 문서화했습니다. 페이지는 정적으로 생성되지 않고 요청할 때마다 렌더링됩니다.
유럽연합에서 호스팅, 데이터베이스에 IP 주소 없음
애플리케이션은 파리의 Vercel에서 실행되고, Postgres 데이터베이스는 프랑크푸르트의 Neon에 있습니다. IP 주소를 담은 열은 하나도 없습니다. 속도 제한은 매일 바뀌는 비가역적 지문에 기반합니다. 데이터 접근은 Drizzle과 표준 Postgres를 거치므로 호스팅 업체를 교체할 수 있습니다.
하나의 암호화 코어, 준비 중인 여러 클라이언트
모든 암호화는 결정론적 벡터로 테스트되는 단일 모듈 packages/crypto에 들어 있습니다. 코드상으로는 이 모듈이 이미 Manifest V3 확장 프로그램, Electron 데스크톱 앱, Android와 iOS용 Capacitor 앱, MCP 서버를 갖춘 명령줄 도구를 지원합니다. 현재 공개된 것은 하나도 없으며, 사이트에서는 출시 예정으로 소개합니다.
사이트가 검색되는 방식.
검색 의도마다 하나의 페이지
비교 글 5편(Onetime Secret, Password Pusher, scrt.link, Bitwarden Send, Password.link), 활용 사례 페이지 4개(에이전시, DevOps, IT 지원, 개인), 브라우저에서 실행되는 무료 도구 2개(비밀번호 생성기, 강도 검사기), 그리고 블로그가 있습니다. 각 비교 글에는 조사 날짜, 출처, 그리고 “오류가 있나요? 알려 주세요”라는 한 줄이 들어 있습니다.
서로 연결된 7개 언어
프랑스어는 루트에, 영어, 독일어, 스페인어, 이탈리아어, 포르투갈어, 네덜란드어는 각자의 접두사 아래에 있습니다. 각 페이지는 hreflang으로 대응 페이지를 선언하고 x-default도 지정하며, 사이트맵에 모두 등록되어 있습니다. 기계 번역은 “검토 중”으로 표시하며, 법률 문서는 프랑스어판만 효력을 가집니다.
FAQPage, SoftwareApplication, llms.txt
FAQ에는 FAQPage 마크업을 적용하고, 제품은 가격 0 €의 SoftwareApplication으로 선언합니다. llms.txt 파일은 서비스가 보장하는 것뿐 아니라 그 한계, 즉 외부 감사를 받지 않았다는 점, 독점 소프트웨어라는 점, 앱이 아직 제공되지 않는다는 점도 AI 어시스턴트에게 알려 줍니다.
누구나 사용할 수 있도록.
2025년 6월부터 유럽 접근성법(European Accessibility Act)에 따라 상당수 온라인 서비스에 디지털 접근성이 의무화되었습니다. 저희는 사후 보완이 아니라 설계 단계에서부터 접근성을 다룹니다.
44개 페이지에서 WCAG 2.2 AA 검증
종단 간 테스트는 여러 언어로 된 44개 페이지와, 라이트 테마 및 다크 테마의 홈페이지에서 WCAG 2.0, 2.1, 2.2 AA 수준의 axe-core 검사를 통과합니다. 키보드 탐색, 보이는 포커스, 건너뛰기 링크는 접근성 선언문에 명시되어 있습니다.
테스트로 검증한 명암비
색상 토큰의 조합마다 최소 명암비를 정해 자동으로 검사합니다. 밝은 배경 위의 본문과 제목은 AAA 수준인 7:1, 보조 텍스트, 강조 링크, 상태 메시지는 두 테마 모두에서 4.5:1입니다.
과장하지 않는 선언문
독립 기관의 RGAA 감사를 받지 않았기 때문에, 접근성 선언문은 사이트가 준수하도록 설계되었음에도 해당 기준상 “미준수”라고 밝힙니다. 증거 없이는 주장하지 않는다는 제품의 원칙을 접근성에도 적용한 것입니다.
납품한 결과물.
- 홈 — 비밀 정보 만들기, 세 단계, 간단 비교
- 기능 — 기능별로 “사용 가능” 또는 “예정”
- 보안 — 기본 요소, 위협, 한계, 형식 v1과 테스트 벡터
- 서버가 보는 것 — 실제 요청을 실시간으로 표시
- 비밀 정보 요청 — 요청자만 읽을 수 있는 암호화된 제출 링크
- 비교, 활용 사례, FAQ, 요금, 블로그, 도구
- 서비스 상태, 투명성, 새 소식, 로드맵
- 법적 고지, 이용약관, 개인정보 처리방침, 접근성, 신고
프로젝트 진행 과정.
기반
모노레포, 정적 분석을 포함한 지속적 통합, 암호화 모듈과 테스트 벡터를 갖춘 형식 v1, 디자인 토큰, 아키텍처 결정과 위협 모델.
서버와 애플리케이션
Postgres 데이터베이스, 원자적 표시 처리, 시도 5회 제한 PIN 코드, 추적 링크, 예약 삭제, nonce 기반 보안 정책. 생성·표시·추적 화면.
공개 사이트
기능, 보안, 날짜를 명시한 비교, FAQ, 활용 사례, 도구, 법적 고지 페이지, “서버가 보는 것”, 서비스 상태와 투명성.
출시
실제 호스팅 명시(애플리케이션은 파리, 데이터베이스는 프랑크푸르트), 7개 언어, 변경할 때마다 점검하는 성능 예산, kayzen-lyon.com에 맞춘 레이아웃.
기타 플랫폼
확장 프로그램, 데스크톱, 모바일, 명령줄을 같은 코어로 개발. 스토어 출시는 대기 중. 외부 감사는 1.0 버전 이전에 예정.


