KeyRotate — API 키를 교체하고, 쓰이던 모든 곳을 갱신합니다
Mac과 Windows에서 쓰는 개발자용 키 관리자입니다. Mac에서는 Touch ID로 보호되는 macOS 키체인에, Windows에서는 Windows Hello로 보호되며 Windows 계정에 묶여 암호화된 채로 키를 저장합니다. 키를 교체하면 그 키를 쓰던 모든 .env·설정 파일·앱을 갱신하며, 이전 키를 몰래 폐기하지 않습니다. 또한 AI 대화 로그, 저장소 기록, 웹 루트처럼 있어서는 안 될 곳에 키가 나타나면 알려 줍니다.
월 구독 · macOS 14 이상 · Windows 10·11 다운로드 ↓
지금도 유출되고 있는 API 키
28,650,0002025년 공개 GitHub에 올라간 모든 종류의 시크릿
AI 키만 약 25초에 1건꼴이며, 1년 새 81% 늘었습니다. 유출된 키를 되돌릴 수는 없지만, KeyRotate를 쓰면 새 키로 교체하고 그 키를 쓰던 파일을 갱신하는 일이 금방 끝납니다.
- 39M+ 2024년 GitHub 전체(공개·비공개 저장소 합계)에서 유출된 시크릿. GitHub 자체 집계입니다. GitHub
- 64% 2022년에 유효하다고 확인된 시크릿 가운데 2026년 1월 재검사에서도 여전히 작동한 비율. 유출된 키는 대부분 교체되지 않습니다. GitGuardian
- 24,008 2025년 공개 GitHub의 MCP 설정 파일에서 발견된 시크릿. 그중 2,117건은 유효한 자격 증명이었습니다. GitGuardian
- 2,863 공개 웹 페이지에 들어 있던 유효한 Google API 키 가운데, 프로젝트에서 Gemini를 켜면서 모르는 사이에 Gemini에 접근할 수 있게 된 키. Truffle Security
- 1,748 1,000만 개 웹사이트에서 발견된, 클라우드·결제를 포함한 14개 서비스의 유효한 키. 상당수가 몇 달에서 몇 년 동안 노출된 채였습니다. 스탠퍼드대·UC 데이비스(CCS ’26)
최신 유출 뉴스: KeyRotate가 사용자에게 경고한 사고와 대응 방법 →
두 카운터는 추정치입니다. GitGuardian은 2025년 공개 GitHub에 올라간 시크릿을 AI 서비스 분 1,275,105건, 전체 2,865만 건으로 집계했습니다. 카운터는 그 속도를 1월 1일부터 적용한 값이므로 실제 수치는 더 높을 수 있습니다. 출처: The State of Secrets Sprawl 2026
기능
제공업체가 허용하면 자동 교체
Cloudflare, Linode, Twilio, Perplexity, Fireworks, Resend은 API로 후속 키를 발급할 수 있습니다. KeyRotate는 새 키를 요청하고, 저장하기 전에 동작을 확인한 뒤 저장하고, 다시 확인합니다. 어느 단계에서든 실패하면 이전 키로 되돌립니다.
그 외에는 솔직하게
Anthropic, GitHub, Okta, Atlassian을 비롯한 대부분의 제공업체에는 키를 생성하는 API가 없습니다. 이는 제공업체의 방침이지 기능 부족이 아닙니다. KeyRotate는 그 이유와 함께 이를 알리고 발급 페이지로 바로 연결합니다. 새 키를 붙여 넣으면 이전 키를 대체하기 전에 확인합니다.
사용하던 파일을 모두 갱신
.env, wp-config.php, JSON(Claude Code의 settings.json 포함), YAML, TOML 또는 직접 정한 패턴. 변경될 줄을 정확히 보여 주고 확인한 부분만 갱신합니다. 쓰기는 원자적이며 파일 권한을 유지하고, 한 번의 클릭으로 되돌릴 수 있는 백업을 남깁니다.
암호화한 시크릿 파일도 그 자리에서 갱신
암호화해 커밋한 시크릿도 각 도구 없이 그 자리에서 갱신합니다. SOPS(age, AWS KMS, Google Cloud KMS, Azure Key Vault, HashiCorp Vault, 키 그룹), dotenvx, ejson, Ansible Vault, Kubernetes Sealed Secrets, Symfony 시크릿 볼트, Laravel의 암호화된 .env, dotenv-vault, Rails 자격 증명을 지원합니다. 다시 암호화하는 것은 그 값뿐이고 나머지 바이트는 그대로 두며, 복호화된 상태로 쓰는 일은 없습니다. dotenvx, ejson, Sealed Secrets, Symfony는 공개 키만으로 쓸 수 있습니다.
키를 기다리는 파일
새 프로젝트의 .env는 키가 하나도 없을 때부터 대상이 될 수 있습니다. FrontierStack이 프로젝트를 만들면 파일을 넘기고(폴더 허용은 한 번만), 키를 추가할 때까지 대상 화면에서 대기합니다. 추가한 키는 바로 들어갑니다(FrontierStack이 dotenvx를 설정했다면 암호화해서).
호스팅·CI에 바로 기록하고, 암호 관리자와는 양방향 동기화
교체한 키를 GitHub Actions 시크릿, Netlify·Vercel 환경 변수, Fly.io 시크릿, Supabase Edge Function 시크릿, Cloudflare Workers 시크릿에 바로 쓰고, 기록한 뒤에는 배포 후크나 GitHub 워크플로로 다시 배포할 수 있습니다. 시크릿 스토어와 암호 관리자와는 양방향입니다. “가져오기 ▸ 시크릿 스토어 또는 비밀번호 관리자에서…”는 1Password(Connect 서버 또는 도우미 스크립트를 통한 op), Bitwarden·Vaultwarden(bw serve), HashiCorp Vault, Doppler, Infisical, Passwordstate, AWS Secrets Manager·Parameter Store, Azure Key Vault·App Configuration, Google Cloud Secret Manager에 로그인해, 찾은 키를 스토어와 연결된 채로 가져옵니다. fnox, pass, gopass, Kubernetes Secret, KeePass 데이터베이스에도 작은 도우미 스크립트를 통해 기록하며, “가져오기 ▸ fnox.toml에서…”로 프로젝트의 fnox 시크릿을 가져올 수 있습니다. 다만 키가 평문으로 남는 프로바이더의 시크릿에는 fnox에 기록을 요청하지 않습니다. KeyRotate에서 교체하면 스토어에 새 값이 들어가고, 스토어에서 바뀌면 15분 안에 KeyRotate가 제공업체에서 확인한 뒤 가져와 그 키를 쓰는 모든 .env·설정 파일·서버·앱을 다시 씁니다(op는 1Password 서비스 계정이 있어야 합니다). 스토어는 원본을 보관하지만 .env 파일까지 갱신하지는 않습니다. KeyRotate는 갱신합니다. 교체하기 전에는 모든 대상에 연결되는지 확인합니다.
LINE, Telegram, Discord 등의 봇 토큰
LINE 채널 액세스 토큰은 자동으로 교체합니다. 채널의 어설션 서명 키로 서명해 30일짜리 새 토큰을 받고, 이전 토큰은 만료될 때까지 그대로 쓸 수 있게 둡니다. 폐기하지 않습니다. WhatsApp Business, Telegram·Discord·Viber 봇, Chatwork 토큰은 각 서비스에서 유효한지 확인하고, 작동이 멈추면 경고합니다. Brave Search 키는 이번 달 쿼리 한도 중 남은 양을, Apify 토큰은 이번 주기의 사용 금액을 요금제 상한과 함께 보여 줍니다.
다른 값은 읽지 않습니다
KeyRotate는 지정한 변수 이름과 일치하는 줄만 바꿉니다. 같은 파일에 있는 다른 시크릿을 해석하거나 표시하거나 전송하지 않습니다. 운영 환경의 .env를 가리켜도 안전한 이유가 바로 이것입니다.
클릭 한 번으로 계정 전환
같은 제공업체에 구독이나 조직이 여러 개 있습니까. 키를 계정으로 묶고 “업무”, “개인”, 고객사 등의 프로파일을 만들면 메뉴 막대에서 모든 파일을 한 번에 전환할 수 있습니다.
키가 멈추기 전에 경고
제공업체가 거부하기 시작한 키, 공개되는 경우의 실제 만료 카운트다운(Anthropic, OpenAI, Mistral, Fireworks), 보고되는 사용량과 요청 한도를 알립니다. ntfy나 Gotify로 휴대폰에도 보낼 수 있습니다. 한 공급업체 계정의 키가 모두 동시에 멈추면 계정 자체가 비활성화되었을 수 있다고 알려, 소용없는 키 교체보다 먼저 메일을 확인할 수 있습니다.
다른 사람이 키를 쓰면 알림
사용량 감시는 15분마다 저장된 관리자 키로 Anthropic, OpenAI, OpenRouter에 키별 사용량을 묻습니다. 저장하지 않은 키의 사용, 평소 패턴을 크게 넘는 사용, 쓴 적 없는 모델, 교체 후 이전 키의 사용을 알리고 “지금 교체” 버튼을 함께 보여 줍니다. 쓴 적 없는 프런티어 모델로 갑자기 바뀐 키는 도둑이 가장 먼저 하는 일이므로 심각으로 알립니다. Amazon Bedrock은 CloudTrail로 낯선 주소의 호출까지 잡아냅니다. OpenAI가 조직의 사용자에게 경고하거나 차단하면 KeyRotate가 Enfour 릴레이를 통해 알고, 앱 사용자가 아니면 알립니다.
유출의 모든 징후를 하나의 경보 화면에
가드는 키가 다른 사람 손에 들어갔을 수 있다는 징후를 심각한 순서로 모으고, 각각에 “지금 교체”, “키 열기”, “숨기기” 중 하나의 동작을 붙입니다. 정보원은 AI 도구 로그, Enfour의 서명된 침해 권고, 사용량 감시, 매일의 키 확인(제공업체는 유출이 보고된 키를 폐기하므로 갑작스러운 거부는 단서가 됩니다), 유출 검사, 원격 저장소입니다. 사이드바 배지가 경고 수를 보여 주며, 창을 닫아도 KeyRotate는 메뉴 막대에서 계속 지킵니다.
관련 있는 유출을 가려내고, 닫혀 있어도 알립니다
Enfour의 서명된 유출 권고를 보유한 키와 계정을 바탕으로 Mac에서 순위를 매깁니다(노출, 가능성 높음, 가능성 있음, 가능성 낮음). 관련 있는 유출이 먼저 표시되며, 무엇을 쓰는지에 관한 정보는 Mac 밖으로 나가지 않습니다. Apple 푸시를 켜면 KeyRotate를 닫아도 새 권고가 도착하고, 가드 자체가 멈췄을 때(KeyRotate 종료, 응답 없음, 충돌)도 경고합니다.
유출된 이메일 비밀번호와 주소도 잡아냅니다
설정 파일의 SMTP·IMAP 비밀번호, 비밀번호가 들어 있는 메일 서버 주소, SendGrid·Mailgun·Brevo·Postmark·Resend 키도 API 키처럼 AI 로그, 저장소, 웹 루트에서 찾아 가드에서 경고합니다. 가진 사람은 당신 이름으로 메일을 보낼 수 있기 때문입니다. 웹 프로젝트에서는 사이트가 그대로 내보내는 이메일 주소도 목록으로 보여 주고, 주소가 많이 든 파일을 내려받을 수 있으면 경보를 울립니다. 자신의 주소와 Have I Been Pwned 키를 등록하면 KeyRotate가 매일 확인하고, 새 유출에 포함되면 알립니다.
서버에 로그인할 수 있는 사람을 확인합니다
KeyRotate가 SSH로 갱신하는 서버마다 authorized_keys를 읽어 각 키의 종류, 길이, 지문을 목록으로 보여 줍니다. 약한 DSA 키나 짧은 RSA 키, 알려진 키로 표시하지 않은 키, 여러 서버에 있는 같은 키, sshd가 거부하거나 다른 사람이 쓸 수 있는 폴더를 알려 줍니다. 키는 클릭 한 번으로 제거할 수 있고(이전 파일은 백업으로 남습니다), KeyRotate가 로그인에 쓰는 키도 교체할 수 있습니다. 새 키로 접속되는지 확인한 뒤에 이전 키를 제거합니다. 서버의 개인 키 파일은 열지 않습니다.
기한이 되면 스스로 폐기되는 임시 키
동료, AI 에이전트, CI 작업에 1시간, 하루, 일주일만 쓸 수 있는 전용 키를 줄 수 있습니다. KeyRotate는 제공업체(OpenAI, OpenRouter, AWS IAM, Mistral, Fireworks, Linode, Paddle)에서 추가 키를 만들고, 기한이 되면 그곳에서 폐기합니다. 제공업체가 만료 날짜를 받는 경우(OpenRouter, Mistral, Fireworks, Linode)에는 거기에도 설정하므로 Mac이 꺼져 있어도 키가 멈춥니다. 그 밖의 경우에는 KeyRotate가 다음에 실행될 때 폐기하고, 늦어졌다면 그렇게 알려 줍니다.
필요 이상의 권한을 가진 키를 찾아냅니다
점검은 일반 키로 쓰이는 관리자 키, AWS 루트 액세스 키, 제한 없는 Stripe 비밀 키, 기존 방식의 GitHub 토큰, Cloudflare Global API Key, Slack 사용자 토큰이 파일에 기록되어 있으면 알려 주고, 대신 만들 권한이 좁은 자격 증명을 안내합니다. GitHub Actions, Vercel, Fly.io에 저장된 클라우드 키에는 OIDC를 안내합니다. 실행할 때마다 잠시만 유효한 자격 증명이 주어지므로 키를 저장할 필요가 없어집니다.
iPhone에서 2차 승인
2차 승인이 필요한 작업(백업 내보내기, 키 폐기나 삭제, 교체, 값 표시나 복사, 임시 키 만들기, 서버의 SSH 키 변경)을 고르고, 페어링한 iPhone의 Face ID나 Apple Watch에서 하나씩 승인하십시오. 동료의 iPhone을 “승인 전용”으로 페어링하면 그 iPhone에는 승인 요청만 오고 다른 것은 보이지 않습니다. 2차 승인을 끄는 데에도 승인이 필요합니다. Mac 버전 전용입니다.
SIEM으로 보낼 수 있는 감사 로그
교체, 폐기, 내보내기, 복사, 임시 키, SSH 키 변경, 승인을 모두 기록합니다. 이름과 ID만 남기고 값은 기록하지 않습니다. 로그는 해시 체인으로 이어져 있어 줄이 바뀌거나 지워지면 알 수 있습니다. 필터링하고 JSON Lines나 CSV로 내보낼 수 있으며, 각 이벤트를 syslog(UDP, TCP, TLS), 웹후크, Splunk HEC로 전달할 수 있습니다.
AI 대화 로그에서 키를 찾아냅니다
Claude Code, Codex 등 코딩 에이전트에 붙여넣은 키나 실행한 명령이 출력한 키는 AI 제공업체로 전송되고 도구의 로그에 평문으로 남습니다. 자격 증명을 훔치는 코드가 가장 먼저 찾는 곳입니다. KeyRotate는 Claude Code, Codex, Gemini CLI, Qwen Code, OpenCode, Goose, Cline, Roo Code 로그의 새 줄을 1시간마다 읽어 저장된 키를 정확한 값으로, 그 밖의 비밀을 Gitleaks 규칙으로 찾습니다. 사용 중인 키가 나오면 교체될 때까지 매일 알립니다. 남기는 것은 위치와 시각, 가린 미리보기뿐이며 비밀 자체는 남기지 않습니다.
저장소를 지킵니다 — 모든 브랜치와 태그까지
GitHub, Gitea·Forgejo(Codeberg 포함), GitLab, Bitbucket, GitCafe 계정을 추가해 저장소를 고르거나, 아무 HTTPS git 주소나 지정하십시오. KeyRotate는 git을 내장하고 있어 설치할 것이 없으며, 각 저장소의 전체 기록을 Mac에 복사해 유출 검사로 살피고, 이후에는 매일 바뀐 부분만 가져옵니다. GitHub에서는 시크릿 스캐닝 알림도 읽어, GitHub가 찾은 비밀이 아직 유효한지 알려 줍니다. 교체해도 기록은 지워지지 않으므로 이전 키도 폐기하십시오.
웹 서버가 무엇을 내주게 될지 판단합니다
웹 프로젝트를 추가하십시오(~/Sites, /Library/WebServer/Documents, MAMP의 htdocs, Herd 바로 가기 제공). Pancake Stack이나 FrontierStack에서 “KeyRotate로 감시…”로 사이트를 보낼 수도 있습니다. 발견한 내용은 웹 서버가 그 파일을 어떻게 다루는지로 판단합니다. 웹 루트의 .env, JSON, SQL 덤프, 백업, 로그는 누구나 내려받을 수 있고, 스크립트나 페이지 속 키는 모든 방문자의 브라우저에 전달됩니다. PHP 속 키는 공개되지 않지만 모든 복사본, 백업, 저장소에 함께 실려 갑니다. 웹 프로젝트는 매일 다시 검사합니다.
프로젝트 폴더를 끌어 놓기만
.env와 PHP 설정 파일, 또는 프로젝트 폴더 전체를 KeyRotate에 끌어 놓으세요. 키를 찾아 여러 파일에 있어도 한 번만 가져오고, 각 파일을 대상으로 만들어 첫 교체부터 모두 다시 씁니다. .env.example 같은 예제 파일은 대상으로 삼지 않습니다.
교체에서 빠질 .env 파일을 찾아냅니다
폴더를 검사할 때마다 KeyRotate가 아직 갱신하지 않는 .env 파일을 목록으로 보여 줍니다. “키 가져오기 및 대상 지정…”은 키를 가져오고 각 파일을 대상으로 만들어, 다음 교체 때 그 파일도 다시 씁니다. “이전 키 업데이트…”은 오래된 사본을 현재 키로 덮어씁니다. 그 줄만 바꾸며 백업도 남깁니다.
테스트 키는 테스트 키로
Stripe, Square, Paddle, PAY.JP, KOMOJU, Mollie, Razorpay, Toss Payments, PayPal, Braintree, Adyen의 테스트·샌드박스 키는 각자의 항목에 들어가고, 라이브 항목은 테스트 키를 거부합니다. PAYJP_SECRET_KEY=sk_test_…는 Stripe가 아니라 PAY.JP 키로 인식됩니다.
AWS의 모든 형태
~/.aws/credentials의 각 프로필을 별도 키로 다루고 교체 시 그 프로필만 다시 씁니다. GovCloud와 중국 키도 확인·교체하며, Amazon Bedrock API 키(ABSK…)도 관리합니다. 몇 시간 만에 만료되는 임시 키는 그 이유와 함께 제외합니다.
이미 사용 중인 도구와 연동
FrontierStack
한 번 페어링하면 KeyRotate가 새 키를 모두 사용자의 Mac에 고정·서명된 연결로 FrontierStack에 넘깁니다. 페어링 권한은 자격 증명에 한정되어, 키를 설정하고 상태를 읽는 것 말고는 아무것도 할 수 없습니다. FrontierStack의 Telegram·LINE 알림 채널도 같은 봇 토큰과 채널 액세스 토큰을 쓰므로, 여기서 교체한 토큰이 다음 알림부터 바로 쓰입니다.
Claude Code와 Codex
계정마다 설정 프로파일을 두고 정확한 실행 명령을 복사할 수 있습니다. KeyRotate는 Claude Code 자체의 로그인이나 키체인 항목에는 손대지 않습니다.
OpenClaw와 에이전트 런타임
각 런타임이 실제로 읽는 환경 변수에 씁니다. 교체 풀에 쓰이는 목록 형식도 지원합니다.
이전 키를 폐기하지 않는 이유
키가 한 곳에만 있는 경우는 드뭅니다. 교체와 동시에 폐기하면 잊고 있던 cron 작업이나 스테이징 서버, 동료의 노트북이 멈춥니다. KeyRotate는 이전 키를 유효한 상태로 두고 파악하고 있는 모든 곳을 갱신한 뒤, 다른 곳에서 쓰이지 않는 것이 확인되면 폐기를 안내합니다. 공급업체 API가 지원하면(OpenAI, Anthropic, OpenRouter, Mistral, Fireworks, Linode, AWS IAM, Paddle) 그다음 키 화면에서 확인 후 한 번의 클릭으로 이전 키를 ID로 폐기할 수 있습니다.
설계부터 비공개
계정도, 통계 수집도, 동기화 서버도 없습니다. 시크릿 값은 macOS 키체인 항목입니다. 그 밖에 KeyRotate가 보관하는 것은 각 키가 어느 플랫폼에 속하고 어떤 파일에서 쓰이는지에 대한 목록, 감시하도록 지정한 저장소의 복사본, 그리고 위치와 시각과 가린 미리보기만 기록한 검사 결과입니다. 비밀 자체는 기록하지 않습니다. 네트워크 통신은 선택한 제공업체와 git 호스트, 설정한 경우의 알림 서버, Enfour의 서명된 권고 가져오기로만 이루어지며, 키에 관한 정보는 전혀 보내지 않습니다.
KeyRotate for Windows
Windows 10·11용 같은 앱입니다. 지원 제공업체, 교체, 파일 갱신, 유출 검사, 계정과 프로파일은 Mac 버전과 같습니다. 키는 하나씩 Windows 데이터 보호(DPAPI)로 사용자의 Windows 계정에 맞춰 암호화되므로, 파일을 다른 PC나 계정에 복사하면 읽을 수 없습니다. 키를 표시할 때는 Windows Hello로 확인합니다. 메뉴 막대 대신 시스템 트레이에 상주합니다. 데이터는 %APPDATA%\KeyRotate에 저장되며, 다른 PC로는 암호화된 백업으로 옮깁니다.
Windows에는 없는 것: FrontierStack·Pancake Stack 연동, iPhone·Apple Watch 컴패니언, VibeProxy(모두 Mac 앱). CLIProxyAPI는 양쪽에서 쓸 수 있습니다.
다운로드
KeyRotate for Mac
macOS 14 이상. Mac App Store에서 판매·업데이트하며, 앱 안에서 시작하는 월 구독입니다.
KeyRotate for Windows
Windows 10·11(64비트 Intel/AMD 또는 Arm). 이 사이트에서 구매하는 월 구독으로, 월 ₩2,900이며 PC 3대까지 쓸 수 있습니다.
…
어느 시스템에서든 구독이 만료되어도 모든 키는 그대로 보이고 복사할 수 있습니다. 교체, 파일 갱신, 계정 전환만 멈춥니다. 사용자를 자기 인증 정보에서 잠가 버리는 키 관리자는 없느니만 못하기 때문입니다.
KeyRotate