鱿鱼键
DuckDB支持用于单用户、多代理系统的加密凭证存储。
SquidKeys通过以下方式公开相同的存储引擎:
- FastAPI(
squidkeys-api) - MCP服务器(
squidkeys-mcp)
它存储两种记录类型:
- 授权(Discord/app OAuth令牌)
- 密码机密
安全模型
- 每条记录DEK(
32 bytes)使用加密密钥字段AES-256-GCM. - DEK由版本化的KEK包裹(
AES-256-GCM). - AAD将加密绑定到
agent_id + record_type + record_identity. - KEK从不存储在DuckDB中。
安装
python3 -m venv .venv
. .venv/bin/activate
pip install -e .[dev]配置密钥
在Python中生成一个密钥:
from key_store import KeyStore
print(KeyStore.generate_key())设置KEK和活动版本:
export KEY_STORE_KEKS_JSON='{"v1":""}'
export KEY_STORE_ACTIVE_KEK_VERSION='v1'
export KEY_STORE_DB_PATH='./keystore.duckdb'
export KEY_STORE_BEARER_TOKEN=''遗留回退:如果 KEY_STORE_KEKS_JSON 未设置, KEY_STORE_MASTER_KEY 被用作 v1.
运行FastAPI
squidkeys-api默认绑定: 127.0.0.1:8080. 如果 KEY_STORE_BEARER_TOKEN 已设置,全部 /v1/* 路线要求 Authorization: Bearer .
主要路线:
PUT /v1/authorizationsGET /v1/authorizations/{agent_id}/{provider}DELETE /v1/authorizations/{agent_id}/{provider}PUT /v1/passwordsGET /v1/passwords/{agent_id}/{name}DELETE /v1/passwords/{agent_id}/{name}GET /v1/keys/statusPOST /v1/keys/rewrap
运行MCP服务器
squidkeys-mcp默认传输: stdio.
可用工具:
save_authorizationget_authorizationdelete_authorizationsave_passwordget_passworddelete_passwordkey_statusrewrap_all_records
YAML接口映射
存储映射接口记录在:
docs/interface-map.yaml
测试
pytest人工智能生成/自动贡献
欢迎自动化和人工智能辅助的贡献,只要它们符合与人类编写代码相同的生产标准。
对于生产代码,占位符是不可接受的。
- 单元测试可能会使用模拟和存根。
- 新功能必须包括涵盖行为的单元测试(或对现有测试的更新)。
在提交生成的更改之前,请验证:
- 没有功能文件包含临时占位符(
TODO,FIXME,NotImplementedError). - 模仿/打断行为仅限于测试和夹具。
- 故障状态为遥测,应保持可见;不要引入隐藏运行时故障的优雅回退行为。
- 在没有跟踪的问题编号或相关的公共论坛线程的情况下,不要合并实质性的架构更改。
- 合并前通过所有相关测试。
许可证
仅限GPL-3.0。看 LICENSE.
