@btravstack/ 键
一个
EnvelopeKeys用于@btravstack/core: 每根密钥 拥有者,世代相传,由该拥有者的 AWS KMS 密钥包裹——未被包入 内存和缓存为 TTL, 用一个密钥删除被删除—— 和一个 HKDF 助手给每个目的 自己的钥匙.
pnpm add @btravstack/keys @btravstack/core @btravstack/config @btravstack/di unthrown
pnpm add @aws-sdk/client-kms # for @btravstack/keys/kms
任何依赖都是同龄人 @aws-sdk/client-kms 可选的:
@btravstack/keys/kms 进口.
实例
将租户的有效载荷密封在租户自己的钥匙下的一个港口,以及 提供密钥的构成:
import type { webcrypto } from "node:crypto";
import {
EnvelopeKeys,
deriveKey,
type InvalidKeyPurpose,
type KeyErased,
type KeyGeneration,
type KeysUnavailable,
} from "@btravstack/keys";
import { kmsKeys } from "@btravstack/keys/kms";
class PayloadKeys extends Port("ReadmePayloadKeys")<{
readonly key: (
generation: KeyGeneration,
) => AsyncResult<webcrypto.CryptoKey, KeyErased | KeysUnavailable | InvalidKeyPurpose>;
}> {}
export const payloadKeys = Provider(PayloadKeys)({
inject: { keys: EnvelopeKeys },
sync: ({ keys }) => ({
key: (generation) =>
keys.rootKey(generation).flatMap((root) =>
deriveKey(root, { namespace: "payloads", purpose: "seal", version: 1 }, {
algorithm: { name: "AES-GCM", length: 256 },
usages: ["encrypt", "decrypt"],
}),
),
}),
});
export const Sealing = Module("ReadmeSealing")({
imports: [kmsKeys()],
provides: [payloadKeys],
exports: [PayloadKeys],
});
提供一代人,轮流, 消除租户在一个电话和规模化 缓存是 每个拥有者保留信封密钥。 。 。 .
选项
| 选项 | 何处 | 这是什么 |
|---|---|---|
KEYS_KMS_REGION | 环境 | 拥有者的 KMS 密钥区域—— 需要 |
KEYS_KMS_ALIAS_PREFIX | 环境 | 车主的 KMS 密钥是 <prefix><owner> 所需数额 |
KEYS_KMS_ENDPOINT | 环境 endpoint | 模拟器或 VPC 端点( 默认: AWS 本身) |
KEYS_CACHE_TTL_MS | 环境 cacheTtlMs | 未包装根保存时间( 默认为 5 分钟) |
KEYS_KMS_PENDING_WINDOW_DAYS | 环境 pendingWindowDays | 取消的天数(默认) 30(中文(简体) ) |
clock | kmsKeys({ … }) | 缓存的 TTL 是用什么来衡量的 |
完整表——默认,语义和推理——活在 参考页, (中文(简体) ), 这张名单是详细的.
它决定什么,它没有
决定 一代是一个 KMS 数据密钥, 受加密的约束
上下文 { owner, keyId }因此,为另一个所有者或密钥 id 呈现的blob 是
拒绝而不是被解开; 禁用、删除、丢失或拒绝
键为已键 KeyErased 和任何其他 KMS 说一个打字
KeysUnavailable;删除所有者是预定删除的密钥
向每个 KMS 请求报告 Observers; 并且一个衍生的密钥是
HKDF-SHA-256号机车 info = <namespace>/<purpose>/v<version>。 。 。 .
它没有决定 在那座乐园里,有俘虏的世代
下一个加密, 或如何创建所有者的 KMS 密钥: 这些是
应用程序和平台。 理由是
AGENTS.md。 。 。 .
许可证
麻省理工学院