본문으로 건너뛰기

런타임 자격 증명 가리기 · 오픈 소스

시크릿은 순식간에 퍼집니다.
퍼지기 전에 막으세요.

프롬프트에 붙여 넣은 자격 증명 하나가 도구 응답, 트레이스, 로그, 대화 기록에 그대로 남을 수 있습니다. Redact Secret은 데이터가 아직 애플리케이션 안에 있을 때 지원 형식의 자격 증명을 찾아, 다른 시스템으로 넘어가기 전에 가립니다.

로컬에서 도는 탐지 코어 하나, 데이터가 지나는 길마다 붙이는 연동.

검사 한 번scanAndRedact()
Input
API_KEY=SYNTHETIC_REVOKED_CONTEXT_VALUE
Output
API_KEY=<SECRET_1>

테스트용 합성 값이며 실제 자격 증명이 아닙니다. 탐지 메타데이터에는 종류·위치·길이만 남고 값은 남지 않습니다.

런타임에서 생기는 문제

소스 코드만이 아니라 실행 중인 데이터도 지키세요.

저장소 스캐너는 코드에 커밋된 시크릿을 찾아 줍니다. Redact Secret은 애플리케이션이 실행 중에 다루는 텍스트, 즉 사용자 입력, 오류 메시지, 도구 결과, 로그, 트레이스, 저장된 레코드, 모델 컨텍스트에서 동작합니다. 한 번 붙여 넣은 값이 누가 알아채기도 전에 다섯 군데로 복사됩니다.

사용자가 한 줄을 붙여 넣습니다

API_KEY=

애플리케이션이 자격 증명을 요청한 적은 없습니다. 애플리케이션이 통제하지 못하는 텍스트에 섞여 들어왔을 뿐입니다.

  • 도구 응답에이전트에 반환된 뒤 컨텍스트에 다시 인용됨값이 그대로 남음
  • 트레이스 span 속성외부 벤더 백엔드로 전송되어 몇 주씩 보관됨값이 그대로 남음
  • 애플리케이션 로그수집·색인되어 온콜 담당자 누구나 검색 가능값이 그대로 남음
  • 대화 기록이후 대화의 모든 턴에 다시 들어감값이 그대로 남음
  • 저장된 레코드데이터베이스, 캐시, 검색 색인에 기록됨값이 그대로 남음
1붙여 넣은 횟수
5값을 갖게 된 시스템
0이 중 바로잡기에 알맞은 곳

값이 한번 넘어간 뒤에는 자격 증명을 교체하는 것 말고는 방법이 없습니다. 검사는 그보다 한 단계 앞, 애플리케이션이 텍스트를 다른 시스템에 넘기는 경계에서 해야 합니다.

플레이그라운드

직접 입력해 보세요.

입력을 고치면 출력이 바로 바뀝니다. 탐지 코어는 이 탭 안에서 WebAssembly로 실행되며, 패키지에 들어 있는 엔진과 같습니다.

입력한 내용은 이 브라우저 탭 밖으로 나가지 않습니다. 전송·저장·기록되지 않고 맞춤법 검사도 꺼 두었습니다. 그래도 합성 값만 쓰세요. 실제 자격 증명은 어떤 웹 페이지에도 붙여 넣으면 안 됩니다.

예제
개인정보

개인정보 탐지는 직접 켜야 하는 기능이고, 기본값은 꺼짐(자격 증명만 탐지)입니다. 전역은 이메일, 전화번호, 결제 카드, IP 주소, IBAN을 더하고, 전역 + 미국은 미국 사회보장번호(SSN)까지 탐지합니다. 코어는 시작할 때 개인정보 설정을 고정하므로, 모드마다 엔진 인스턴스를 따로 띄웁니다.

274 B / 32.0 KB
출력

엔진을 불러오는 중…

처음 실행하기

검사 한 번으로 시작하세요.

게시된 버전을 지정해 설치하고, 한 번 검사한 뒤 출력을 비교해 보세요. 모든 런타임에서 같은 합성 예제를 씁니다.

npm install @redact-secret/core@0.1.0-beta.10
import { initialize, scanAndRedact } from "@redact-secret/core";

await initialize();
const result = scanAndRedact("API_KEY=SYNTHETIC_REVOKED_CONTEXT_VALUE");
console.log(result.text);
// API_KEY=<SECRET_1>

Rust는 crates.io에서 설치합니다. 첫 예제는 Rust 가이드 (영문)에 있습니다.

빌드 시 고정0.1.0-beta.10이 현재 beta 버전이며, 레지스트리에서 확인한 날짜는 2026-09-28입니다. 지금은 npm latest도 이 버전을 가리킵니다. 그래도 latest는 바뀐 적이 있어서 명령에 버전을 고정해 둡니다. Python 표기는 0.1.0b10입니다.

버전을 명시하는 이유

패키지 상태는 빌드할 때 릴리스 기록 한 곳에서 읽어 오고, 확인한 날짜와 함께 보여 줍니다. 번역 본문에 손으로 다시 적지 않습니다.

이렇게 나와야 합니다

값은 사라지고 그 자리에 유형이 붙은 자리표시자가 들어갑니다. result.findings는 종류·위치·길이만 알려 주고 원문은 담지 않습니다.

작동 방식과 통제

데이터는 내 프로세스 밖으로 나가지 않습니다.

탐지와 가림 처리는 로컬에서 실행되며, 텍스트를 외부 검사 서비스로 보내지 않습니다. 네트워크 호출도 텔레메트리도 없고, 같은 입력이면 항상 같은 결과가 나옵니다.

  1. 01신뢰할 수 없는 텍스트사용자 입력, 설정, 오류, 도구 결과, 검색된 문서
  2. 02애플리케이션 경계텍스트를 넘기기 전, 내가 통제할 수 있는 마지막 지점
  3. 03 · 코어Redact Secret탐지, 겹침 해소, 정책 적용, 가림 처리를 내 프로세스 안에서 수행
  4. 04가린 텍스트 + 안전한 탐지 결과탐지 결과는 일치한 위치만 알려 주고 값은 담지 않음
  5. 05로그 · 저장소 · 트레이스 · 도구 · 모델각 목적지는 자격 증명이 제거된 텍스트를 받음

브라우저: 사전 예방

클라이언트에서 검사하면 붙여 넣은 자격 증명이 기기를 벗어나기 전에 잡을 수 있습니다. 다만 클라이언트는 수정되거나 우회될 수 있으므로, 도움은 되지만 강제 수단은 되지 못합니다.

서버: 최종 판단

서버는 로깅, 저장, 컨텍스트 구성, 모델·도구 호출 전에 독립적으로 한 번 더 검사합니다. 보안 판단은 이 검사 결과를 기준으로 합니다.

block은 누가 실행하나요

코어는 block 조치를 돌려줄 뿐입니다. 요청을 실제로 거부하는 것은 애플리케이션입니다. Redact Secret이 직접 막는 것은 없습니다.

코어 · 어댑터 · 볼트

코어를 직접 쓰거나, 이미 쓰고 있는 도구에 연결하세요.

모든 패키지 뒤에는 Rust로 만든 탐지 코어 하나가 있습니다. 어댑터는 호스트마다 탐지 규칙을 새로 만들지 않고 이 코어를 로깅, 트레이싱, AI 작업 흐름에 연결합니다. 볼트는 가린 값을 되돌려야 할 때만 쓰는 별도 기능입니다. 카드마다 그 패키지가 다루지 않는 범위를 적어 두었습니다.

코어

엔진은 하나, 쓰는 방법은 세 가지.

GitHub

코어 라이브러리

출시됨

@redact-secret/core (npm)

탐지, 정책 적용, 가림 처리를 Rust로 구현했고, JavaScript(Node.js·브라우저), Python, Rust에서 같은 API로 씁니다.

레지스트리
npm 0.1.0-beta.10 · PyPI 0.1.0b10 · crates.io 0.1.0-beta.10

기본값은 자격 증명만 탐지합니다. 개인정보 탐지는 직접 켜야 동작합니다.

WebAssembly 빌드

출시됨

@redact-secret/wasm (npm)

코어의 브라우저용 빌드입니다. @redact-secret/core를 설치하면 자동으로 따라오며, 직접 import해서 쓰지는 않습니다.

버전
0.1.0-beta.10 · 2026-09-28

페이지나 Worker에서 실행됩니다. 위 플레이그라운드도 이 빌드로 돌아갑니다.

CLI

출시됨

redact-secret-cli (crates.io)

표준 입력이나 파일 하나를 읽어 가린 텍스트를 출력합니다. 셸, 파이프라인, 훅에서 씁니다.

버전
0.1.0-beta.10 · 2026-09-28
설치
cargo install redact-secret-cli --version 0.1.0-beta.10 --locked

npm이 아니라 crates.io에서 설치합니다. 개인정보 탐지는 --pii로 켭니다.

어댑터

호스트 연동입니다. 스스로 판단하지 않고, 텍스트를 코어에 넘긴 뒤 코어의 답을 돌려줍니다.

GitHub

브라우저

Web Streams

출시됨

@redact-secret/core/web-stream (npm)

스트림으로 흐르는 텍스트를 가리는 TransformStream이며, 코어에 포함되어 있습니다.

버전
0.1.0-beta.10 · 2026-09-28

브라우저 어댑터 패키지는 따로 없습니다. 코어의 이 서브패스가 곧 브라우저 연동입니다.

Node.js

Pino

출시됨

@redact-secret/adapter-pino (npm)

로그 호출의 값과 완성된 로그 줄을 가립니다. pino의 경로 기반 redact와 함께 쓸 수 있습니다.

버전
0.1.1 · 2026-09-25
호스트
pino ^10.0.0
코어
^0.1.0-beta.6

객체 키는 가리지 않으며, 줄이 기록된 뒤 destination이나 transport가 덧붙인 내용도 다루지 않습니다.

OpenTelemetry 트레이스

출시됨

@redact-secret/adapter-otel (npm)

다음 SpanProcessor를 감싸서 문자열 속성, 이벤트, span 이름, 상태 메시지를 가립니다.

버전
0.1.1 · 2026-09-25
호스트
@opentelemetry/sdk-trace-base ^2.0.0
코어
^0.1.0-beta.6

속성 이름은 가리지 않습니다. 감싼 processor에 도달하지 않는 span은 처리할 수 없습니다.

마스킹 콜백

출시됨

@redact-secret/adapter (npm)

Langfuse처럼 마스킹할 값을 콜백으로 넘겨주는 호스트용 createMaskSecrets()입니다.

버전
0.1.2 · 2026-09-26
코어
^0.1.0-beta.6

호스트가 콜백으로 넘기는 값만 처리합니다.

AI 컨텍스트

알파

@redact-secret/adapter-ai-context (npm)

사용자 입력과 도구 결과로 모델 컨텍스트를 만듭니다. 문제가 생기면 전체를 막고, 일부만 통과시키지 않습니다.

버전
0.1.0-alpha.1 · 2026-09-26
npm 태그
alpha
코어
^0.1.0-beta.6

바이너리나 인코딩된 값은 디코딩하지 않고 차단합니다. 모델 출력은 다루지 않습니다.

MCP 도구 호출

알파

@redact-secret/adapter-mcp (npm)

tools/call과 resources/read 결과를 로그에 남기거나 저장하거나 컨텍스트에 넣기 전에 검사합니다.

버전
0.1.0-alpha.1 · 2026-09-26
npm 태그
alpha
호스트
@modelcontextprotocol/sdk >=1.13.0 <=1.30.1, @modelcontextprotocol/client >=2.0.0 <=2.1.0, @modelcontextprotocol/server >=2.0.0 <=2.1.0
코어
^0.1.0-beta.6

다른 MCP 메서드는 다루지 않습니다. 바이너리 페이로드가 있으면 기본적으로 결과 전체를 차단합니다.

Python

Python 로깅

출시됨

redact-secret-adapters (PyPI)

표준 라이브러리 로깅에 값 기반 가림 처리를 더하는 logging.Filter입니다.

버전
0.1.0 · 2026-09-22
코어
redact-secret <0.2,>=0.1.0b6

붙인 곳에서만 동작합니다. 로거가 아니라 출력하는 핸들러마다 붙이세요.

OpenTelemetry Python

출시됨

redact-secret-adapters[otel] (PyPI)

Python 서비스에서 다음 span processor를 감쌉니다.

버전
0.1.0 · 2026-09-22
호스트
opentelemetry-sdk <2,>=1.16.0

otel extra를 지정해야 설치됩니다. 다시 쓸 수 없는 span은 내보내지 않고 버립니다.

마스킹 콜백

출시됨

redact-secret-adapters (PyPI)

Langfuse처럼 마스킹할 값을 콜백으로 넘겨주는 호스트용 mask_secrets입니다.

버전
0.1.0 · 2026-09-22

호스트가 콜백으로 넘기는 값만 처리합니다.

볼트

선택 사항이며 별도 패키지입니다. 코어는 값을 보관하지 않습니다. 볼트는 요청할 때만 메모리에 매핑을 두고, 정해 둔 정책에 따라서만 복원합니다.

GitHub

브라우저

볼트

알파

@redact-secret/vault (npm)

모델로 보내는 시크릿을 불투명한 <rsv_…> 토큰으로 바꾸고, 지정한 필드에서만 원래 값으로 복원합니다.

버전
0.1.0-alpha.3 · 2026-09-28
npm 태그
alpha
코어
0.1.0-beta.10

메인 스레드에서 쓰거나, 별도로 검증한 전용 Worker 모드를 골라 쓸 수 있습니다. 저장소나 네트워크를 쓰지 않습니다.

Node.js

볼트

알파

@redact-secret/vault (npm)

같은 메모리 내 캡처·복원 기능을 Node.js 20, 22, 24에서 씁니다.

버전
0.1.0-alpha.3 · 2026-09-28
npm 태그
alpha
코어
0.1.0-beta.10

코어 버전 하나에 정확히 고정되어 있어, 다른 코어 버전과 함께 설치할 수 없습니다.

볼트 서버

알파

@redact-secret/vault-server (npm)

복원 요청마다 주체, 테넌트, 출처, 목적지, 값 경로를 확인해 승인합니다.

버전
0.1.0-alpha.3 · 2026-09-28
코어
0.1.0-beta.10

메모리 백엔드만 있습니다. 영구 저장소는 제안 단계이고 아직 패키지가 없습니다.

Python

볼트 (Python)

알파

redact-secret-vault (PyPI)

볼트 서버의 승인 계약을 Python으로 직접 구현했습니다.

버전
0.1.0a3 · 2026-09-28

연구용이며 PyPI에 없습니다. 저장소에서 설치하고, 캡처하려면 node 실행 파일이 필요합니다.

버전·태그·범위는 2026-09-28 기준으로 레지스트리에 게시된 값입니다.

공개 근거

주장마다 근거를 확인할 수 있습니다.

지원하는 자격 증명 형식, 형식별 근거 수준, 재현 가능한 벤치마크 결과를 확인하세요. 벤치마크 사이트는 수치와 함께 측정 방법과 한계도 공개합니다.

어떤 문제를 풀고 있나요?

해결하려는 문제시작할 곳
이미 Git 기록에 남은 자격 증명 찾기Gitleaks 또는 TruffleHog
문서·이미지에 담긴 폭넓은 개인정보 비식별화Presidio 또는 관리형 데이터 보호 서비스
실행 중인 애플리케이션에서, 지원 형식의 자격 증명이 로그·트레이스·도구·AI 컨텍스트로 넘어가기 전에 가리기Redact Secret

도구마다 푸는 문제가 달라서 서로 보완 관계입니다. 이 표는 어디서 시작할지 안내할 뿐, 점수를 매기지 않습니다.

다음 단계

데이터가 흐르는 길목에 보호 장치를 두세요.

코어부터 시작하고, 로그·트레이스·AI 작업 흐름에 맞는 연동을 더하세요.