siyuan-note/siyuan · error
Conf.Language(311)
Error message
Conf.Language(311)
What it means
ImportNotebookCryptoBackup verification failure surfaced as localized message Conf.Language(311) (wrong main password): the KEK derived from the user-entered password plus the backup's MasterSalt failed to decrypt the KEKVerifier to the expected magic. The password does not match the backup, so import is refused without touching existing data.
Source
Thrown at kernel/model/crypto.go:352
return errors.New(Conf.Language(317))
}
// 用导入的 salt + 用户输入的主密码派生 KEK,校验能否解开备份里的 verifier
params, validErr := util.ValidateArgon2Params(nc.KDFParams)
if validErr != nil {
return errors.New(Conf.Language(317))
}
kek := util.DeriveKey(password, nc.MasterSalt, params)
defer zeroAndClear(kek)
if nc.Checksum != computeBackupChecksum(nc) {
return errors.New(Conf.Language(317))
}
if !verifyKEKMAC(nc, kek) {
return errors.New(Conf.Language(317))
}
decrypted, dErr := util.DecryptWithAAD(kek, nc.KEKVerifier, []byte("siyuan:kek-verifier"))
if dErr != nil || string(decrypted) != string(kekVerifierMagic) {
return errors.New(Conf.Language(311)) // 主密码错误
}
// 校验 KEK 能解密现存笔记本和已删除笔记本历史中的 WrappedDEK,避免导入不匹配的备份。
if !verifyKEKAgainstExistingBoxes(kek, nc) || !verifyKEKAgainstEncryptedHistory(kek, nc) {
return errors.New(Conf.Language(316)) // 密钥不匹配
}
nc.KDFParams = params // 确保写回 Conf 的参数已经通过完整校验。
nc.Enabled = true
// 先写 backup,再提交 conf;backup 失败时 conf 尚未改变,可重试
if err := writeNotebookCryptoBackupData(nc, kek); err != nil {
return fmt.Errorf("failed to persist key backup: %w", err)
}
Conf.m.Lock()
*Conf.NotebookCrypto = *nc
Conf.m.Unlock()
Conf.Save()View on GitHub (pinned to 8641553a1f)
Solutions
- Re-enter the exact main password used when the backup was created
- Confirm the backup file is the intended one and uncorrupted
- Never regenerate MasterSalt or delete keys to work around the mismatch
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at kernel/model/crypto.go:352 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11).
Data as JSON: /api/errors/c20ede1590dc6f21.
Report an issue: GitHub.