설치와 권한
- 내려받은 CopyBuffer.app을 응용 프로그램 폴더로 옮기고 실행합니다. 메뉴 막대에 클립보드 아이콘이 생깁니다.
- 아무 앱에서나 ⌘⇧V를 누르고 항목을 고르면, 처음 한 번 손쉬운 사용 권한을 묻습니다. 시스템 설정 ▸ 개인정보 보호 및 보안 ▸ 손쉬운 사용에서 CopyBuffer를 켜 주세요.
- 로그인할 때 자동으로 켜려면 메뉴 막대 아이콘 ▸ 설정 ▸ 일반 ▸ 로그인할 때 자동으로 켜기.
손쉬운 사용 권한이 하는 일: 고른 항목을 원래 앱에 바로 붙여넣기(⌘V 입력), 목록을 텍스트 커서 바로 아래에 띄우기, ⌃⌘C로 고른 글자 읽기, 브라우저의 현재 주소 읽기(맞는 비밀번호를 먼저 보여주려고). 허용하지 않아도 고른 항목이 클립보드에 복사되므로 직접 ⌘V 하면 됩니다. 권한은 한 번만 묻습니다.
앱 화면은 macOS 언어 설정(시스템 설정 ▸ 일반 ▸ 언어 및 지역)을 따르며, 영어, 한국어, 일본어, 중국어 간체, 중국어 번체, 스페인어, 독일어, 프랑스어, 힌디어로 쓸 수 있습니다.
패널 기본
⌘⇧V를 누르면 텍스트 커서 아래에 패널이 뜹니다. 바로 타이핑하면 검색되고, 공백으로 여러 단어를 넣으면 모두 들어간 항목만 남습니다(파일 이름·경로, 이미지 속 글자도 검색).
| 동작 | 키 |
|---|---|
| 클립보드 → 문구 → 비밀번호 탭 전환 | ⇥ / 거꾸로 ⇧⇥ |
| 클립보드 안에서 전체 · 글 · 이미지 · 파일 탭 바꾸기 | ← → (검색창이 비어 있을 때) 또는 ⌥1 – ⌥4 |
| 위아래 이동 | ↑ ↓ (⌃P ⌃N), Page Up/Down |
| 닫기 | esc 또는 바깥 클릭 |
평소의 ⌘V는 그대로 마지막 복사 내용을 붙여넣습니다. 목록에서 붙여넣는 텍스트는 서식이 없어서, ⌘⇧V → ↩가 곧 macOS의 "붙여넣고 스타일 일치"와 같습니다. 지금 클립보드를 바로 서식 없이 붙이려면 아무 앱에서나 ⌥⇧⌘V를 누르세요(메뉴 막대 메뉴의 서식 없이 붙여넣기, 붙인 1초 뒤 클립보드는 원래 내용으로 돌아갑니다).
클립보드 단축키
클립보드 기록은 전체 · 글 · 이미지 · 파일 탭으로 나뉩니다. 탭마다 지금 검색어로 찾은 개수가 표시되고, 마지막으로 고른 탭을 기억합니다.
| 동작 | 키 |
|---|---|
| 붙여넣기 | ↩ 또는 더블클릭 |
| 경로 / 서식 없는 텍스트로 붙여넣기 | ⌥↩ |
| 목록의 1~9번째 바로 붙여넣기 | ⌘1 – ⌘9 |
| 변환해서 붙여넣기 | ⌘T |
| 여러 개 표시 / 표시 해제 | ⌘↩ |
| 표시한 것 합쳐서 붙여넣기 | ⇧↩ |
| 자주 쓰는 문구로 저장 | ⌘S |
| 이미지·파일 열기 | ⌘O |
| 고정 (기록 개수 제한에서 빠짐) | ⌘P |
| 삭제 | ⌘⌫ |
종류별 저장 방식
| 복사한 것 | 저장 | 붙여넣기 (↩) |
|---|---|---|
| 텍스트 | 내용 (1MB까지) | 서식 없는 텍스트 |
| 이미지 | 원본 + 미리보기, 암호화. 글자·QR 내용은 검색용으로 읽어 둠 | 작은 이미지는 그대로, 큰 이미지(기본 10MB 초과)는 파일로 |
| 파일 (Finder ⌘C) | 경로만 (내용은 복사하지 않음) | 파일 그대로, 텍스트 칸에는 경로 |
같은 내용을 다시 복사하면 중복 없이 맨 위로 올라갑니다. 이미지는 내용 해시로 비교합니다.
변환해서 붙여넣기
항목을 고르고 ⌘T를 누르면 결과 미리보기와 함께 변환 목록이 뜹니다. 그 항목에 적용할 수 없거나(JSON이 아닌데 JSON 정리 등) 바뀌는 게 없는 변환은 보이지 않습니다.
| 변환 | 예 |
|---|---|
| 그대로 (서식 없이) | — |
| 공백·빈 줄 정리 / 한 줄로 합치기 | 여러 줄 로그를 한 줄로 |
| JSON 보기 좋게 / JSON 한 줄로 | API 응답 정리, 설정 파일에 넣기 |
| URL 추적 파라미터 제거 | ?utm_source=…&fbclid=… 제거 |
| 대문자로 / 소문자로 / 단어 첫 글자만 대문자 | 상수 이름, 제목 |
| 줄 정렬 / 중복 줄 제거 | 목록 정리 |
| URL 인코딩 / URL 디코딩 | 쿼리 문자열 |
| Base64 인코딩 / Base64 디코딩 | 토큰·헤더 확인 |
차례로 붙여넣기
- 목록에서 붙여넣을 항목들을 ⌘↩로 차례로 표시합니다 (번호가 붙음).
- ↩를 누르면 첫 번째가 붙고, 나머지는 대기열에 들어갑니다. 메뉴 막대 아이콘 옆에 남은 개수가 보입니다.
- 다음 입력칸으로 옮겨 ⌃⌘V를 누를 때마다 다음 항목이 붙습니다.
한 번에 합쳐 붙이려면 표시한 뒤 ⇧↩. 대기열은 메뉴 막대 메뉴 ▸ 차례로 붙여넣기 취소로 비웁니다. ⌃⌘V는 대기열이 있을 때만 잡으므로 다른 앱 단축키를 방해하지 않습니다.
자주 쓰는 문구
패널에서 ⇥로 문구 탭으로 바꾸거나, 메뉴 막대 메뉴 ▸ 자주 쓰는 문구(설정의 문구 탭이 열림)에서 관리합니다. 클립보드 기록에서 ⌘S로 바로 저장할 수도 있습니다.
| 동작 | 키 |
|---|---|
| 붙여넣기 | ↩, ⌘1 – ⌘9 |
| 새로 만들기 / 편집 | ⌘N / ⌘E |
약어(예: ;addr)를 붙여 두면 검색할 때 약어 정확히 일치 → 약어 앞부분 일치 → 단어 일치 순으로 위에 뜹니다. 붙여넣는 순간의 값으로 바뀌는 자리표시자:
| 자리표시자 | 바뀌는 값 |
|---|---|
{date} | 오늘 날짜 |
{time} | 지금 시각 |
{datetime} | 날짜와 시각 |
{weekday} | 요일 |
{clipboard} | 지금 클립보드의 텍스트 |
비밀번호 보관함
처음엔 메뉴 막대 메뉴에서 비밀번호 보관함을 고르고(또는 패널의 비밀번호 탭에서 ↩) 보관함 만들기를 누릅니다. 마스터 비밀번호(10자 이상)를 정하면 복구 키를 한 번만 보여줍니다. 복구 키는 마스터 비밀번호를 잊었거나 Mac을 바꾸거나 macOS를 다시 설치했을 때 보관함을 여는 유일한 방법이니 안전한 곳에 적어 두세요.
| 동작 (패널에서 ⇥로 비밀번호 탭) | 키 |
|---|---|
| 열기 | 마스터 비밀번호 → ↩ → Touch ID |
| 비밀번호 / 아이디 / 인증 코드 붙여넣기 | ↩ / ⇧↩ / ⌥↩ |
| 비밀번호 / 아이디 / 인증 코드 복사 (20초 뒤 자동 삭제) | ⌘C / ⌘⇧C / ⌘⌥C |
| 비밀번호 보기 | ⌘R |
| 편집 / 새 항목 / 잠그기 | ⌘E / ⌘N / ⌘L |
| 고른 글자를 보관함에 넣기 (아무 앱에서나) | ⌃⌘C |
고른 글자를 바로 보관함에 (⌃⌘C)
API 키나 비밀번호를 고르고 ⌃⌘C를 누르면(메뉴 막대 메뉴의 고른 글자를 보관함에 넣기도 같음) 보관함 새 항목으로 열립니다. 확인하고 ⌘S로 저장하세요. 고른 글자는 클립보드를 거치지 않고 읽고, 고른 게 없으면 방금 복사한 글자를 쓴 뒤 클립보드와 복사 기록에서 지웁니다(웹 콘솔의 '복사' 버튼 → ⌃⌘C). OPENAI_API_KEY=sk-… 같은 .env 한 줄은 환경변수 이름까지, otpauth://는 2단계 인증 (OTP)으로, 여러 줄은 메모로 들어갑니다.
지금 보고 있는 사이트 먼저, 피싱 경고
Safari, Chrome, Arc, Edge, Brave, Firefox, Whale, Vivaldi, Opera에서 패널을 열면 현재 주소와 맞는 항목(하위 도메인 포함)이 맨 위에 옵니다. 다른 사이트에 저장한 비밀번호를 붙여넣으려 하면 경고가 뜨고, 8초 안에 ↩를 한 번 더 눌러야 붙습니다. 이 일은 접근 기록에도 남습니다.
2단계 인증 (OTP)
항목 편집의 2단계 인증 (OTP)에서 비밀키에 Base32 비밀키나 otpauth:// 주소를 넣거나, QR 이미지로 클립보드의 이미지나 파일에서 QR 코드를 읽습니다. 6~8자리, SHA1·SHA256·SHA512를 지원합니다. 패널에서 ⌥↩로 지금 인증 코드를 붙여넣습니다.
비밀번호 점검과 유출 검사
보관함 창의 보안 탭 ▸ 비밀번호 점검에서 약한 비밀번호, 다시 쓴 비밀번호, 1년 넘게 안 바꾼 비밀번호, 빈 비밀번호, 유출된 비밀번호를 보여줍니다. 유출 검사 (Have I Been Pwned) 옆의 검사를 누르면 Have I Been Pwned에 비밀번호 SHA-1 해시의 앞 5자만 보내(k-익명성, 응답 패딩 요청) 알려진 유출 목록에 있는지 확인합니다. 비밀번호 자체나 전체 해시는 보내지 않습니다.
암호화 백업
보관함 창의 보안 탭 ▸ 백업에서 내보내기를 누릅니다. 마스터 비밀번호를 한 번 더 확인하고, 따로 정한 백업 비밀번호로 암호화한 파일을 만듭니다. 백업 파일은 이 Mac에 결합되지 않아 다른 Mac에서도 가져올 수 있습니다. 가져오기는 같은 항목이 있으면 더 최근에 고친 쪽을 남깁니다.
자동 잠금
5분 동안 안 쓰면, 잠자기·화면 잠금·사용자 전환·앱 종료 때 잠깁니다.
터미널 환경변수 (cbvault)
개발할 때 API 키를 .env 파일에 평문으로 두지 않고, 필요할 때 보관함에서 Touch ID로 꺼내 씁니다.
- 보관함 항목 편집 화면의 터미널 환경변수에 이름(예:
OPENAI_API_KEY)을 적습니다. 영문자·숫자·밑줄만, 숫자로 시작할 수 없습니다. 값은 그 항목의 비밀번호입니다. - 설정 ▸ 터미널 ▸ 설치.
~/.local/bin/cbvault가 앱 안의 명령을 가리킵니다. PATH에 없다면~/.zshrc에export PATH="$HOME/.local/bin:$PATH"를 추가하세요.
# 그 명령에만 넣어 실행 — 가장 안전 $ cbvault run OPENAI_API_KEY STRIPE_KEY -- npm run dev # 지금 셸에 등록 / 값만 출력 / 등록된 이름 $ eval "$(cbvault export OPENAI_API_KEY)" $ cbvault get OPENAI_API_KEY $ cbvault list # ~/.zshrc 에 넣으면 cbload / cbunload 함수가 생긴다 $ eval "$(cbvault shell-init)" $ cbload OPENAI_API_KEY 불러옴: OPENAI_API_KEY $ cbunload OPENAI_API_KEY
- 값을 줄 때마다 Touch ID(또는 Mac 로그인 암호)로 허락합니다. 같은 터미널에서 같은 이름 요청은 5분 동안 다시 묻지 않고, 보관함을 잠그면 바로 취소됩니다.
- 보관함이 잠겨 있으면 잠금 해제 창을 띄우고 2분까지 기다립니다.
- 화면을 녹화하거나 공유하는 중에는 잠긴 보관함을 열지 않고,
cbvault get·cbvault export를 파이프 없이 실행해 값이 화면에 그대로 나오는 요청도 거절합니다.cbvault run과eval "$(cbvault export …)"는 그대로 됩니다. - 앱은 본인만 접근할 수 있는 소켓(
agent.sock, 0600)으로만 요청을 받고, 연결한 프로세스가 같은 사용자이며 앱과 같은 인증서로 서명된cbvault인지 커널 감사 토큰으로 확인합니다. 복사하거나 고친 실행 파일은 거부됩니다. - 허락 창과 접근 기록에 요청한 프로세스 경로와 작업 폴더가 남습니다.
export·cbload로 셸에 등록한 값은 그 셸에서 실행하는 모든 프로그램이 볼 수 있습니다. 가능하면 cbvault run을 쓰세요.
설정과 기록 제외
메뉴 막대 아이콘 ▸ 설정… (⌘,)
| 탭 | 내용 |
|---|---|
| 일반 | 기록: 기록 상태와 일시정지, 기록 개수(기본 최대 500개 (고정 항목 제외)), 이미지 속 글자 인식(한국어·영어·일본어·중국어, 이 Mac 안에서만 처리). 이미지: 큰 이미지 기준(10MB 보다 큰 이미지는 붙여넣을 때 파일로)·이미지 저장 공간(기본 최대 1,024MB). 앱: 로그인할 때 자동으로 켜기, 자동 붙여넣기(손쉬운 사용 권한) |
| 제외할 앱 | 이 앱에서 복사한 것은 기록하지 않음. 기본: 키체인 접근, 암호, 1Password, Bitwarden, KeePassXC, Proton Pass. 앱 추가(Finder에서 고르기)나 실행 중인 앱에서로 추가 |
| 보안 | 클립보드 기록 암호화: 기록·이미지·문구를 암호화해서 저장 켜기/끄기와 상태. 항상 적용에 늘 켜져 있는 보호 항목 |
| 문구 | 자주 쓰는 문구 편집 |
| 터미널 | cbvault 명령(설치), 쓰는 법, 등록된 환경변수 |
| 라이선스 | 남은 무료 체험 일수와 구매하기, 라이선스 키 입력, 이 Mac 에서 등록 해제. Lemon Squeezy 키는 라이선스 서버에서 한 번 확인(키만 보냄)한 뒤 앱 안에서 오프라인으로 확인 |
메뉴 막대 메뉴에서도 바로: 기록 일시정지(15분 / 1시간 / 다시 켤 때까지, 일시정지 중에는 그 자리에 기록 다시 시작), 다음 복사 한 번 기록 안 함, 앞에 있는 앱에 대한 ‘…’ 에서 복사는 기록 안 하기. 비밀번호 관리자가 ‘숨김’으로 표시한 복사는 설정과 관계없이 저장하지 않습니다.
다른 단축키 도구(Karabiner, Hammerspoon 등)에서 패널을 열려면 분산 알림 local.copybuffer.toggle(클립보드), local.copybuffer.snippets(문구), local.copybuffer.vault(비밀번호)를 보내면 됩니다.
데이터 위치·지우기
모든 데이터는 ~/Library/Application Support/CopyBuffer/에 있습니다. 폴더는 0700, 파일은 0600(본인만 읽기)입니다. 제외할 앱·기록 개수 같은 설정은 따로 ~/Library/Preferences/local.copybuffer.CopyBuffer.plist에 있습니다.
| 파일 | 내용 |
|---|---|
history.json | 클립보드 기록 (암호화) |
history-key.json | 기록 키 — Secure Enclave 키로 감싼 상태 |
snippets.json | 자주 쓰는 문구 (암호화) |
images/ | 이미지 원본·미리보기 (암호화) |
vault.json | 비밀번호 보관함 (암호화) |
vault-failures.json | 잠긴 동안 실패한 시도 시각 (비밀 없음) |
license.txt | 라이선스 키 (입력했을 때) |
agent.sock | cbvault 연결용 (앱 실행 중에만) |
기록 지우기: 메뉴 막대 메뉴 ▸ 복사 기록 지우기 (고정 항목 제외), 또는 패널에서 ⌘⌫로 하나씩. 앱을 완전히 지우려면 앱을 휴지통으로 옮기고 위 폴더를 지웁니다.
보안 설계
클립보드 기록·문구·이미지
- AES-256-GCM으로 암호화. 파일마다 용도를 인증 데이터(AAD)로 묶어 다른 파일과 바꿔치면 열리지 않습니다.
- 키는 이 Mac의 Secure Enclave 키(밖으로 꺼낼 수 없음)로 감싸
history-key.json에 둡니다. Touch ID를 묻지 않고, 다른 Mac에서는 열 수 없습니다. - 키를 쓸 수 없는 상황(화면이 잠긴 채 앱이 켜진 경우 등)에는 디스크에 아무것도 쓰지 않습니다. 복사한 글은 메모리에만 두고, 이미지는 기록하지 않습니다. 잠금이 풀리면 다시 시도해 기존 기록을 열고, 그동안 복사한 것을 합칩니다.
- 붙여넣기·열기를 위해 잠깐 풀어둔 이미지는 임시 폴더(0600)에 두고 30분 뒤, 그리고 앱을 켜고 끌 때 지웁니다.
비밀번호 보관함
- 키 구조: 무작위 256비트 데이터 키로 항목과 접근 기록 전체를 AES-256-GCM 암호화. 데이터 키는
HKDF(PBKDF2-SHA256(마스터 비밀번호, 300만 회) ‖ 기기 비밀)로 감쌉니다. - 기기 결합: 기기 비밀은 Secure Enclave 안의 P-256 키로 ECDH 해서만 얻습니다. 보관함 파일을 복사해 가도 다른 기기에서는 비밀번호 대입 공격 자체가 불가능합니다.
- Touch ID: Secure Enclave 키를 쓸 때마다 본인 확인.
- 메모리 안 봉인: 열려 있는 동안에도 각 항목의 비밀번호·메모·OTP 비밀키는 별도 키로 다시 암호화된 채로 있다가, 보거나 붙여넣는 순간에만 풀립니다.
- 변조 방지: KDF 설정·기기 정보·항목 ID를 인증 데이터로 묶어, 반복 횟수를 낮추거나 항목을 바꿔치는 조작은 열리지 않습니다.
- 시도 제한: 연속 5회 실패부터 30초 대기, 실패할수록 2배(최대 1시간). 앱을 다시 켜도 유지됩니다.
- 접근 기록: 열기·잠그기·실패·복구 키 사용·보기·복사·붙여넣기(어느 앱에)·인증 코드·사이트 불일치 붙여넣기·항목 추가/수정/삭제·마스터 비밀번호 변경·백업·유출 검사·환경변수 제공/거부. 보관함과 함께 암호화되어 마스터 비밀번호 없이 고치거나 지울 수 없습니다.
- 클립보드: 비밀번호에는 기록 제외 표시(ConcealedType)를 붙여 이를 따르는 클립보드 앱에 남지 않게 하고, 붙여넣은 1초 뒤 원래 클립보드로 되돌립니다. 복사만 했으면 20초 뒤 지웁니다. 공통 클립보드로 아이폰·아이패드에 넘어가지 않도록 이 Mac에서만 쓰게 넣습니다.
- 화면: 패널의 비밀번호 탭과 보관함 창은 스크린샷·화면 녹화·화면 공유에 찍히지 않습니다. DisplayLink 같은 USB 모니터·가상 디스플레이는 화면을 캡처해서 보내는 방식이라, 그 위에서는 창이 보이도록 차단을 끄고 패널에 캡처 차단 꺼짐을 표시합니다. 화면 녹화·공유가 진행 중이면 비밀번호 탭과 보관함 창을 가리고 끝날 때까지 열지 않습니다. 마스터 비밀번호 입력칸은 보안 입력 모드입니다.
앱 프로세스
- 강화된 런타임(hardened runtime)으로 서명해 코드 주입을 막습니다.
- 크래시 때 메모리를 담은 코어 덤프를 만들지 않고, 디버거 연결을 거부합니다.
- 인터넷에 연결하는 것은 직접 요청할 때뿐입니다. 유출 검사의 검사 버튼을 누를 때, 그리고 라이선스 키를 등록할 때(그 키 하나만 라이선스 서버로 한 번 보냄)입니다. 클라우드·계정·분석 도구가 없습니다.
한계: 보관함이 열려 있는 동안에는 데이터 키가 앱 메모리에 있습니다(잠그면 지움). Swift 문자열은 메모리에서 확실히 지울 수 없습니다. 아직 외부 보안 감사를 받지 않았습니다.
문제 해결
골라도 붙여넣어지지 않고 복사만 돼요
손쉬운 사용 권한이 꺼져 있습니다. 시스템 설정 ▸ 개인정보 보호 및 보안 ▸ 손쉬운 사용에서 CopyBuffer를 켜 주세요(메뉴 막대 메뉴의 자동 붙여넣기 켜기 (손쉬운 사용 권한)를 누르면 그 화면이 열립니다). 그 전까지는 클립보드에 복사되니 ⌘V로 붙여넣으면 됩니다.
어떤 앱에서 복사한 게 기록되지 않아요
설정 ▸ 제외할 앱 목록에 있는지, 기록이 일시정지 중인지(메뉴 막대 아이콘이 일시정지 모양) 확인하세요. 비밀번호 관리자가 ‘숨김’으로 표시한 복사도 저장하지 않습니다.
cbvault: CopyBuffer 앱이 실행 중이 아니에요
앱을 먼저 실행하세요. 환경변수는 실행 중인 앱이 Touch ID 확인 뒤에만 줍니다.
cbvault: CopyBuffer 와 같은 서명의 cbvault 만 연결할 수 있어요
앱 밖으로 복사한 cbvault를 쓰고 있습니다. 복사본을 지우고 설정 ▸ 터미널 ▸ 설치로 앱 안의 명령을 가리키는 링크를 다시 만드세요(~/.local/bin/cbvault에 일반 파일이 있으면 덮어쓰지 않습니다).
패널이 텍스트 커서 아래가 아니라 마우스 포인터 근처에 떠요
앱이 텍스트 커서 위치를 알려주지 않는 경우입니다(일부 터미널·Electron 앱 등). 붙여넣기는 그대로 동작합니다.