Odoo 数据不可篡改检查报告及哈希安全功能指南
数据不可篡改检查报告
某些国家的税务机关要求公司 证明其已过账的会计分录未被篡改,即一旦分录被加密后,就不能再更改。
为此,Odoo 使用 SHA-256 算法 为每条已加密的分录生成唯一指纹(即哈希)。哈希的生成方式是取分录的关键数据([name]、[date]、[journal_id]、[company_id]、[debit]、[credit]、[account_id]、[partner_id] 字段的值),将其拼接后输入 SHA-256 哈希函数,得到固定长度(256 位)的字符串。哈希函数是确定性的(相同输入必产生相同输出),任何对原始数据的细微修改都会导致哈希值完全不同。因此,SHA-256 常用于数据完整性校验。
此外,前一条分录的哈希会被加入到下一条分录中,形成 哈希链。这可防止在两条已加密分录之间插入新分录,因为插入会破坏哈希链。
::: note
注意
SHA-256 生成的哈希在理论上并非唯一的,因为可能的取值是有限的。但其取值空间极大:2²⁵⁶,远超已知宇宙原子数。因此在实际使用中,哈希被视为唯一。 :::
不可篡改功能 {#data-inalterability/inalterability_features}
可通过在任意日记账上激活 secure posted entries with hash <data-inalterability/restricted> 选项,或使用 secure entries wizard <data-inalterability/wizard> 来启用不可篡改功能。
- 在分录表单视图中会新增两个指示器,用于显示分录是否已加密。
- 在
Posted状态旁显示fa-lock(已锁)或fa-unlock(未锁)图标。 - 在
Other info(其他信息)标签页中出现Secured(已加密)复选框。
- 在
- 在日记账分录及分录项的列表视图中提供 未加密 过滤器,可用于查找尚未加密的已过账分录。
- 在
Accounting(会计)菜单中显示打开secure entries wizard <data-inalterability/wizard>的入口。
在受限日记账中加密已过账分录 {#data-inalterability/restricted}
要在特定日记账上启用哈希功能,进入 Accounting --> Configuration --> Journals(会计 → 配置 → 日记账),打开销售、采购或杂项日记账,切换到 Advanced Settings(高级设置)标签页,勾选 Secure Posted Entries with Hash(使用哈希加密已过账分录)。已启用此功能的日记账称为 受限(restricted)。
计算分录哈希时,Odoo 会获取链中前置分录(即同一序列前缀的分录),并从最后一个已加密的分录起,连续对其进行哈希直至新分录。
::: warning
警告
在受限日记账中过账后,无法再关闭此功能,也不能编辑任何已加密的分录。 :::
安全凭证向导 {#data-inalterability/wizard}
也可以使用 Secure Entries(加密凭证)向导一次性加密 所有 日记账中截至指定日期的所有分录。
::: note
注意
向导独立于日记账设置和日记账类型运行。 :::
打开方式:先启用 developer mode(开发者模式),进入 Accounting --> Accounting,点击 Secure Entries。如果已激活 不可篡改功能 <data-inalterability/inalterability_features>,即使在非调试模式下也可见。
加密操作:选择要加密的截止日期,点击 Secure Entries 即可。
::: warning
警告
加密后,相关分录将不可再编辑。 :::
::: note
注意
有时会出现已超过所选日期的分录被加密的情况。这是因为哈希链是基于序列前缀、按序列号顺序形成的。 :::
报告下载 {#data-inalterability/report}
要下载数据不可篡改检查报告,进入 Accounting --> Configuration --> Settings --> Reporting(会计 → 配置 → 设置 → 报告),点击 Download the Data Inalterability Check Report(下载数据不可篡改检查报告)。
报告的第一部分概览所有包含哈希分录的日记账序列前缀。Restricted(受限)列显示该日记账是否启用了 secure posted entries with hash <data-inalterability/restricted> 选项(V 为已启用,X 为未启用)。Check(检查)列指示所有分录是否已正确哈希。
{.align-center}
第二部分提供每个已哈希日记账序列前缀的数据一致性检查的详细结果。可查看首个已哈希分录及其哈希、最后一个已哈希分录及其哈希。
{.align-center}