편집자 노트

khiqwq/dsh-credentials-system

System-bound encrypted credential provider for DeepSeek Harness

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

업스트림에서 중국어 README를 제공하지 않아 저장소 원본 내용을 표시합니다.

dsh-credentials-system

DeepSeek Harness credential provider backed by the operating system's user-bound secret protection. Version 0.1 supports Windows x64/ARM64 through DPAPI CurrentUser.

Security properties

  • $DSH_HOME/.credentials.system.json contains only versioned DPAPI ciphertext and reference names.
  • A blob is bound to the current Windows user, this store id, and its exact credential reference.
  • There is no plaintext-file, environment-variable, machine-wide, or local-key fallback.
  • describe() returns only configured, source, and writable; there is no reveal API.
  • Wrong user, damaged ciphertext, unavailable native backend, and malformed storage fail loudly.
  • Explicit portable exports use scrypt plus AES-256-GCM; the passphrase and plaintext are never written beside the export.

This protects a copied credential file and prevents routine configuration views from disclosing values. It cannot protect secrets from malicious code already executing as the Harness process, memory inspection, a compromised Windows account, or a proxy that necessarily receives its own authentication credential.

DeepSeek Harness composition

Replace the built-in plaintext provider; never run it as an automatic fallback:

- id: credentials
  name: '@deepseek-ai/dsh-credentials-local'
  disabled: true

- insert:
    - id: credentials-system
      name: dsh-credentials-system

Consumers store only references, for example:

proxies:
  office:
    url: http://proxy.example:8080
    username: alice
    passwordRef: DSH_PROXY_OFFICE_PASSWORD

The Harness plugin configuration UI should submit a new value through the write-only credentials API. It must render an empty password field plus “configured/not configured”, never a decrypted value or ciphertext.

Migrating the legacy plaintext file

provider.migrateLegacy({ refs?, archive? }) performs an explicit Host-side migration from $DSH_HOME/.credentials.yaml:

  1. strictly parse the bounded YAML mapping;
  2. list/select refs without returning values to a browser;
  3. DPAPI-encrypt each selected value;
  4. resolve and compare it in memory to verify the write;
  5. optionally rename the source to .credentials.yaml.migrated only when every entry migrated.

The renamed file is still plaintext. Delete it after verifying the new provider; it is retained rather than automatically destroyed so an interrupted migration cannot cause credential loss. Partial migration never renames or deletes the source.

Portable export

Portable export is an explicit backup/migration operation, not the runtime backend. The complete payload—including reference names—is encrypted using scrypt (N=131072, r=8, p=1) and AES-256-GCM. A wrong passphrase and a damaged file intentionally return the same error.

Important DSH distinction

@deepseek-ai/dsh-credentials-local stores plaintext in $DSH_HOME/.credentials.yaml. Owner-only file permissions and role("secret") redaction are useful boundaries, but they are not encryption. This provider must not silently fall back to it.

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.