# 数据完整性

> 计算机科学 · CIE A-Level 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u6-data-integrity/

本子主题涵盖CIE 9618考试中考察的数据完整性定义、完整性丢失的常见原因，以及核心的错误检测与预防技术。你将学习区分关键概念并解答常见计算题目。

**先修:** [二进制数表示](https://www.owlsprep.com/zh/study/cie-9618-u1-binary-representation/)

## 学习目标

- 区分数据完整性、数据准确性和数据安全性
- 识别针对数据完整性的常见意外和故意威胁
- 解释不同错误检测和完整性维护机制的工作原理
- 计算用于错误检测的奇偶校验位和简单校验和

## 核心概念：什么是数据完整性？

**数据完整性** — 确保数据随时间推移保持准确、完整和一致，且不会被未经授权或意外方式篡改的数据特性。

*例:* 银行交易在存储和传输后仍保留正确数值，即拥有完整的数据完整性。

数据完整性常与两个相关概念混淆，CIE考试经常要求你区分它们：

- **数据准确性**: 指数据是否正确描述了它所代表的现实世界概念。数据可以是一致的（高完整性）但不准确（例如错误的客户出生日期被正确存储）。
- **数据安全性**: 指保护数据免受未经授权的访问。数据可以是安全的但已损坏（例如磁盘上损坏的加密数据会丢失完整性，但仍对未经授权用户不可访问）。

**例题:** 一名学生在在线表单中将出生日期填写为12/13/2005（月份为13）。这会影响准确性、完整性还是两者都受影响？

1. 月份取值13是无效的，且不符合学生的真实出生日期，因此这是准确性错误。
2. 如果系统一致无误地存储了13这个值，数据保持输入后未被修改：它仍然拥有完整性。
3. 结论：这是准确性错误，而非完整性错误。验证规则会在存储前拒绝无效条目，从而维护完整性。

> **考试提示:** 当题目要求区分这些术语时，务必分别定义每个术语才能获得满分。

## 数据完整性的常见威胁

数据完整性可能被意外事件和故意事件破坏：

- **意外损坏**: 硬件故障（例如磁盘坏扇区）、网络传输错误、写入操作时断电，或数据录入/编辑时的人为错误。
- **故意损坏**: 攻击者的未经授权修改、篡改数据的恶意软件，或内部人员篡改记录。
- **物理/环境损坏**: 热、水或冲击对存储介质造成损坏，导致存储位翻转。

**例题:** 银行在保存新客户交易记录时发生断电。解释这对数据完整性的影响。

1. 断电前可能只有部分新交易记录被写入磁盘。
2. 这会导致记录不完整，还可能损坏存储设备上定位记录的文件系统索引。
3. 此时数据不一致且不完整：这就是数据完整性的直接丢失。

> **考试提示:** 务必将威胁与对完整性的具体影响关联起来，不要只描述威胁本身。

## 错误检测：奇偶校验与校验和

**校验和** — 从数据块计算得到的小型数值，用于验证数据在传输或存储过程中未被损坏。

*例:* 对数据分组中所有字节求和得到的8位校验和。

奇偶校验是最简单的错误检测方法。每个数据块添加一个额外的奇偶校验位，使1位的总数为偶数（偶校验）或奇数（奇校验）。

**例题:** 对于7位数据`1011010`，使用偶校验得到的奇偶校验位是多少？

1. 统计输入数据中1位的数量：
2. $$1 + 0 + 1 + 1 + 0 + 1 + 0 = 4$$
3. 偶校验要求1位的总数（包括校验位）为偶数。4已经是偶数，因此校验位为0。
4. 最终传输的8位值: `01011010`

**例题:** 计算3个字节`01001011`, `00101001`, `01011100`的8位校验和。

1. 将每个二进制字节转换为十进制：$01001011_2 = 75$, $00101001_2 = 41$, $01011100_2 = 92$
2. 计算这些值的总和：
3. $$75 + 41 + 92 = 208$$
4. 对于8位校验和，我们只保留8位结果（丢弃溢出）。208的8位二进制是`11010000`，因此这就是校验和。

> **info**
>
> 简单奇偶校验只能检测奇数个位错误。如果有2个位翻转，奇偶性保持不变，错误不会被检测到。

> **考试提示:** 务必在答案中明确说明你使用的是偶校验还是奇校验，才能获得满分。

## 其他完整性维护机制

除了基础错误检测外，还有许多用于长期维护数据完整性的机制：

- **加密哈希**: 从输入数据生成固定长度的哈希；数据的任何修改都会改变哈希值。用于验证完整性，防范故意篡改。
- **冗余与备份**: 数据在不同位置存储多份副本，当一份副本损坏时可以恢复完整数据。RAID存储使用该机制实现硬件故障容错。
- **数据库验证规则**: 约束（数据类型检查、范围检查、外键规则）确保只存储有效、一致的数据。
- **循环冗余校验 (CRC)**: 一种基于多项式的错误检测方法，用于网络和存储，比简单校验和更有效。

**概念自测**

测试你的理解：

1. 简单奇偶校验可以检测以下哪种错误？

   - A：任何1位错误
   - B：任何2位错误
   - C：所有错误，无论位数多少
   - D：没有错误

   *解析:* 1位翻转会使1位的数量变化1，从而改变奇偶性，因此会被检测到。2位翻转不会改变奇偶性，因此无法被检测到。

## 常见错误

- **错误做法:** 将数据完整性与数据准确性或数据安全性混淆
  - 原因: CIE考试经常要求区分这些术语；混淆它们会丢失所有分数
  - 正确做法: 记住：完整性 = 一致且未被修改，准确性 = 符合真实世界，安全性 = 保护免受未经授权访问
- **错误做法:** 声称简单奇偶校验可以纠正错误
  - 原因: 考生经常夸大奇偶校验的功能，导致丢分
  - 正确做法: 始终记住：奇偶校验只能检测奇数个位错误，无法纠正错误
- **错误做法:** 计算奇偶校验时统计1位数量错误
  - 原因: 这是奇偶校验计算题目中最常见的可避免错误
  - 正确做法: 先统计原始数据中的1位数量，再添加校验位以满足要求的总奇偶性
- **错误做法:** 声称校验和可以防止数据损坏
  - 原因: 校验和只能检测损坏，无法阻止损坏发生
  - 正确做法: 校验和是错误检测工具：它们识别损坏，以便你恢复或重新传输数据

## 速查表

| 概念 | 用途 | 核心能力 |
| --- | --- | --- |
| 数据完整性 | 保证数据一致/未被修改 | 可靠系统的核心要求 |
| 偶校验 | 简单错误检测 | 检测奇数个位错误 |
| 奇校验 | 简单错误检测 | 检测奇数个位错误 |
| 校验和 | 错误检测 | 检测大多数意外损坏 |
| 加密哈希 | 完整性验证 | 检测意外和故意修改 |
| 简单奇偶校验 | 错误检测 | 无法纠正错误，也无法检测偶数个错误 |

## 下一步

理解数据完整性是进一步学习数据库系统、网络安全和密码学的基础概念。你在此学习的错误检测方法每天都用于数据存储、网络通信和云计算，并且构成从U盘到卫星通信等所有设备使用的更高级纠错技术的基础。数据完整性与数据安全机制协同保护数字信息，是所有现代计算机系统可靠性的基础。

- [隐私问题](https://www.owlsprep.com/zh/study/cie-9618-u6-privacy-issues/)
- [备份与恢复](https://www.owlsprep.com/zh/study/cie-9618-u6-backup-and-recovery/)
- [伦理与所有权](https://www.owlsprep.com/zh/study/cie-9618-u7-overview/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u6-data-integrity/
