备份存档加密

本文档最终将详细描述我们用于加密和解密备份的方案。

class ArchiveEncryptionState()

ArchiveEncryptionState 封装了关键的原语和包装的密钥,这些密钥可以安全地序列化到文件系统。ArchiveEncryptionState 用于计算加密备份存档所需的密钥。

ArchiveEncryptionState.ArchiveEncryptionState
ArchiveEncryptionState.backupAuthKey

类型: CryptoKey

将用于验证备份所有者的 AES-GCM 密钥。

ArchiveEncryptionState.isInternalConstructing

一个技巧,让我们可以确保 ArchiveEncryptionState 只能通过 ArchiveEncryptionState.initialize 静态方法来构造。

参见 https://mdn.org.cn/en-US/docs/Web/JavaScript/Reference/Classes/Private_properties#simulating_private_constructors

ArchiveEncryptionState.nonce

类型: Uint8Array

包装私钥和 OSKeyStore 密钥时计算的随机数。

ArchiveEncryptionState.publicKey

类型: CryptoKey

将用于派生加密备份密钥的 RSA-OAEP 公钥。

ArchiveEncryptionState.salt

类型: Uint8Array

为恢复代码的 PBKDF2 拉伸计算的盐。

ArchiveEncryptionState.state

对保存 ArchiveEncryptionState 实例当前状态的对象的引用。当此引用为 null 时,加密不被视为已启用。

ArchiveEncryptionState.wrappedSecrets

类型: Uint8Array

包装的静态密钥,包括 RSA-OAEP 私钥和 OSKeyStore 密钥。

ArchiveEncryptionState.GENERATED_RECOVERY_CODE_LENGTH

类型: number

如果未传入恢复代码以启用;则使用 CSRNG (crypto.getRandomValues) 生成的字符数;

ArchiveEncryptionState.VERSION

类型: number

ArchiveEncryptionState 的当前版本号。它编码在序列化的状态中,并且还在启用() 中盐的计算过程中使用。

ArchiveEncryptionState.serialize()

将 ArchiveEncryptionState 实例序列化为可以安全地持久保存到磁盘的对象。

返回:

Promise.<object>

static ArchiveEncryptionState.initialize(stateDataOrRecoveryCode)

构造一个新的 ArchiveEncryptionState。如果传递了 stateData 对象,则 ArchiveEncryptionState 将尝试从中反序列化 - 否则,将自动生成新的状态数据。如果提示用户对其 OSKeyStore 进行身份验证,并且他们取消了身份验证,则这可能会被拒绝。

参数:
  • stateDataOrRecoveryCode (object|string|undefined) – 通过 serialize() 生成的对象、用于生成状态的恢复代码或 undefined。

返回:

Promise.<InitializationResult>